You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS浏览器运行SendGrid PHP脚本报ERR_EMPTY_RESPONSE错误

问题现象

本地浏览器访问localhost上部署的SendGrid发信PHP脚本时失败,返回空响应;相同代码部署到远程Web服务器可正常通过浏览器访问。

测试代码

测试用index.php代码如下:

require 'vendor/autoload.php';

$email = new \SendGrid\Mail\Mail();
$email->setFrom("test@example.com", "Example User");
$email->setSubject("Sending with Twilio SendGrid is Fun");
$email->addTo("test@example.com", "Example User");
$email->addContent("text/plain", "and easy to do anywhere, even with PHP");
$email->addContent(
    "text/html", "<strong>and easy to do anywhere, even with PHP</strong>"
);
$sendgrid = new \SendGrid('SENDGRID_API_KEY');
try {
    $response = $sendgrid->send($email);
    print $response->statusCode() . "\n";
    print_r($response->headers());
    print $response->body() . "\n";
} catch (Exception $e) {
    echo 'Caught exception: '. $e->getMessage() ."\n";
}
已确认测试结果
  • 终端执行php index.php命令,脚本可正常运行,发信功能无异常
  • 本地任意浏览器访问脚本对应localhost地址时页面加载失败,报错信息如下:
This page isn’t working
localhost didn’t send any data.
ERR_EMPTY_RESPONSE
本地环境信息
  • 操作系统:MacOS Big Sur
  • 服务组件:httpd、mariadb、PHP 8.1均通过Homebrew安装,localhost上部署的其他普通PHP应用可正常访问
已尝试排查操作
  • 先后两次重装Apache与PHP
  • 切换至PHP 7版本测试脚本,问题仍复现
排查思路与解决方案

按以下顺序逐步排查,不需要优先重装服务:

  1. 先查Apache错误日志,不要盲测
    Homebrew安装的httpd错误日志默认路径:
    • Intel芯片Mac:/usr/local/var/log/httpd/error_log
    • M系列芯片Mac:/opt/homebrew/var/log/httpd/error_log
      直接翻访问对应脚本时间点的最新日志,空响应类问题90%会在这里直接打出PHP fatal error、模块加载失败、权限拒绝的明确报错,排查效率远高于反复重装组件。
  2. 校验CLI与Apache模式下的PHP环境差异
    终端跑PHP用的是当前登录用户权限、加载CLI专属php.ini配置;Apache跑PHP用的是服务运行用户(通常是daemon或_www)权限、加载Apache专属php.ini配置,两边环境不一致是这类问题的核心诱因:
    • 新建测试脚本写入<?php phpinfo();,放到web根目录用浏览器访问,确认Apache模式下已正常加载curl、openssl扩展——SendGrid SDK发请求强依赖这两个扩展,CLI下加载不代表Apache模式下加载。
    • 对照终端执行php --ini输出的加载配置,检查Apache模式下php.ini的curl.cainfo、openssl.cafile配置项:Homebrew安装的PHP经常出现CLI模式能自动识别系统CA证书、Apache模式下找不到证书导致HTTPS请求直接挂死、无返回内容的问题,直接给这两个配置项指定有效证书路径即可,证书文件一般在Homebrew安装的ca-certificates目录下,对应路径为/usr/local/etc/ca-certificates/cert.pem(Intel芯片)或/opt/homebrew/etc/ca-certificates/cert.pem(M系列芯片)。
    • 检查Apache运行用户对项目目录、vendor目录的读权限,权限不足时脚本加载SendGrid SDK会直接崩溃,无任何输出返回。
  3. 核对Apache的PHP解析配置
    其他普通PHP脚本能运行不代表当前站点的PHP处理配置正确:
    • 确认httpd.conf中已加载对应PHP版本的模块,以PHP8.1为例,配置项应为LoadModule php_module /usr/local/opt/php@8.1/lib/httpd/modules/libphp.so,路径需和本地实际安装路径一致。
    • 确认web根目录配置中包含SetHandler application/x-httpd-php规则,否则.php文件不会被PHP引擎解析。
    • 检查是否配置了open_basedir限制,如果限制的访问路径未包含vendor目录、系统临时目录、CA证书路径,脚本运行到发请求环节会直接中断,返回空响应。
  4. 快速隔离问题范围
    停掉本地httpd服务,在index.php所在目录执行php -S localhost:8000启动PHP内置开发服务器,浏览器访问http://localhost:8000,如果脚本能正常执行,说明代码、SendGrid SDK本身没有问题,故障点完全在Apache与PHP的对接配置上,不需要再排查代码逻辑。

内容的提问来源于stack exchange,提问作者Ezequiel Villarreal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:33:29