如何使用php中的一些参数运行perl脚本

时间:2010-05-25 20:28:13

标签: php python perl shell

我的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脚本不起作用。

请您给我解决此问题的任何提示?

非常感谢!!!

3 个答案:

答案 0 :(得分:1)

这很可能是权限问题。尝试将perl脚本读取的文件设置为+ rw,然后查看它是否有效。如果是这样,那么你需要找出运行php的用户(可能是apache用户),并确保他们可以读/写相关文件。 还要确保php用户(apache)可以执行Perl脚本。

答案 1 :(得分:0)

Apache / PHP运行的用户(通常是apache)可能没有Uploaded_Files/slinput_0.txtUploaded_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