首页 > 解决方案 > 高负载会导致 PHP 无法写入文本文件吗?

问题描述

我有一个 PHP 脚本,它处于高负载状态,每秒有多个调用(来自另一台计算机)。它在 IIS 服务器上的 PHP 5.5.14 上运行。使用脚本记录每个请求和响应

file_put_contents('log_2019-09-12.txt', $msg, FILE_APPEND);

每个请求和响应也记录在客户端计算机上,我偶尔会看到这样的 PHP 错误:

PHP ERROR 2: file_put_contents(C:\\WWW\\project-x\\logs\\log_2019-09-11.txt): failed to open stream: Permission denied

这些似乎大约每 140 分钟发生一次,通常连续 8 个,然后事情又工作了约 140 分钟,每秒处理几个请求并成功记录到日志文件。

可能是 PHP 通常会写入内存文件,然后实际上每隔 140 分钟将内容写入磁盘,这就是导致此错误的原因吗?如果是这样,我该如何规避它?

标签: phpiisloggingphp-5.5

解决方案


Magnus Eriksson 在评论中回答

LOCK_EX在编写时尝试添加参数:file_put_contents($file, $text, FILE_APPEND|LOCK_EX)来自手册:the LOCK_EX flag to prevent anyone else writing to the file at the same time


推荐阅读