Puppeteer 不会从控制器中的 laravel exec() 加载页面

Puppeteer won't load page from laravel exec() in controller

Laravel 5.6 运行 127.0.0.1:8000

我有一个文件 capture.js 使用 Puppeteer 并打开页面

127.0.0.1:8000/渲染

当我从命令行调用它时,它工作得很好。

node capture.js

现在,当我使用

在 laravel 控制器中调用它时
exec('node capture.js' )

它启动了 Puppeteer,但页面未加载(超时)

当我尝试从控制器 capture.js 加载另一个页面时(例如:google.fr)它运行良好。

跟网络有关系吗?端口 8000 上的本地主机?

headless false 或 true 给出了相同的结果 => TIMEOUT

您正在从启动 laravel 应用程序所需的文件中调用 exec。它正在超时,因为 exec 正在阻止 laravel 应用程序启动。

这是正在做的事情的一个例子,

Laravel App -> Puppeteer -> 等等!去获取 Laravel 应用程序

我在 Symfony 3.4 项目中遇到了完全相同的问题。

问题来自会话:

调用exec()命令时,PHP会话已经存在,会话文件被锁定。 当 NodeJS 脚本尝试连接时,会超时,因为会话文件不可用。

我通过在 exec() 命令上方添加以下指令解决了这个问题:

session_write_close();