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

从PHP运行Node.js脚本-输出被截断为512个字符,php,node.js,symfony,firebase-authentication,symfony-process,Php,Node.js,Symfony,Firebase Authentication,Symfony Process,我们使用Symfony进程从PHP运行node.js CLI脚本 脚本总是在一行中将整个响应打印为JSON 响应以某种方式被截断为512个字符 我只在php.ini中发现xdebug.var\u display\u max\u data=>512=>512,但没有看到这两者之间的关系 Adapter > Symfony Process > node script.js A)测试节点脚本 从终端节点脚本$node user-update.js parameters返回所有情况下的完整

我们使用Symfony进程从PHP运行node.js CLI脚本

脚本总是在一行中将整个响应打印为JSON

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

我只在
php.ini
中发现
xdebug.var\u display\u max\u data=>512=>512
,但没有看到这两者之间的关系

Adapter > Symfony Process > node script.js
A)测试节点脚本

  • 从终端节点脚本
    $node user-update.js parameters
    返回所有情况下的完整结果,如629个字符
  • 从Symfony进程节点脚本响应被截断为512个字符
  • B)测试符号流程

    $process = new Process($cmd);
    try {
        $process->mustRun();
        $response = $process->getOutput();
    } catch (ProcessFailedException $e) {
        $response = $e->getMessage();
    }
    echo $response;
    echo PHP_EOL;
    echo strlen($response);
    
    $response = shell_exec($cmd); // response is truncated to 512
    system($cmd, $returnVal); // print directly to STDOut, truncated to 512
    
  • $cmd='node user-update.js parameters'-截断为512

  • $cmd='php-r\$i=0;$i我怀疑您的进程在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');
    

    我将从nodejs应用程序的调试开始。它将从终端返回预期的完整结果。如果请求的结果较短,它将从主PHP方法正常工作。例如,如果AuthUser没有
    photoURL
    或long
    dispalyName
    ,则响应小于512个字符,进程(PHP)获取完整有效的JSON-一切正常。
    PHP7.1.2(cli)(构建时间:2017年2月23日23:40:22)(NTS)
    Dirty fix是运行
    $cmd='node script.js>。$tmp;
    ,而不是
    cat$tmp;
    ,或者使用PHP读取它,并删除$tmp文件。希望得到真正的答案。删除
    xdebug
    没有任何更改。