php创建临时文件用什么函数_php tempnam创建临时文件【实例】
技术百科
蓮花仙者
发布时间:2026-01-25
浏览: 次 tempnam() 生成唯一路径但不创建文件,需配合写入函数;tmpfile() 直接返回可读写资源并自动清理,适用于即用即弃场景;两者均需注意临时目录权限与跨环境兼容性。
tempnam() 是 PHP 创建临时文件最直接的函数
它生成一个带唯一名称、尚未存在的文件路径,适合需要手动控制文件内容或后续重命名的场景。注意:它只创建路径,不自动创建文件实体,需配合 fopen() 或 file_put_contents() 才真正写入。
-
tempnam()必须传入两个参数:目录路径(如/tmp)和前缀(如'log_'),否则会触发警告 - 返回路径指向的文件**一定不存在**,但目录必须存在且可写,否则返回
false - Windows 下若传入相对路径(如
'.'),可能因权限或路径解析失败而返回空,建议显式用sys_get_temp_dir() - 生成的文件名不含扩展名,如需
.txt或.json,得自己拼接,但注意别破坏唯一性(例如不要直接tempnam(...).'.txt',应先生成再重命名)
更安全的做法:用 tmpfile() 直接获得资源句柄
如果只是临时读写、不需要文件路径或磁盘持久化,tmpfile() 更简洁——它在系统临时目录创建并打开一个匿名文件,返回 resource(PHP 8.0+ 为 Stream 对象),脚本结束时自动销毁。
-
tmpfile()不接受任何参数,无需指定目录或前缀,规避了路径权限问题 - 适用于缓存计算中间结果、上传临时处理、导出生成等“即用即弃”场景
- 不能获取文件路径(
stream_get_meta_data()中的uri字段为空),所以无法被外部进程访问 - 若需提前释放,调用
fclose()即可,不必担心残留
常见错误:tempnam() 返回路径后直接 file_get_contents() 报错
典型现象是“failed to open stream: No such file or directory”,因为 tempnam() 只保证路径不冲突,不创建文件本身。下面这段代码会失败:
php $path = tempnam(sys_get_temp_dir(), 'cfg_'); $content = file_get_contents($path); // ❌ 文件还不存在
正确做法是先写入再读取,或改用 tmpfile():
php
$path = tempnam(sys_get_temp_dir(), 'cfg_');
file_put_contents($path, '{"mode":"test"}'); // ✅ 先写
$content = file_get_contents($path); // ✅ 再读
// 记得最后 unlink($path) 清理
注意临时目录的跨环境兼容性
sys_get_temp_dir() 比硬编码 /tmp 或 C:\Windows\Temp 更可靠,但它依赖 PHP 配置(upload_tmp_dir、sys_temp_di、环境变量 
TMP/TEMP 等)顺序查找。某些容器或共享主机可能限制写入,导致 tempnam() 失败却无明确提示。
- 上线前务必在目标环境验证
is_writable(sys_get_temp_dir()) - 若需高可靠性(如关键日志暂存),建议 fallback 到应用自有子目录(如
./runtime/tmp/),并确保部署时已创建且 chmod 正确 - 避免在
opcache.enable=1的 CLI 脚本中反复调用tempnam()生成大量小文件——系统临时目录可能被清理策略误删
# ai
# 这段
# windows
# 适用于
# 不需要
# 若需
# 还不
# win
# 重命名
# js
# json
# 环境变量
# 并发
# 对象
# 编码
# stream
# php
# 句柄
# fopen
# fclose
# 临时文件
# Resource
# 即用
# Directory
# 再读
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎么关闭资讯和兴趣_Windows11任
- 如何在Golang中处理模块包路径变化_Golan
- MySQL 中使用 IF 和 CASE 实现查询字
- 如何在Golang中捕获结构体方法错误_Golan
- Win11时间不对怎么同步_Win11自动校准互联
- 如何在Golang中处理URL参数_Golang
- 如何使用Golang开发简单的聊天室消息存储_Go
- 如何使用正则表达式提取以编号开头、后跟多个注解的完
- Win11如何设置ipv6 Win11开启IPv6
- Dapper的Execute方法的返回值是什么意思
- 如何在网页无标准表格标签时高效提取结构化数据
- php485函数怎么捕获异常_php485错误处理
- 如何在 Go 中比较自定义的数组类型(如 [20]
- 如何在Golang中实现微服务服务拆分_Golan
- Win11怎么关闭系统透明度_Windows11个
- 如何用::实现工具类方法调用_php静态工具类设计
- Win11屏幕亮度突然变暗怎么解决_自动变暗问题处
- Win11怎么开启游戏模式_Windows11优化
- Win11怎么关闭开机声音_Win11系统启动提示
- c++如何获取map中所有的键_C++遍历键值对提
- Django 测试数据库表缺失与字段未创建问题的完
- 如何用列表一次性对 DataFrame 的指定列应
- Win11怎么设置任务栏图标大小_Windows1
- MAC如何启用访达侧边栏显示_MAC Finder
- c++中如何使用虚函数实现多态_c++多态性实现原
- mac本地php环境如何开启curl_curl扩展
- VSC怎样在VSC中调试PHPAPI_接口调试技巧
- php本地部署支持nodejs吗_php与node
- c++如何实现多态性_c++ 虚函数表原理与动态绑
- 微信JSAPI支付回调PHP怎么接收_处理JSAP
- TestNG的testng.xml配置文件怎么写
- 如何在Golang中实现自定义Benchmark_
- PhpStorm怎么调试PHP代码_PhpStor
- 如何使用Golang反射创建map对象_动态生成键
- Win11怎么激活Windows10_Win11激
- Win11怎么格式化U盘_Win11系统U盘格式化
- Win11怎么关闭键盘按键音_Win11禁用打字声
- Mac怎么开启“任何来源”_Mac安装未签名应用的
- Windows音频驱动无声音原因解析_声卡驱动错误
- 本地php环境打开php文件直接下载_浏览器解析p
- 如何在 PHP 单元测试中正确模拟带方法的图像处理
- Win10任务栏天气和资讯怎么关闭 Win10禁用
- Win11怎么关闭OneDrive同步_Win11
- mac怎么安装adb_MAC配置Android A
- 如何解决同一段404代码在不同主机上表现不一致的问
- Win11怎么关闭贴靠布局_Win11禁用窗口最大
- Windows10如何查看保存的WiFi密码_Wi
- 如何解决Windows字体显示模糊的问题?(Cle
- c++如何打印函数堆栈信息_c++ backtra
- Win11开机Logo怎么换_Win11自定义启动

QQ客服