如何从 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 时,我想到的是如何从 exec
或 shell_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 状态将写入此变量。
好的,我明白了!
要简单明了地回答问题,请使用 echo
或 print
。
这是我尝试的第一个方法,但没有用,这让我认为这是我应该调用的其他函数。 (我显然没用过这么多)
我遇到的真正问题是 > /dev/null
,它丢弃了所有输出。一旦我删除了它,它很好。此处解释:What is /dev/null 2>&1?
我在某个时候做了一个 copy/paste 并没有真正理解那做了什么...
因为我在责怪错误的事情,所以我最终提出了这个离题的问题。
我有这行代码来执行后台任务(将几个 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 时,我想到的是如何从 exec
或 shell_exec
调用 php 脚本,因为这些词用于描述两种情况几乎一样。
澄清一下
将代码复制到 SO 时,我的代码中出现了额外的引号。我已经修好了。在我的原始代码中,convertToJpg.php
被按预期调用,由 error_logs
确认放置在其中进行检查。
几个答案指向 exec()
中的 $output
参数。据我了解,这完全违背了使用 >> path/to/convert_to_jpg.log
.
我的问题不是如何从 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 状态将写入此变量。
好的,我明白了!
要简单明了地回答问题,请使用 echo
或 print
。
这是我尝试的第一个方法,但没有用,这让我认为这是我应该调用的其他函数。 (我显然没用过这么多)
我遇到的真正问题是 > /dev/null
,它丢弃了所有输出。一旦我删除了它,它很好。此处解释:What is /dev/null 2>&1?
我在某个时候做了一个 copy/paste 并没有真正理解那做了什么...
因为我在责怪错误的事情,所以我最终提出了这个离题的问题。