【问题标题】:Compressing images - get image size PHP压缩图像 - 获取图像大小 PHP
【发布时间】:2023-11-16 04:59:01
【问题描述】:

我有一个脚本,它递归地循环遍历所有子目录并压缩所有 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 字节)... 压缩 文件/1013/0208/0656/Fevrier_2011_005.JPG... 从(35607 字节)到 (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 字节)... ... ... ...

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

非常感谢!

【问题讨论】:

  • 尝试在两个文件大小调用之间使用clearstatcache()
  • 耶路撒冷有德国殖民地?有趣的。 (啊,从 19 世纪开始!我的午休时间是在阅读*。男孩,我很想拥有那栋联排别墅。或者顶层公寓!流口水
  • 非常感谢!成功了!

标签: php compression flush


【解决方案1】:

filesize() 使用缓存机制(“统计缓存”),可能没有足够的时间在两次调用之间进行刷新。

使用clearstatcache()强制刷新缓存。

【讨论】:

    【解决方案2】:

    filesize() 函数缓存每个文件的大小,以防止 stat()-syscall 非常慢。 它在内部保存给定文件名的文件大小,以便更快地响应新调用。

    按照建议,您必须调用 clearstatcache() 才能获得正确的结果。 如果您使用的是 PHP >= 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>';
    

    我希望这就是你要找的。​​p>

    【讨论】: