Laravel执行composer报tempnam()错误,sys_temp_dir配置疑问
Laravel 8.75下Composer更新/安装报错的解决及sys_temp_dir配置说明
问题描述
- Laravel版本:8.75
- 执行
composer update或composer install命令时,触发如下错误:
composer update In CaBundle.php line 133: tempnam(): file created in the system's temporary directory require [--dev] [--dry-run] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--fixed] [--no-suggest] [--no-progress] [--no-update] [--no-install] [--update-no-dev] [-w|--update-with-dependencies] [-W|--update-with-all-dependencies] [--with-dependencies] [--with-all-dependencies] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--] [<packages>...]
排查情况
经排查,问题根源是php.ini中的sys_temp_dir配置:
- 默认配置为
;sys_temp_dir = "/tmp"(处于注释状态) - 手动修改为
sys_temp_dir = "C:\windows\Temp"或sys_temp_dir = "tmp"时,均会引发上述错误
核心问题解答:是否需要设置sys_temp_dir?
不需要手动设置sys_temp_dir,原因及解决方法如下:
- PHP默认行为足够:PHP会自动识别系统的临时目录(Windows下默认是
C:\Windows\Temp,Linux下是/tmp),注释状态的sys_temp_dir就是让PHP使用系统默认值,这时候是正常的。 - 手动设置报错的原因:
- 路径格式错误:Windows下路径的反斜杠需要转义成
\\,或者换成正斜杠/,比如正确写法是sys_temp_dir = "C:\\windows\\Temp"或sys_temp_dir = "C:/windows/Temp",错误格式会导致PHP无法访问临时目录。 - 权限问题:如果手动指定的目录没有读写权限,也会触发
tempnam()函数报错。
- 路径格式错误:Windows下路径的反斜杠需要转义成
- 快速解决步骤:
- 打开当前PHP环境使用的php.ini文件(CLI模式下可通过
php --ini命令查看路径) - 找到
sys_temp_dir配置项,保持它的注释状态(不要去掉开头的分号) - 保存配置后,重新执行
composer update或composer install即可
- 打开当前PHP环境使用的php.ini文件(CLI模式下可通过
内容的提问来源于stack exchange,提问作者ronrun
相关产品推荐
相关产品推荐

