我无法在我的系统 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”的脚本?“哪个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 以外的退出代码,这是常见的失败。这就是为什么我在上面做了“69 号出口”。"false" 将以 1 退出。
当然,也可以尝试直接运行 script_a.php:
/tmp/sbuzz$ php script_a.php
/tmp/sbuzz$ echo $?
2
/tmp/sbuzz$
“$?” 是最后一个运行命令的退出代码,在 shell 提示符下。