【发布时间】:2017-03-05 22:07:29
【问题描述】:
我们使用 Symfony 进程从 PHP 运行 node.js CLI 脚本。
脚本总是在一行中将整个响应打印为 JSON。
响应以某种方式被截断为 512 个字符。
我只在php.ini 中发现了xdebug.var_display_max_data => 512 => 512,但看不出这有什么关系。
Adapter > Symfony Process > node script.js
A) 测试节点脚本
- 来自终端节点脚本
$ node user-update.js parameters在所有情况下都返回完整结果 - 例如 629 个字符。 - 来自 Symfony Process 节点脚本的响应被截断为 512 个字符。
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);
-
$cmd = 'node user-update.js parameters';- 截断为 512。 -
$cmd = 'php -r \'for($i=0; $i<520; $i++){ echo "."; }\'';- 不会截断。 -
$cmd = 'cat long_one_line.txt';- 打印完整文件。一行 1650 个字符。
C) 尝试使用 PHP shell 函数
$response = shell_exec($cmd); // response is truncated to 512
system($cmd, $returnVal); // print directly to STDOut, truncated to 512
可能是什么原因和解决方法?
- 节点 v7.6.0
- PHP 7.1.2
【问题讨论】:
-
我将从 nodejs 应用程序的调试开始。
-
它按预期从终端返回完整结果。如果请求的结果较短,它可以从主要的 PHP 方法正常工作。例如。如果 AuthUser 没有
photoURL也没有长dispalyName,则响应少于 512 个字符,并且进程 (PHP) 获得完整有效的 JSON - 一切正常。 -
PHP 7.1.2 (cli) (built: Feb 23 2017 23:40:22) ( NTS ) -
肮脏的修复是运行
$cmd = 'node script.js >' . $tmp;,而不是cat $tmp;或用php读取它,然后删除$tmp文件。希望得到真正的答案。 -
删除
xdebug没有任何改变。
标签: php node.js symfony firebase-authentication symfony-process