我们构建了一个PHP脚本来缓存服务器硬盘(ext4)上的图像(带有SELinux,Apache,PHP 5.3.26的Debian Wheezy)。
使用以下代码:
$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的情况下直接返回现有的缓存图像。
我想文件锁定应避免在写入文件时返回空白。
当我们尝试从文件系统中读取文件时,为什么我们得到零字节?
答案 0 :(得分:1)
遇到此问题,发现如果文件名包含不允许的字符并且无效,则会导致此问题。
要删除无效的文件名字符,请使用:
$bad = array_merge(
array_map('chr', range(0,31)),
array("<", ">", ":", '"', "/", "\\", "|", "?", "*"));
$result = str_replace($bad, "", $filename);
答案 1 :(得分:-1)
使用curl,并检查是否忽略以验证SSL: curl_setopt($ curl,CURLOPT_SSL_VERIFYPEER,false);