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

仅本地Xampp中getimagesize()报SSL错误,线上正常如何解决?

问题原因与修复方案

这问题我本地开发时也踩过坑,本质是PHP的SSL证书信任机制和Apache的SSL配置是相互独立的——你虽然给Apache配置了自签名证书消除了Apache的警告,但PHP在通过getimagesize()(底层依赖PHP的HTTP流处理模块)请求HTTPS资源时,会检查目标证书是否在它自带的信任根证书列表里,而自签名证书默认不在这个列表中,所以就触发了证书验证失败的报错。

下面给你几个针对性的修复方案,按规范程度排序:

方案一:临时跳过SSL验证(仅本地测试用,禁止生产环境)

如果你只是想快速解决问题进行测试,可以在调用getimagesize()前设置流上下文,强制禁用SSL验证:

$file = "https://webtest.test/content/uploads/img.jpg";

// 创建跳过SSL验证的流上下文
$sslContext = stream_context_create([
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    ]
]);

// 调用getimagesize时传入上下文参数
$img_info = getimagesize($file, null, $sslContext);
if(!$img_info) {
    throw new Exception(__('The file type is not valid image (1)'));
}

注意:这个方法只是临时 workaround,完全绕开了SSL安全验证,绝对不能用于生产环境!

方案二:将自签名证书加入PHP的信任列表(推荐的本地开发方案)

这个方法更规范,让PHP信任你自己生成的自签名证书,步骤如下:

  1. 找到你之前生成的自签名证书文件(比如教程里的server.crt),复制它的全部内容(包括-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----这两行)
  2. 打开XAMPP中PHP的根证书文件,路径一般是 xampp\php\extras\ssl\cacert.pem
  3. 将你复制的自签名证书内容,粘贴到cacert.pem文件的末尾,保存文件
  4. 打开XAMPP的PHP配置文件xampp\php\php.ini,找到openssl.cafile配置项:
    • 去掉配置项前面的分号;取消注释
    • 设置为你刚才修改的cacert.pem的绝对路径,比如:
      openssl.cafile = "C:\xampp\php\extras\ssl\cacert.pem"
      
  5. 重启XAMPP的Apache服务,让PHP配置生效

完成后,PHP就会信任你的自签名证书,getimagesize()访问HTTPS本地域名就能正常工作了。

额外检查项:确认本地域名解析

确保你的webtest.test已经正确映射到本地IP,打开C:\Windows\System32\drivers\etc\hosts文件,确认存在以下一行:

127.0.0.1 webtest.test

如果域名解析错误,会导致证书里的域名和请求域名不匹配,也会触发验证失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:20:15