我们构建了一个 PHP 脚本来在服务器的硬盘驱动器 (ext4) 上缓存图像(Debian Wheezy with SELinux、Apache、PHP 5.3.26)。
使用如下代码:
$data = "...";
$file = "cached_foo_1234.jpg";
if (!is_file($file)) file_put_contents($file, $data);
稍后在脚本中,打开相同的文件进行读取:
$content = file_get_contents($file);
尽管硬盘驱动器上有正确的数据,但有时 $content 在文件写入文件系统时为空。函数 filesize() 显示相同的行为。
任何日志文件(审计、php 等)中都没有错误。将 clearstatcache() 放在 file_get_contents() 之上或在 file_put_contents() 中使用 LOCK_EX 锁定文件无济于事。该脚本以相同的文件名并行访问。Apache 也无需 PHP 直接返回现有的缓存图像。
我猜文件锁定应该避免在写入文件时返回空返回。
当我们尝试从文件系统读取文件时,为什么我们得到零字节?