如何输出'来自exec或shell_exec调用的php脚本?

时间:2016-01-14 15:01:45

标签: php shell shell-exec

我有这行代码来执行后台任务(将几个png转换为jpg)

exec("nohup path/to/php path/to/convertToJpg.php >> path/to/convert_to_jpg.log > /dev/null &");

现在我正在撰写convertToJpg.php脚本,但我无法弄清楚如何从那里输出信息,以便将其记录到convert_to_jpg.log

当我尝试谷歌时,我想到的是如何从execshell_exec调用php脚本,因为用于描述这两种情况的词几乎相同。

澄清

将代码复制到SO时,我的代码中有一个额外的引用。我修好了。在原始代码中,convertToJpg.php按预期调用,由error_logs确认,以便进行检查。

有几个答案指向$output中的exec()参数。据我了解,这完全违背了使用>> path/to/convert_to_jpg.log进行shell重定向的目的。

我的问题不是如何从exec()命令获取输出,而是使用什么代码从convert_to_jpg.log

实际输出(动词)

更多澄清

如果我打电话

exec("nohup path/to/php path/to/convertToJpg.php >> path/to/convert_to_jpg.log > /dev/null &");

$results = shell_exec("path/to/php path/to/convertToJpg.php > /dev/null");
echo $results;

$results = "";
exec("path/to/php path/to/convertToJpg.php > /dev/null", $results);
print_r($results);

哪一个并不重要。

以下是convertToJpg.php

<?php
    echo "Will this be in $results?"; // No, this did not end up in results.

    error_log("error logs are being logged, so I know that this php file is being called");

    //I have tested echo, but that does not work.  
    //What php function do I use so that a string will be captured in the $output of an exec() call?
?>

2 个答案:

答案 0 :(得分:0)

$output = "";
$return_var = "";
exec("nohup path/to/php path/to/convertToJpg.php >> path/to/convert_to_jpg.log > /dev/null &", $output, $return_var);

<强> $输出

如果输出参数存在,那么指定的数组将被命令的每一行输出填充。尾随空格(例如\ n)不包含在此数组中。请注意,如果数组已包含某些元素,则exec()将附加到数组的末尾。如果您不希望函数附加元素,请在将数组传递给exec()之前调用数组上的unset()。

<强> $ return_var

如果return_var参数与输出参数一起出现,则执行命令的返回状态将写入此变量。

http://php.net/manual/en/function.exec.php

答案 1 :(得分:0)

好的,我明白了!

要简单回答问题,请使用echoprint

这是我尝试过的第一件事,但它没有奏效,这让我觉得这是我应该调用的其他功能。 (我显然没有用过这么多)

我遇到的真正问题是> /dev/null,它丢弃了所有输出。一旦我删除了它,它很好。在此解释:What is /dev/null 2>&1? 我曾经在某个时候完成了复制/粘贴而没有真正理解它的作用......

因为我指责错误的事情,我最终得到了这个基本问题。