在我的系统Ubuntu Hardy中,无法再现这种情况。以下是一个示例:
/tmp$ mkdir /tmp/sbuzz
/tmp$ cd /tmp/sbuzz
/tmp/sbuzz$ echo '<?php exit(1); ?>' >script_a.php
/tmp/sbuzz$ cat >script_b.php
<?php
system('php script_a.php', $return);
var_dump($return);
?>
/tmp/sbuzz$ php script_b.php
int(1)
/tmp/sbuzz$ echo '<?php exit(2); ?>' >script_a.php
/tmp/sbuzz$ php script_b.php
int(2)
/tmp/sbuzz$
退出代码0表示程序成功执行,所以它听起来像是您可能正在运行错误的script_a.php或者"php"可执行文件没有按照您的期望工作?也许您有一个名为"php"的脚本在解释器之前的路径中?"which php"报告了什么?在我的系统上,它说"/usr/bin/php"。
如果PHP找不到脚本,它将以1退出,例如:
/tmp/sbuzz$ cat script_b.php
<?php
system('php doesnt_exist_script_a.php', $return);
var_dump($return);
?>
/tmp/sbuzz$ php script_b.php
Could not open input file: doesnt_exist_script_a.php
int(1)
/tmp/sbuzz$
在这种情况下,我将script_b.php更改为尝试运行一个不存在的脚本,并且我得到了退出代码1(如果成功完成,则应该是2,因为我更改了上面的script_a),但它还显示了无法运行程序的错误。
您可能希望尝试更改为明确运行PHP可执行文件的完整路径:
system('/usr/bin/php script_a.php')
或者也可以返回脚本的完整路径:
system('/usr/bin/php /tmp/sbuzz/script_a.php')
你也可以尝试执行一个特定的程序,返回1,作为另一个数据点,例如:
system('false')
system('bash -c "exit 69"')
你可能想尝试使用除了1以外的退出代码,因为1是常见的失败代码。这就是为什么我在上面使用了“exit 69”的原因。“false”会退出并返回1。
当然,还可以直接运行script_a.php脚本:
/tmp/sbuzz$ php script_a.php
/tmp/sbuzz$ echo $?
2
/tmp/sbuzz$
"
"$?"是上一个运行命令的退出代码,在shell提示符下。
"
$?
包含什么内容? - Ignacio Vazquez-Abrams$?
是在 bash 中的返回参数。php script_a.php; echo $?
- Ignacio Vazquez-Abramsexit(1)
替换为exit(2)
,每个操作系统的返回值是什么? - Evan Mulawskiphp script_a.php | tee test.log
记录输出。如果我不使用 tee 进行日志记录,我可以得到预期的结果int(1)
。 - Sebastian Schmidt