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扩展的临时目录配置是否正确:
- 执行
php -i | findstr curl查看curl相关配置,确认curl.temp_dir的值 - 若未设置,在php.ini中添加或修改:
curl.temp_dir = "C:\Users\myname\AppData\Local\Temp"
- 关闭当前命令提示符,重新打开后执行脚本测试(CLI模式无需重启服务)
4. 清理临时目录文件
临时目录中堆积过多文件可能导致创建新文件失败,手动清理C:\Users\myname\AppData\Local\Temp下的旧文件,或执行命令:
del /q C:\Users\myname\AppData\Local\Temp\*
注意:清理前确认目录中无正在使用的文件,避免误删。
5. 检查磁盘剩余空间
确认系统盘(C盘)有足够的剩余存储空间,磁盘空间不足会导致无法创建临时文件。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

