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

Windows PHP CLI下Guzzle请求报错:无法创建临时文件求解决

解决Windows下PHP CLI使用Guzzle时curl_setopt_array创建临时文件失败的问题

问题现象

使用PHP CLI调用Guzzle发起HTTP请求时,持续抛出以下错误:

Warning: curl_setopt_array(): Unable to create temporary file. in C:\wamp\www\tools\inc\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 66
PHP Warning:  curl_setopt_array(): Unable to create temporary file. in C:\wamp\www\tools\inc\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 66

环境信息

  • PHP版本:
PHP 7.4.32 (cli) (built: Sep 28 2022 18:22:17) ( NTS Visual C++ 2017 x64 )
  • php.ini相关配置:
;sys_temp_dir = 
upload_tmp_dir =
  • 执行php -r "echo sys_get_temp_dir();"结果:
C:\Users\myname\AppData\Local\Temp
  • PHP二进制路径(PATH变量):C:\src\php
  • 报错代码片段(CurlFactory.php):
public function create(RequestInterface $request, array $options): EasyHandle //Zeile 41
{
    if (isset($options['curl']['body_as_string'])) {
        $options['_body_as_string'] = $options['curl']['body_as_string'];
        unset($options['curl']['body_as_string']);
    }

    $easy = new EasyHandle;
    $easy->request = $request;
    $easy->options = $options;
    $conf = $this->getDefaultConf($easy);
    $this->applyMethod($easy, $conf);
    $this->applyHandlerOptions($easy, $conf);
    $this->applyHeaders($easy, $conf);
    unset($conf['_headers']);

    // Add handler options from the request configuration options
    if (isset($options['curl'])) {
        $conf = \array_replace($conf, $options['curl']);
    }

    $conf[\CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy);
    $easy->handle = $this->handles
        ? \array_pop($this->handles)
        : \curl_init();
    curl_setopt_array($easy->handle, $conf); //Zeile 66

    return $easy;
} //Zeile 69

已尝试操作

  • 手动在php.ini中设置sys_temp_dir和upload_tmp_dir为C:\Users\myname\AppData\Local\Temp,问题未解决

解决建议

1. 验证临时目录权限

确认C:\Users\myname\AppData\Local\Temp目录对当前执行PHP CLI的用户具备读写权限:

  • 右键该目录 → 属性 → 安全选项卡,检查当前用户的权限列表,确保包含「写入」「修改」权限
  • 若权限不足,添加对应权限;或者尝试以管理员身份打开命令提示符,再执行PHP脚本测试

2. 强制指定curl临时目录

在Guzzle请求配置中手动设置CURLOPT_TMPDIR,直接为curl指定临时目录,绕过PHP全局配置:

$client = new \GuzzleHttp\Client([
    'curl' => [
        CURLOPT_TMPDIR => 'C:\Users\myname\AppData\Local\Temp',
    ],
]);

3. 配置curl扩展的临时目录

检查curl扩展的临时目录配置是否正确:

  1. 执行php -i | findstr curl查看curl相关配置,确认curl.temp_dir的值
  2. 若未设置,在php.ini中添加或修改:
curl.temp_dir = "C:\Users\myname\AppData\Local\Temp"
  1. 关闭当前命令提示符,重新打开后执行脚本测试(CLI模式无需重启服务)

4. 清理临时目录文件

临时目录中堆积过多文件可能导致创建新文件失败,手动清理C:\Users\myname\AppData\Local\Temp下的旧文件,或执行命令:

del /q C:\Users\myname\AppData\Local\Temp\*

注意:清理前确认目录中无正在使用的文件,避免误删。

5. 检查磁盘剩余空间

确认系统盘(C盘)有足够的剩余存储空间,磁盘空间不足会导致无法创建临时文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:50:30