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

Botman Studio结合PHP artisan与ngrok时本地图片附件失效问题

问题原因分析

核心问题出在你使用的php artisan serve Laravel内置开发服务器上,该服务为单线程工作模式,同一时间仅能处理1个HTTP请求:

  • Botman接收VK/Telegram的回调请求时,已经占满了唯一的工作线程
  • 后续Botman主动请求同站点的ngrok图片链接属于第二个HTTP请求,没有空闲线程可以处理,就会进入无限等待,最终触发60秒最大执行时间报错
  • 调用Imgur等外链图片正常、tinker执行逻辑正常,都是因为这两类场景不会产生同站点的二次HTTP请求,不会出现线程抢占问题,和你的代码逻辑、CSRF配置没有关系
解决方案

方案1:更换多线程服务器(推荐)

直接使用XAMPP集成的Apache服务运行项目,不要用php artisan serve:

  1. 打开XAMPP的Apache配置文件,新增虚拟主机,将站点根目录指向Laravel项目的public文件夹
  2. 配置完成后启动Apache,后续所有请求由多线程的Apache处理,可同时响应回调请求和图片资源请求,不会出现阻塞

方案2:临时测试双实例方案

如果仅需本地临时调试,可启动两个独立的php artisan serve实例规避问题:

  1. 第一个实例监听8000端口,用于处理Botman平台回调:php artisan serve --port=8000
  2. 第二个实例监听8001端口,用于提供图片资源:php artisan serve --port=8001
  3. 把图片链接的域名映射到8001端口的服务,两个请求分别走独立进程,不会出现线程抢占

方案3:直接读取本地资源规避HTTP请求

直接读取本地图片资源传给Botman附件,跳过二次HTTP请求环节:

// 动态生成的图片直接存临时文件调用
$img = ImageManagerStatic::make(base64_decode($img_url));
$tmpPath = tempnam(sys_get_temp_dir(), 'img') . '.jpg';
$img->save($tmpPath);
$attachment = new Image($tmpPath);
$message = OutgoingMessage::create('📷')->withAttachment($attachment);
$this->say($message);
// 使用完可删除临时文件
unlink($tmpPath);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:15:01