system('php file.php');不起作用,为什么?

时间:2008-10-13 08:42:48

标签: php system execute

既不

<?php system('php file.php'); ?>

,也不

<?php system('/usr/bin/php file.php'); ?>

的工作。为什么呢?

我尝试使用-q!#/usr/bin/php等等。

12 个答案:

答案 0 :(得分:4)

你应该用-f调用它,但它也应该没有它:

<?php system('/usr/bin/php -f file.php'); ?>

你说“它不起作用”是什么意思?

您是否希望将内容输出,就好像它们来自您的脚本一样?使用includerequire

您想要变量中的内容吗?使用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.
     

http://www.php.net/system

答案 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版本号,然后将调用添加到你的脚本。