php - 高负载会导致 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 分钟将内容写入磁盘,这就是导致此错误的原因吗?如果是这样,我该如何规避它?
解决方案
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
推荐阅读
- google-bigquery - BigQuery 选择语句别名在 where 子句中不起作用
- android - 对话占据整个屏幕
- environment-variables - 局部变量实现
- r - Apache Lounge 服务器没有响应 Windows 机器上的 rpy2 包
- angularjs - facebook登录没有收到响应,没有显示错误
- cmake - CMake ExternalProject_Add 每次都会重建
- java - 如何在rest api post方法中获取实体作为参数?
- spring - 春季启动:路径参数为空
- php - 使用“list”函数时的PHP未定义偏移量消息
- vuetify.js - 数据表填充的项目不如预期