既不
<?php system('php file.php'); ?>
,也不
<?php system('/usr/bin/php file.php'); ?>
的工作。为什么呢?
我尝试使用-q
,!#/usr/bin/php
等等。
答案 0 :(得分:4)
你应该用-f调用它,但它也应该没有它:
<?php system('/usr/bin/php -f file.php'); ?>
你说“它不起作用”是什么意思?
您是否希望将内容输出,就好像它们来自您的脚本一样?使用include或require。
您想要变量中的内容吗?使用backtick operator。
您可以使用反引号操作符而不是系统来查看从命令中获得的内容。
答案 1 :(得分:1)
可能是由于安全模式。
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.
答案 2 :(得分:0)
没有更多信息......它可能是PHP可执行文件的路径,file.php的路径或文件权限问题。
答案 3 :(得分:0)
将完整路径传递给'file.php'时会发生什么?
此外,尝试将输出(但是stdout和stderr)重定向到文件,以便您可以看到生成的错误消息。
答案 4 :(得分:0)
感谢大家的回答!
因为“不起作用”我的意思是:它不会返回或打印任何内容。
我有两个文件a.php&amp;&amp; b.php(具有所有权限)和safe_mode关闭
b.php
<?php
$a = system('/usr/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
print_r($a);
echo '-'; # for separation
print_r($b); ?>
和a.php
<?php echo 'hello world'; ?>
当我从我的浏览器(localhost / b.php)运行b.php时,会打印出来:
string(0)“” -int(5)
这意味着$ b变量是5但是...... 5是什么?
答案 5 :(得分:0)
当您启用错误报告时它会说什么?
<?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);
答案 6 :(得分:0)
当我改变
system('/usr/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
的
('/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
然后它说127而不是5,我猜这些是错误代码
答案 7 :(得分:0)
您显然无法理解 system 功能的工作原理。你真正需要的可能是popen。使用 popen 启动该过程,然后使用 fgets 读取其输出。
或者,您可以使用其他人已建议的反引号运算符。
答案 8 :(得分:0)
尝试:
$output = array();
$returnCode = 0;
exec('/usr/bin/php -f /Applications/MAMP/htdocs/a.php 2>&1', $output, $returnCode);
print_r($output);
2>&1
将stderr重定向到stdout,因此将在$output
答案 9 :(得分:0)
坚持......你到底想要实现的目标是什么?只需运行a.php并将输出返回给浏览器?在那种情况下,include它。从您发布的a.php内容(&lt;?php echo'hello world';?&gt;)来看,这似乎就是您想要的。
如果a.php的内容更多,请回复并解释你真正想做的事情。
答案 10 :(得分:0)
尝试:
$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的输出并捕获错误。
答案 11 :(得分:0)
}}对于“不起作用”,我的意思是:它不会返回或打印任何内容。
尝试在服务器上获取终端/ shell并尝试系统命令。如果您的操作系统是unixy,您可以使用哪个php 之类的东西来找到php cli的正确路径。
你确实安装了php cli吗?它通常不会默认安装。
您的网络服务器是做chroot还是其他什么?也许在您尝试使用system()的环境中不存在php cli。
尝试执行简单的系统('php -v'),而不是尝试调用脚本。一旦你得到正确输出php版本号,然后将调用添加到你的脚本。