正确模式是"w"、"a"或"x":其中"w"清空重写,"a"追加创建,"x"独占创建防覆盖;"r"和"r+"无法创建文件。
fopen 创建文件的正确打开模式是什么?fopen 本身不“创建”文件,它只是以指定模式打开一个文件路径——如果路径不存在且模式允许写入(比如 "w"、"a"、"x"),PHP 才会自动创建空文件。关键在模式选择:
"w":写入模式,清空已有内容或新建文件,最常用但容易误删旧数据 "a":追加模式,文件末尾写入,不存在则创建,存在不覆盖 "x":独占创建模式,仅当文件不存在时成功,存在则返回 false(适合防覆盖场景) "c":类似 "w" 但不截断,需配合 fseek 和 ftruncate 手动控制,一般不用 别用 "r" 或 "r+"

fopen 直接失败并触发 warning。
fopen 创建文件后必须 fclose 吗?必须。不关闭会导致:
fopen 不关,很快达到系统限制) "w" 写完不关,文件可能是空的) 示例安全写法:
$fp = fopen('/tmp/test.txt', 'w');
if ($fp === false) {
throw new RuntimeException('无法打开文件');
}
fwrite($fp, "hello\n");
fclose($fp); // 这行不能省
fopen 返回 false 却没报错?常见原因有三个,按优先级排查:
/var/log/myapp/ 目录没建,或 PHP 进程用户(如 www-data)没权限) phpinfo() 中该项,路径必须在其白名单内) 检查方法:
var_dump(is_writable(dirname('/tmp/test.txt'))); // 看父目录是否可写
var_dump(error_get_last()); // 在 fopen 后立即调用,看底层系统错误
fopen 吗?不能。fopen + fwrite 不是原子操作,中断或并发时易出问题。生产环境应:
sys_get_temp_dir() + uniqid()) fflush($fp) 强制刷盘,再 fclose($fp) rename() 替换目标文件(Linux/macOS 下 rename 是原子的) rename() 成功才代表文件真正就位,失败则清理临时文件。
路径和权限问题比函数用法更常导致失败,别急着改代码,先确认 PHP 进程能不能在目标目录里 touch 一个文件。