如何从 exec 或 shell_exec 调用的 php 脚本中 'output'?

How to 'output' from a php script called by exec or 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

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


澄清一下

将代码复制到 SO 时,我的代码中出现了额外的引号。我已经修好了。在我的原始代码中,convertToJpg.php 被按预期调用,由 error_logs 确认放置在其中进行检查。

几个答案指向 exec() 中的 $output 参数。据我了解,这完全违背了使用 >> 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?
?>
$output = "";
$return_var = "";
exec("nohup path/to/php path/to/convertToJpg.php >> path/to/convert_to_jpg.log > /dev/null &", $output, $return_var);

$output

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

$return_var

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

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

好的,我明白了!

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

这是我尝试的第一个方法,但没有用,这让我认为这是我应该调用的其他函数。 (我显然没用过这么多)

我遇到的真正问题是 > /dev/null,它丢弃了所有输出。一旦我删除了它,它很好。此处解释:What is /dev/null 2>&1? 我在某个时候做了一个 copy/paste 并没有真正理解那做了什么...

因为我在责怪错误的事情,所以我最终提出了这个离题的问题。