thinkphp推荐用file_put_contents配合file_append追加文件,一行代码简洁安全;多进程场景需加lock_ex锁防冲突,写入前检查可写性,日志路径需自动创建目录并确保换行。

ThinkPHP 本身不提供独立的“文件追加”封装方法,但底层完全基于 PHP,所以推荐直接使用 file_put_contents() 配合 FILE_APPEND 参数——简洁、安全、无需手动 fopen/fwrite/fclose。
用 file_put_contents 追加最常用
这是绝大多数场景的首选方式,一行代码搞定,还支持自动加锁防并发冲突:
- 基础追加(无锁):
file_put_contents('log.txt', "新日志\n", FILE_APPEND); - 带独占锁追加(多进程安全):
file_put_contents('log.txt', "新日志\n", FILE_APPEND | LOCK_EX); - 写入前建议检查可写性:
if (is_writable($filePath)) { ... },避免权限报错
用 fopen + fwrite 手动控制(适合复杂逻辑)
当需要读取末行、判断换行、或做更精细的定位时(比如确保每条日志独占一行),可用 fopen 打开文件并手动操作:
- 用
'a+'模式打开:既可读又可追加,文件指针默认在末尾 - 务必调用
flock($handle, LOCK_EX)加写锁,防止多请求同时写乱序 - 用
fseek($handle, 0, SEEK_END)确保写入位置准确;若需补换行,可先读最后一行再处理
ThinkPHP 6 中记录日志的实用写法
项目根目录下写日志文件(如 runtime/log/mod/20260921.txt),推荐结合路径拼接与自动创建目录:
- 用
app()->getRootPath()获取根路径,再拼/runtime/log/mod/等子目录 - 写入前用
is_dir()判断目录是否存在,不存在则用mkdir($dir, 0755, true)递归创建 - 日志内容建议带时间戳和换行:
$content = date('Y-m-d H:i:s') . "\t" . $data . "\n";
不复杂但容易忽略:追加不是覆盖,锁和换行是日志可读的关键。用好 FILE_APPEND | LOCK_EX,基本够用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











