如何从PHP运行带参数的Perl脚本

3 投票
3 回答
1079 浏览
提问于 2025-04-15 23:09

我的网页用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脚本时,里面的四个脚本都能完美运行。然而,当我通过PHP运行这个shell脚本时,只有Perl脚本不工作。

请问有什么建议可以帮我解决这个问题吗?

非常感谢!!!

3 个回答

0

我建议你试试这个命令:
senseLearner.pl -i Up ... -pos > /var/log/senseLearner.log 2>&1
(然后查看那个日志文件)

另外,你也可以尝试指定解释器,比如:
/path/to/perl senseLearner.pl -i Up ... -pos > /var/log/senseLearner.log 2>&1

0

有可能Apache/PHP运行的用户(通常是apache)没有权限访问Uploaded_Files/slinput_0.txtUploaded_Files/presloutput_0.txt这两个文件。

我猜想,apache需要对slinput_0.txt文件有读取权限,对presloutput_0.txt文件有读写权限,并且对目录Uploaded_Files需要有读、写和执行的权限。

你能成功运行的原因是你是以自己的用户身份在操作,通常你有权限在网站根目录下写入文件。

1

这很可能是权限的问题。试着把perl脚本需要读取的文件设置为a+rw权限,看看这样能不能正常工作。如果可以,那你就需要找出运行php的用户(很可能是apache用户),确保他们可以读写相关的文件。还要确保perl脚本可以被php用户(apache)执行。

撰写回答