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

使用PhpSpreadsheet从URL加载.xlsx文件报错:文件不存在

解决PhpSpreadsheet加载远程XLSX文件报错的问题

嘿,我来帮你搞定这个报错!你遇到的问题本质是PhpSpreadsheet的load()方法不支持直接加载远程HTTP/HTTPS URL——它默认只会去本地文件系统找路径,所以你把远程URL传进去,它就会把这个URL当成本地文件路径去搜,自然找不到,就报“File does not exist”了。

下面给你两个可行的解决方案:

方案1:先把远程文件下载到本地临时文件

先把远程的XLSX文件下载到服务器的临时目录,再加载这个本地文件,代码示例如下:

$remoteUrl = "http://localhost/test/csvfile/samplesms.xlsx";
// 创建临时文件存放下载的内容
$tempFile = tempnam(sys_get_temp_dir(), 'xlsx_temp_');
file_put_contents($tempFile, file_get_contents($remoteUrl));

// 加载本地临时文件
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load($tempFile);

// 处理完业务逻辑后,记得删除临时文件释放空间
unlink($tempFile);

方案2:用内存流加载(不生成本地文件)

如果不想在服务器上生成临时文件,可以把远程文件内容读到内存流里,再让PhpSpreadsheet加载这个流:

$remoteUrl = "http://localhost/test/csvfile/samplesms.xlsx";
// 读取远程文件内容
$fileContent = file_get_contents($remoteUrl);
// 创建内存读写流
$stream = fopen('php://memory', 'r+');
fwrite($stream, $fileContent);
rewind($stream); // 把指针移到流开头

// 加载内存中的文件
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load($stream);

// 用完流记得关闭
fclose($stream);

小提醒

  • 要确保你的PHP配置里allow_url_fopen是开启的,不然file_get_contents没法读取远程文件;如果这个配置没法改,你可以用cURL来替代file_get_contents完成下载。
  • 用临时文件的话,一定要记得处理完后删除,不然时间久了会占满服务器磁盘空间哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:58:25