压缩图像 - 获取图像大小PHP

时间:2012-06-08 10:59:32

标签: php compression flush

我有一个脚本递归遍历所有子目录并压缩所有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字节)...... ...... ......

有人能告诉我是什么问题吗?为什么尺寸没有更新?

非常感谢!

2 个答案:

答案 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>';

我希望这就是你要找的东西。

相关问题