我的html网页调用php脚本将文件从本地计算机上传到服务器,如下所示。
<form enctype="multipart/form-data" action="upload.php" method="POST">
<p><b><h3> <font color="#003366"> (1) Upload your reading text file. </font>
</h3> </b> </p>
<INPUT type="file" name="uploaded" size="50" >
<br/>
<input type="submit" name="files" value="upload">
</form>
为了处理上传的文件,我的php脚本调用了一个shell脚本
$output=system('/bin/sh connector_0.sh');
我的shell脚本由一系列python / perl脚本组成。
#!/bin/sh
python main_senselearner_final_0.py
senseLearner.pl -i Uploaded_Files/slinput_0.txt -o Uploaded_Files/presloutput_0
.txt -model modelNNCollocations -model modelJJCollocations -model modelVBColloc
ations -pos
python smutngslout_0.py
python genhtml_0.py
现在,问题如下:shell脚本中的所有python脚本都可以通过php完成。但perl脚本不起作用。
当我在我的服务器中自己运行shell脚本时,shell中的所有四个脚本都运行良好。但是,当我从php运行shell脚本时,只有perl脚本不起作用。
请您给我解决此问题的任何提示?
非常感谢!!!
答案 0 :(得分:1)
这很可能是权限问题。尝试将perl脚本读取的文件设置为+ rw,然后查看它是否有效。如果是这样,那么你需要找出运行php的用户(可能是apache用户),并确保他们可以读/写相关文件。 还要确保php用户(apache)可以执行Perl脚本。
答案 1 :(得分:0)
Apache / PHP运行的用户(通常是apache)可能没有Uploaded_Files/slinput_0.txt
或Uploaded_Files/presloutput_0.txt
的权限。
只是猜测但是apache需要读取slinput_0.txt
文件,读取/写入presloutput_0.txt
和读/写/ exec目录Uploaded_Files
尝试时它起作用的原因是您以用户身份运行,并且很可能有权写入webroot。
答案 2 :(得分:0)
我试试
senseLearner.pl -i Up ... -pos&gt; /var/log/senseLearner.log 2&gt;&amp; 1
(并查看之后的日志文件)
也许你可以尝试指定解释器,如
/ path / to / perl senseLearner.pl -i Up ... -pos&gt; /var/log/senseLearner.log 2&gt;&amp; 1