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

XAMPP子目录下访问Stripe Checkout API失效,报找不到shared.php错误

问题根因分析
  • 你看到日志里的双反斜杠不是错误来源,这是Windows系统日志对路径分隔符的转义显示,实际系统解析的是正常单反斜杠路径,和.htaccess规则、页面base href设置没有直接关联。
  • 核心矛盾是两个运行环境的PHP文档根完全不同,导致代码里的相对路径解析逻辑彻底错位:
    • 独立运行Stripe示例时,你在/stripe_test目录下执行php -S localhost:4242,内置服务器的文档根就是/stripe_test文件夹本身。所有PHP文件里的相对路径引入都以这个目录为基准,config.php里的require_once 'shared.php'可以直接匹配同目录下的关联文件,前端请求接口的路径也和目录结构完全对齐,因此功能全程正常。
    • 嵌套接入现有站点时,XAMPP/Apache的文档根是整个站点的Root目录,你的Stripe相关代码都嵌在/stripe_test子文件夹下。此时报错日志显示触发的是站点根路径下C:\xampp\root\config.php的加载逻辑,说明前端发起创建Checkout Session的请求路径出现了层级偏移,没有正确命中/stripe_test目录下的接口文件,反而跑到了站点根路径下执行代码,自然会因为路径不对找不到关联文件。
  • 你的.htaccess配置不存在规则错误:规则第一块就配置了「如果请求的文件/文件夹真实存在,直接放行不做重写」,只要接口文件的请求路径正确,不会被重写规则篡改路由。
排查与修复方案
  • 修正前端接口请求路径
    原Stripe示例为了适配独立运行的环境,前端请求接口的路径一般是根相对路径(比如fetch('/createcheckout.php'))。这种路径在独立运行时会匹配到/stripe_test/createcheckout.php,但在嵌套子目录的站点下会直接指向站点根目录的同名文件,根本不会进入/stripe_test文件夹,这就是路径错位的直接原因。
    调整二选一即可生效:
    • 把请求路径改成带完整层级的绝对路径:fetch('/stripe_test/createcheckout.php')
    • 改成不带开头斜杠的相对路径:fetch('createcheckout.php'),匹配当前页面所在的/stripe_test目录下的接口文件
  • 修正PHP文件的引入逻辑
    把所有PHP文件里的裸相对路径引入,改成基于当前文件物理位置的定位方式,避免外部请求路径变化导致的文件找不到问题。比如把require_once 'shared.php'改成:
    require_once __DIR__ . '/shared.php';
    
    这种写法会以当前执行的PHP文件所在的物理目录为基准定位关联文件,不管外部请求从哪个路径加载文件,只要关联文件和当前文件在同一目录下,就可以正常加载,不会再因为工作目录变化出现路径错位。
  • 同步调整webhook转发配置
    原来执行的stripe listen --forward-to=localhost:4242是为了对接内置服务器写的,现在所有请求都跑在XAMPP的8080端口上,需要把转发目标改成实际的webhook接口地址,不然Stripe的事件通知还是会被推到已经停止的4242端口服务上,无法触发后续逻辑。调整后的执行命令为:
    stripe listen --forward-to=localhost:8080/stripe_test/webhook.php
  • 兼容Session读取逻辑
    所有Stripe相关的PHP文件开头加上session_start(),并确保和现有站点的Session配置(cookie作用域、存储路径)保持一致,即可正常读取登录态的$_SESSION变量,不需要额外调整现有目录结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 17:24:06