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

GitHub Pages前端无法与Heroku PHP后端交互且报H10崩溃错误如何解决

问题排查与修复方案

1. Procfile配置错误(核心触发H10的原因)

你当前的Procfile定义的是worker类型进程,这类进程仅用于跑后台常驻任务,不会处理Heroku路由转发的HTTP请求。Heroku要求接收外部HTTP请求的服务必须定义为web类型进程,同时PHP生产环境Web应用不能直接用PHP CLI单文件运行监听端口,CLI模式没有完整的HTTP服务处理能力,也不会被Heroku路由层识别。
你需要把Procfile内容替换为官方推荐的Web服务启动配置:

# 使用Apache托管
web: heroku-php-apache2

如果偏好Nginx,可替换为:

# 使用Nginx托管
web: heroku-php-nginx

仅做测试临时使用的话,也可以改成PHP内置服务器的启动命令(生产环境不推荐,性能和稳定性不足):

web: php -S 0.0.0.0:$PORT index.php

修改后重新部署,Heroku就会启动可接收HTTP请求的Web进程。

2. 代码潜在异常导致进程崩溃

你的代码没有做参数校验,当POST请求缺少action、paymentId、client_URL等必要参数时,会触发PHP的Undefined array key警告,如果开启了PHP错误抛出规则,会直接导致进程异常退出触发H10错误,建议补充参数校验逻辑:

<?php
// 最顶部新增参数校验
if (!isset($_POST['action'], $_POST['paymentId'], $_POST['client_URL'])) {
    http_response_code(400);
    echo json_encode(['error' => '缺少必要请求参数']);
    exit;
}
$apps = [
    'auth_app1' => 'Key <api_key>',
    'auth_app2' => 'Key <api_key>',
    'auth_app3' => 'Key <api_key>',
    'auth_app4' => 'Key <api_key>'
];
if (!isset($apps[$_POST['client_URL']])) {
    http_response_code(403);
    echo json_encode(['error' => '无访问权限']);
    exit;
}
// 后面接你原有业务逻辑

3. 补充扩展依赖声明

你的代码用到了curl扩展,需要在composer.json里显式声明依赖,避免Heroku的PHP运行环境默认未开启对应扩展:
在composer.json的require节点新增一行:

"ext-curl": "*"

更新后重新生成composer.lock文件再部署即可。

4. 部署后验证

部署完成后可通过Heroku CLI运行heroku logs --tail查看实时运行日志,确认Web进程启动无报错后,先使用接口测试工具模拟POST请求验证接口返回是否符合预期,再对接前端测试。

内容的提问来源于stack exchange,提问作者Oliver Crockett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:27:01