首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用PHP exec执行PHP脚本

无法使用PHP exec执行PHP脚本
EN

Stack Overflow用户
提问于 2009-02-19 17:09:08
回答 6查看 68.1K关注 0票数 16

我正在尝试使用PHP exec调用来调用一个需要几秒钟的脚本(与第三方的web服务)。经过一番努力,我将其简化为经典的hello world示例。调用脚本如下所示:

代码语言:javascript
复制
exec('/usr/bin/php /home/quote2bi/tmp/helloworld.php > /tmp/execoutput.txt 2>&1 &');

当我运行它时,输出的execoutput.txt包含一个调用脚本页面的副本,而不是我期望的hello world

为什么我不能使用exec来执行这个PHP脚本?请注意,当我将命令更改为类似于ls -l的内容时,输出结果是一个目录列表,不出所料。顺便说一句,如果重要的话,我确实把调用的脚本改成了755……

更新-我将exec调用移到了调用脚本的末尾,至少现在我在输出中看不到调用脚本的执行。感谢海报,我将尝试其中的一些想法。

帮助!

谢谢史蒂夫

EN

回答 6

Stack Overflow用户

发布于 2010-05-20 01:49:18

我也遇到了这个问题,结果发现这是php (#11430)中的一个bug。修复方法是在一个php脚本中调用另一个php脚本时使用php-cli。因此,您仍然可以使用exec,但在浏览器中调用它时,请使用php-cli而不是php:

代码语言:javascript
复制
exec("php-cli  somescript.php");

这对我很有效。

票数 28
EN

Stack Overflow用户

发布于 2009-02-19 17:18:13

exec所做的是接受最右边的命令,并将其附加到您的目的地。如果您的php脚本中有shebang行,则不需要包含php解释器的binary指令。

如果您只想要脚本的输出,请尝试:

代码语言:javascript
复制
exec('/home/quote2bi/tmp/helloworld.php > /tmp/execoutput.txt 2>&1 &')

但是,如果不希望错误出现在文件中,则应在输出到文件之前重定向STDERR。如下所示:

代码语言:javascript
复制
exec('/home/quote2bi/tmp/helloworld.php 2> /dev/null > /tmp/execoutput.txt')

上面的代码应该只将"Hello World“输出到execoutput。

编辑:

有趣的是,你得到了这种行为。你说过命令"ls“有效。尝试为它创建一个别名,并将其转发到一个文件,如下所示:

alias pexec='php /home/quote2bi/tmp/helloworld.php'

然后

代码语言:javascript
复制
exec('pexec > /tmp/execoutput.txt 2>&1 &')

似乎是exec处理输入的方式存在问题,而不是shell本身。

-John

票数 16
EN

Stack Overflow用户

发布于 2009-02-19 20:59:12

问题出在PHP本身,它将脚本中的所有内容都视为$argv。它不会将输出重定向到文件ou到/dev/null。

前段时间我也遇到过同样的问题。我所做的是在/opt/php-bin中创建一个runscript.php,然后在这个脚本中运行它应该运行的内容。如下所示:

代码语言:javascript
复制
$script = $argv[1]
$params = implode(' ', array_slice($argv, 2));
$cmd    = "{$script} {$params} > /dev/null &";

$output = array();
$return = 0;
exec("php {$cmd}", $output, $return);

exit((int)$return);

然后使用以下命令调用它:

代码语言:javascript
复制
exec('/opt/php-bin/runscript.php /path/to/your/script.php arg1 arg2')

这是我唯一能让它工作的方法。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/566248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档