【问题标题】:Calling Perl script with PHP, passing variables and put result into a file用 PHP 调用 Perl 脚本,传递变量并将结果放入文件中
【发布时间】: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。感谢您的所有努力和帮助!我真的很感激:)

标签: php mysql perl


【解决方案1】:

你确定 perl 正在执行吗?也许您应该用“which perl”替换命令,以确保并使用 Perl 的完整路径。另一个想法是确保您的:

  • perl 脚本是可执行的(使用 chmod)
  • 确保它有 '#!/usr/bin/perl'(或任何你的 perl 路径)
  • 不使用 perl 命令将命令更改为“/home/www/host/cgi/remote-board-exec.pl...”
  • 转储输出数组 ($ausgabe) 的内容,就好像命令无法执行一样,您可能会发现发生了什么。

【讨论】:

  • 权限已经设置好并且脚本本身运行良好。但是一旦有“-sqlfileexec query.sql”被调用,它就会刹车。我已经让脚本告诉我 $ausgabe 我得到的是: $return_var ausgeben 0 $ausgabe ausgeben Array ( )
  • 可能是 Perl 脚本坏了。尝试将 SQL 脚本文件的完整路径放入命令中。确保您的参数只有一个 - 而不是 --
  • 刚刚也尝试了脚本的绝对路径,生成命令的输出也很好
  • 好的,PHP 似乎有问题。我只是将 PHP 应该执行的命令复制到 CLI 中并手动执行……它工作得很好,结果存储在我提到的文本文件中。有什么地方可以检查需要哪些权限才能使其正常运行?
  • 我发现了问题......因为我使用 ssh 密钥登录 CLI 并且网络服务器没有这样的密钥,所以它不起作用。 PERL 脚本应该从不同的服务器获取一些数据,并且 PUTTY 有可能进行 agent_forwarding。感谢您的所有努力和帮助!我真的很感激:)
猜你喜欢
  • 2011-03-27
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多