Chrome新版本128.0.6613.84导致chrome-php/chrome启动失败求助
解决Chrome 128升级后HeadlessChromium无法启动的问题
问题分析
Chrome 128.0.6613.84版本对crashpad崩溃处理机制的配置要求更严格,同时默认用户数据目录的权限逻辑也有变化,导致原有的HeadlessChromium初始化代码失效,且手动添加的args参数可能因兼容性或配置顺序问题未生效。
解决方案
1. 准备合法的用户数据目录
先创建一个www-data用户完全可控的目录,替代默认的~/.local:
sudo mkdir /var/www/chrome-user-data sudo chown -R www-data:www-data /var/www/chrome-user-data sudo chmod 755 /var/www/chrome-user-data
2. 修改PHP初始化代码
更新createBrowser的配置,确保参数正确传递,同时使用Chrome新版本推荐的无头模式参数:
$browserFactory = new \HeadlessChromium\BrowserFactory(); $browser = $browserFactory->createBrowser([ 'windowSize' => [1024, 768], 'debugLogger' => 'php://stderr', 'args' => [ '--no-crashpad', '--disable-dev-shm-usage', '--disable-gpu', '--headless=new', // Chrome 112+推荐的新无头模式 '--disable-software-rasterizer', '--no-sandbox', '--user-data-dir=/var/www/chrome-user-data', // 显式指定用户数据目录 ], ]);
3. 确保依赖库兼容
检查chrome-php/chrome库版本,旧版本可能无法正确传递参数到Chrome 128,执行更新:
composer update chrome-php/chrome
4. 手动验证参数有效性
切换到www-data用户,直接执行Chrome命令测试参数是否生效:
sudo -u www-data /usr/bin/google-chrome --no-crashpad --disable-dev-shm-usage --disable-gpu --headless=new --disable-software-rasterizer --no-sandbox --user-data-dir=/var/www/chrome-user-data --dump-dom https://example.com
如果命令能正常输出网页DOM,说明系统层面配置没问题,问题出在PHP代码或库版本上。
关键说明
--headless=new是Chrome 112+推出的新无头模式,兼容性更好,避免旧模式的潜在bug- 显式指定
--user-data-dir彻底规避默认目录的权限问题,同时让--no-crashpad参数能正确生效 - 必须确保用户数据目录的所有者和权限完全匹配www-data用户,否则仍会出现权限报错
内容的提问来源于stack exchange,提问作者Jon Hulka
相关产品推荐
相关产品推荐

