PHP如何判断存在再修改文件_PHP判存后改文件法【判断】-php教程

file_exists() 是最稳妥的文件存在性判断方式,但需配合 is_writable() 检查权限、mkdir() 确保父目录存在、flock() 处理并发,且注意编码与锁机制限制。

PHP中用 file_exists() 判断文件是否存在再修改

直接用 file_exists() 是最常用也最稳妥的判断方式,它返回布尔值,不依赖读写权限,只检查路径是否真实存在(包括文件和目录)。但要注意:它对符号链接默认跟随,若需区分链接与目标,得配合 is_link()。

常见错误是跳过判断直接 fopen(..., 'w') 或 file_put_contents() —— 这会导致路径不存在时静默失败或报 Warning: file_put_contents(): failed to open stream,且不会自动创建父级目录。

  • 判断后修改的典型结构:
    if (file_exists('/path/to/file.txt')) {
        file_put_contents('/path/to/file.txt', 'new content');
    }
  • 若想“存在则追加、不存在则新建”,用 file_put_contents($file, $content, FILE_APPEND | LOCK_EX) 更简洁,但注意它不会自动创建缺失的目录
  • 路径含中文或特殊字符时,确保 PHP 文件系统函数编码与实际文件名编码一致(通常 UTF-8,但 Windows 下可能为 GBK)

修改前确保有写权限:is_writable() 不可省略

file_exists() 返回 true 只代表文件存在,不代表能改。尤其在 Linux 服务器上,权限问题比存在性更常导致失败。直接写入失败时,error_get_last() 常返回 Permission denied。

  • 推荐组合判断:
    if (file_exists($file) && is_writable($file)) {
        file_put_contents($file, $data);
    } else {
        throw new RuntimeException("Cannot write to {$file}");
    }
  • is_writable() 在某些 NFS 或容器环境可能返回不稳定结果,此时可退而求其次:尝试 fopen($file, 'c')(仅打开不截断),成功即说明可写
  • 注意:is_writable() 对目录也有效,但修改文件时只需检查文件本身,而非父目录(除非你要创建新文件)

用 fopen() + flock() 安全覆盖,避免并发写乱序

多个进程/请求同时修改同一文件时,file_put_contents() 的原子性不保证(尤其大文件),易出现内容被截断或覆盖。此时需手动加锁。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » PHP如何判断存在再修改文件_PHP判存后改文件法【判断】-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3996099+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3996099+
  • 本周更新: 0+
  • 最后更新: 2026-03-16