【发布时间】:2014-04-22 10:38:15
【问题描述】:
由于要通过 PHP 调用的 perl 脚本,我差点失去理智。
我有一个 PHP 表单,我在其中放入了一个 MySQL 查询,该查询存储在一个文件中并选择了一些变量。
如果我调用任何 SHELL 命令,例如 "top" ... 一切正常,但只要我尝试使用变量调用我的 perl 脚本,就根本没有结果。
应该存储结果的文件保持为空。
这是 PHP 文件中的调用部分:
if (isset($_POST['submit'])) {
$file = 'query.sql';
$query = $_POST['query'];
file_put_contents($file, $query);
$command = "perl /home/www/host/html/cgi/remote-board-exec.pl -sqlfileexec query.sql > /home/www/host/html/cgi/passthrutest.txt";
exec($command, &$ausgabe, $return_var);
没有错误消息,我已经尝试过调试,但没有任何帮助:(
【问题讨论】:
-
尝试使用 exec "/usr/bin/perl /home/www/host/html/cgi/remote-board-exec.pl -sqlfileexec query.sql > /home/www/host/html /cgi/passthrutest.txt"
-
您是否假设
perl在通过 php 调用时在路径中?您是否假设从命令的角度来看query.sql也在当前目录中?如果一切都失败了,请使用绝对路径。 -
刚刚用绝对路径也试过了,结果是一样的……什么都没有。文件和脚本的路径很好,脚本本身也可以正常工作。但是一旦涉及到这个->“-sqlfileexec query.sql”,结果就是空的
-
可以尝试完全从等式中删除脚本,只是尝试调用 perl 来工作。
$command = "perl -e \"print qq{Hello World\\n}\"";如果这不起作用,那么至少你已经隔离了你的问题。然后添加一个位于目录中的虚拟脚本作为您的其他 .pl,它只打印 Hello world。像这样的增量更改将帮助您找出问题所在。 -
这是我做的第一件事,看看是否允许 Web 服务器运行 PERL 脚本。尽管如此,我还是发现了问题......因为我使用 ssh 密钥登录 CLI 并且网络服务器没有这样的密钥,所以它不起作用。 PERL 脚本应该从不同的服务器获取一些数据,并且 PUTTY 有可能进行 agent_forwarding。感谢您的所有努力和帮助!我真的很感激:)