从PHP运行Node.js脚本 - 输出被截断为512个字符

时间:2017-03-05 22:07:29

标签: php node.js symfony firebase-authentication symfony-process

我们使用Symfony Process从PHP运行node.js CLI脚本。

脚本始终将整个响应作为JSON打印在一行中。

响应以某种方式被截断为512个字符。

我只在xdebug.var_display_max_data => 512 => 512中找到php.ini,但不知道这是如何相关的。

Adapter > Symfony Process > node script.js

A)测试节点脚本

    来自终端节点脚本$ node user-update.js parameters
  1. 在所有情况下都会返回完整结果 - 例如629个字符。
  2. 来自Symfony Process节点脚本响应被截断为512个字符。
  3. B)测试Symfony过程

    $process = new Process($cmd);
    try {
        $process->mustRun();
        $response = $process->getOutput();
    } catch (ProcessFailedException $e) {
        $response = $e->getMessage();
    }
    echo $response;
    echo PHP_EOL;
    echo strlen($response);
    
    1. $cmd = 'node user-update.js parameters'; - 截断为512。
    2. $cmd = 'php -r \'for($i=0; $i<520; $i++){ echo "."; }\''; - 不会截断。
    3. $cmd = 'cat long_one_line.txt'; - 打印完整档案。 1650个字符在一行。
    4. C)尝试使用PHP shell函数

      $response = shell_exec($cmd); // response is truncated to 512
      system($cmd, $returnVal); // print directly to STDOut, truncated to 512
      

      可能是什么原因和解决方案?

      • node v7.6.0
      • PHP 7.1.2

1 个答案:

答案 0 :(得分:0)

我怀疑你的进程在PHP读取缓冲区之前就结束了。

作为解决方法,您可以添加以下内容:

// The `| cat` at the end of this line means we wait for
// cat's process to end instead of node's process.
$process = new Process('node user-update.js parameters | cat');