【问题标题】:How to run perl script with a few arguments from php如何使用来自 php 的一些参数运行 perl 脚本
【发布时间】:2011-02-23 21:30:05
【问题描述】:

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

你能给我一些解决这个问题的建议吗?

非常感谢!!!

【问题讨论】:

  • 我更正了您的格式 - 使用代码格式工具栏按钮,或将代码缩进四个空格。
  • 捕获shell脚本的输出和标准错误。在 shell 脚本的每一行之后检查$?
  • “不起作用”没有帮助。具体会发生什么(错误消息、日志条目、损坏的输出、溢出的牛奶、小猫沙发上的毛皮)? @mobrule:set -x 也可能有用。
  • Paul、mobrule、Dennis,感谢您的帮助和建议! :) @丹尼斯,什么也没发生。该脚本没有输出任何内容。

标签: php python perl shell


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    运行 Apache/PHP 的用户(通常是 apache)可能没有 Uploaded_Files/slinput_0.txtUploaded_Files/presloutput_0.txt 的权限。

    只是猜测,但 apache 需要读取 slinput_0.txt 文件,读取/写入 presloutput_0.txt 和读取/写入/执行目录 Uploaded_Files

    当您尝试它时它起作用的原因是您以您的用户身份运行并且很可能具有写入 webroot 的权限。

    【讨论】:

    • 只是猜测,但apache需要读取slinput_0.txt文件,读取/写入presloutput_0.txt和读取/写入/执行目录Uploaded_Files ==>是的,这也是我猜的.所以我尝试使用 chmod 755/(甚至 777)将这些文件设置为读/写,它返回“chmod:更改 `slinput_0.txt' 的权限:不允许操作”你能给我一些提示如何解决它吗?非常感谢!
    • 这意味着您没有这些文件的权限 - 如果您对网络服务器具有 root 访问权限,则需要 sudo chmod。这些目录可能已经归 apache 所有,但没有正确的读/写/执行权限。如果您没有对网络服务器的 root 访问权限,则需要从托管公司获得帮助以修复一些权限。
    • 我明白了。非常感谢! :)
    【解决方案3】:

    我会尝试
    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 2012-08-29
      • 2015-04-13
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      相关资源
      最近更新 更多