两者都不
<?php system('php file.php'); ?>
也不
<?php system('/usr/bin/php file.php'); ?>
工作。为什么?
我试过 with -q
, with!#/usr/bin/php
等。
可能是因为安全模式。
Note: When safe mode is enabled, you can only execute files within the safe_mode_exec_dir. For practical reasons, it is currently not allowed to have .. components in the path to the executable.
没有更多信息......它可能是 PHP 可执行文件的路径、file.php 的路径或文件权限问题。
当您将完整路径传递给“file.php”时会发生什么?
此外,尝试将输出(但 stdout 和 stderr)重定向到文件,以便您可以看到生成的错误消息。
谢谢大家的回答!!
对于“不起作用”,我的意思是:它不会返回或打印任何东西。
我有两个文件 a.php && b.php (具有所有权限)并且安全模式已关闭
b.php
<?php
$a = system('/usr/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
print_r($a);
echo '-'; # for separation
print_r($b); ?>
和一个.php
<?php echo 'hello world'; ?>
当我从浏览器(localhost/b.php)运行 b.php 时,它会打印:
字符串(0)“”-int(5)
这意味着 $b 变量是 5 但是... 5 什么?
当您打开错误报告时它会说什么?
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
$a = system('/usr/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
print_r($a);
echo '-'; # for separation
print_r($b);
}} 对于“不起作用”,我的意思是:它不会返回或打印任何东西。
尝试在您的服务器上获取终端/shell 并尝试您的系统命令。如果您的操作系统是 unixy,您可以使用which php之类的东西来找到 php cli 的正确路径。
您确实安装了 php cli 对吗?默认情况下通常不安装它。
您的网络服务器是否执行 chroot 或其他操作?在您尝试使用 system() 的环境中,可能不存在 php cli。
与其尝试调用脚本,不如尝试做一个简单的system('php -v')。一旦你得到正确输出 php 版本号,然后将调用添加到你的脚本。
当我改变
system('/usr/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
为了
('/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
然后它说 127 而不是 5,我猜这些是错误代码
尝试:
$output = array();
$returnCode = 0;
exec('/usr/bin/php -f /Applications/MAMP/htdocs/a.php 2>&1', $output, $returnCode);
print_r($output);
将2>&1
标准错误重定向到标准输出,因此任何错误消息都将被捕获$output
等等……你到底想在这里实现什么?只需运行 a.php 并将输出返回到浏览器?在这种情况下,包括它。从您发布的 a.php ( <?php echo 'hello world'; ?> ) 内容的外观来看,这似乎是您想要的。
如果 a.php 的内容还有更多内容,请回帖并说明您真正想做的事情。
尝试:
$fp = popen('/usr/bin/php -f file.php', 'r');
if(false === $fp)
{
// something bad happened: error handle
}
$contents = '';
while(false === feof($fp))
{
$contents .= fgets($fp);
}
fclose($fp);
echo $contents;
这将允许您捕获子shell 的输出并捕获错误。
您显然不了解系统功能的工作原理。你真正需要的可能是popen。使用popen启动进程,然后使用fgets读取其输出。
或者,您可以使用其他人已经建议的反引号运算符。