我有一个脚本递归遍历所有子目录并压缩所有jpeg。我在压缩之前和之后打印文件大小,但它打印相同的数字。 我正在运行的脚本是:
set_time_limit (86000);
ob_implicit_flush(true);
$main = "files";
function readDirs($main){
$dirHandle = opendir($main);
while($file = readdir($dirHandle)){
$newFile = $main.'/'.$file;
if(is_dir($newFile) && $file != '.' && $file != '..'){
readDirs($newFile);
}
else{
if($file != '.' && $file != '..' && stristr($newFile,'.jpg'))
{
//echo $newFile.'</br>';
$img = imagecreatefromjpeg($newFile);
echo 'Compressing '.$newFile.'... from ('.filesize($newFile).' bytes) to (';
imagejpeg($img,$newFile, 30);
echo filesize($newFile).' bytes)...<br>';
for($k = 0; $k < 40000; $k++)
echo ' '; // extra spaces to fill up browser buffer
}
}
}
}
我得到的输出是:
压缩中 文件/ 1013/0079/3180 / Beautifully_renovated_garden_apartment_in_Rehavia_7.JPG ... 从(58666字节)到(58666字节)...压缩 文件/ 1013/0088/0559 / Exquisite_stand_alone_house_in_Givat_Hamivtar_exceptional_views_3.JPG ... 从(49786字节)到(49786字节)......压缩 文件/ 1013/0088/0587 / Exquisite_stand_alone_house_in_Givat_Hamivtar_exceptional_views_6.JPG ... 从(18994字节)到(18994字节)...压缩 文件/ 1013/0138/4914 / Beautiful_4_rooms_apartment_with_views_to_the_Old_City_2.JPG ... 从(527801字节)到(527801字节)...压缩 files / 1013/0208 / 0656 / Fevrier_2011_005.JPG ... from(35607 bytes)to (35607字节)...压缩 文件/ 1013/0216/6078 / Beautiful_townhouse_in_the_heart_of_the_German_Colony_00.JPG ... 从(42509字节)到(42509字节)...压缩 文件/ 1013/0217/1359 / Unique_luxurious_new_penthouse_in_the_heart_of_the_German_Colony_028.jpg ... 从(1101251字节)到(1101251字节)...压缩 文件/ 1013/0269/0299 / Exclusive_Duplex_Penthouse_in_the_German_Colony_0171.jpg ... 从(20912字节)到(20912字节)...压缩 文件/ 1013/0821/0299 / Beautiful_views_to_the_Knesset_and_Gan_Saker_016.JPG ... 从(570428字节)到(570428字节)...压缩 文件/ 1013/0822/0660 / Beautiful_new_penthouse_in_luxurious_building_with_pool_158double.jpg ... 从(1020561字节)到(1020561字节)...压缩 文件/ 1013/0847/8190 / New_luxurious_penthouse_with_private_entrance_in_Old_Katamon_016.JPG ... 从(542071字节)到(542071字节)...... ...... ......
有人能告诉我是什么问题吗?为什么尺寸没有更新?
非常感谢!
答案 0 :(得分:1)
filesize()
使用缓存机制(“stat cache”),可能没有足够的时间在两次调用之间刷新。
使用clearstatcache()
强制刷新缓存。
答案 1 :(得分:1)
filesize()函数缓存每个文件的大小,以防止stat() - 系统调用很慢。 它在内部保存给定文件名的文件大小,以便在新调用时更快地响应。
根据建议你必须调用clearstatcache()来获得正确的结果。 如果您使用的是PHP&gt; = 5.3.0,您还可以指定必须清除的缓存部分。
你的代码应该是这样的:
echo 'Compressing '.$newFile.'... from ('.filesize($newFile).' bytes) to (';
imagejpeg($img,$newFile, 30);
clearstatcache(true, $newFile); // or clearstatcache() if you want to flush the whole cache
echo filesize($newFile).' bytes)...<br>';
我希望这就是你要找的东西。