【问题标题】:How to 'output' from a php script called by exec or shell_exec?如何从 exec 或 shell_exec 调用的 php 脚本中“输出”?
【发布时间】:2016-01-14 15:01:44
【问题描述】:

我有这行代码来执行后台任务(将几个 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?
?>

【问题讨论】:

  • 鉴于这是完全无效的 php,它根本不会运行...
  • 什么是无效的php?我的还是之前明显删除了他的评论的评论者?
  • 您在 exec() 调用中删除了额外的 "...

标签: php shell shell-exec


【解决方案1】:
$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

【讨论】:

  • 这不是shell重定向的重点吗?这就是“>>>> path/to/convert_to_jpg.log”的用途。我要问的是我在 convertToJpg.php 中使用什么代码来“回显”到输出。
  • 首先,它的$output,这将打印您从脚本 "convert_to_jpg" 中“回显”的所有内容,在数组中逐行打印。 >>> 是写入文件,echo 是单独的,但是你的问题格式错误。
  • 但是$output 不起作用,因为我没有等待命令完成。到该脚本完成时,会话将已关闭。因此nohup[...]&amp;
  • 那你就不能直接在convert_to_jpg.log文件上使用$file_string = file_get_contents(...)并将其导入到字符串中吗? php.net/manual/en/function.file-get-contents.php你说你想从一个日志文件输出,它是一个非执行文件,所以你不能从它输出,但你可以打印/解析它。
  • 不,不知何故,我很难让自己清楚。也许这就是为什么我自己一开始找不到答案的原因。我不想从日志文件中输出。我使用什么代码从convertToJpg.php 输出,以便它显示在$output 参数或convert_to_jpg.log 文件中,具体取决于它的实现方式。
【解决方案2】:

好的,我想通了!

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

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

我遇到的真正问题是&gt; /dev/null,它丢弃了所有输出。一旦我删除它,它就很好。在这里解释:What is /dev/null 2>&1? 我曾在某些时候完成了复制/粘贴,但并没有真正理解它做了什么......

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多