通过exec()从php调用php没有结果

时间:2010-03-10 05:04:41

标签: php command-line exec

我有一个PHP脚本,可以根据用户输入创建其他PHP文件。基本上,有些文件包含可由用户翻译的特定语言常量(define)。为了避免运行时错误,我想测试新写入的文件是否存在解析错误(由于“异常”字符序列)。我在SO上阅读了几篇帖子(如PHP include files with parse errors),并尝试了一个使用

的函数
$output = exec("php -l $filename");

确定文件是否正确解析。这在我的本地机器上完美运行,但在提供商的机器上,对exec("php ...")的调用输出似乎总是空的。我尝试了对ls的调用,它给了我输出,让我假设PHP以某种方式被配置为不对命令行调用做出反应。有没有人知道解决这个问题?

编辑:我忘了提及,我已经尝试shell_exec并且它也没有给出任何结果。回应sganesh的回答:我也试过了,对不起我忘了提。但是,输出(第二个参数)将始终为空数组,并且返回值将始终为127,无论要测试的PHP文件是否存在语法错误。

6 个答案:

答案 0 :(得分:9)

我遇到了同样的问题。适用于我的解决方案可在running-at-from-php-gives-no-output中找到。我需要添加输出重定向。

$output = exec("php -l $filename 2>&1");

答案 1 :(得分:6)

您可以尝试使用exec第二个和第三个参数。 第二个参数将具有该命令的输出。 第三个参数将具有返回值。

exec将只返回命令的最后一行。

$filename = "a.php";
$output = exec("php -l $filename",$op,$ret_val);
print $output."\n";
print $ret_val."\n";
var_dump($op);

答案 2 :(得分:1)

通过执行shell_exec(),您可以看到输出,就像通过命令行执行该文件一样。你可以在这里查看是否有错误。

<?php
if (strpos(shell_exec('php -l file.php'), 'Syntax Error')) {
    die('An error!');
}

您的主机可能也可能禁用shell_exec()或exec()。

答案 3 :(得分:1)

检查文件有效性的好主意: - )!

现在,从exec()的PHP手册:

  

注意:启用安全模式后,您只能执行safe_mode_exec_dir中的文件。出于实际原因,目前不允许在可执行文件的路径中包含组件。

你能检查一下你的情况吗?

另外,您可以通过在exec()中提供PHP解释器的完整路径来检查,而不仅仅是php。让我知道你的表现。

皮纳基环礁

答案 4 :(得分:0)

正确的方法是使用imagemagick在Windows系统上添加>2&1测试版!

答案 5 :(得分:-1)

我通过使用不同的方法解决了我原来的问题。以下是我现在所做的事情:

  1. 撰写包含内容<?php include "< File to test >"; echo "OK"; ?>
  2. 的临时文件
  3. 为临时文件生成正确的URL
  4. 使用此URL执行HTTP请求
  5. 检查结果是否等于“OK”。如果是,则测试的文件无错误地解析。
  6. 删除临时文件
  7. 也许这可以在没有临时文件的情况下通过向文件发出HTTP请求来直接测试来完成。但是,如果存在解析错误并且错误被抑制,则输出将为空,并且在没有解析错误的文件的情况下输出将无法识别。此方法存在风险,因为文件实际上是执行而不是仅检查。就我而言,首先只有有限数量的用户可以访问此功能。不过,我自然并不完全满意。

    为什么exec()方法不起作用,我仍然不确切知道。 pinaki可能是正确的,建议提供PHP可执行文件的完整路径,但我找不到完整的路径。

    谢谢大家的回答,我向你们所有人投了赞成票。但是,我不能接受你的任何答案,因为你的建议都没有真正解决我的问题。