我有这个作为 cron 任务运行的代码。基本上它所做的(应该)是通过一个文件夹,找到大于指定大小的图像,重新调整它们并覆盖它们。
在本地测试时(使用相同的 1300 多个图像)它可以工作。如果我删除imagecreatefromjpeg和imagecreatefrom_png上的@错误抑制,我会收到以下警告:
Warning: imagecreatefromjpeg(): gd-jpeg, libjpeg: recoverable error:
Invalid SOS parameters for sequential JPEG in
C:\xampp56\htdocs\svamz\static\uploaded\image_compress.php on line 70
Warning: imagecreatefromjpeg(): './certificate/POCAJT4.jpg' is not a
valid JPEG file in
C:\xampp56\htdocs\svamz\static\uploaded\image_compress.php on line 70
POCAJT4.jpg resize Failed!
此警告是针对某些图像输出的,但大多数图像被压缩并且这些带有警告的图像被跳过。
问题是在服务器(Apache2、PHP 5.6.40)上执行相同的代码只会产生 500 HTTP 错误。没有错误,没有警告(这使得调试很麻烦)
源/目标目录是可写的。我还通过使用filesize($imagePath) > 8000000 && filesize($imagePath) < 9000000更改 if 语句以仅包含一部分图像来测试代码,并且在服务器上运行良好。但是一旦我尝试了一系列包含这些有问题的图像的文件大小,它就会恢复到 500。
我试图通过try catch解决问题,我还使用set_error_handler()尝试在服务器上捕获E_WARNING消息,但没有结果。
gd_info()在本地和服务器上是相同的。
我认为它是无关的,但php -v(也是 error.log)连同它的正常输出给出了这个: 加载失败 /usr/local/lib/ZendGuardLoader5.6.so: /usr/local/lib/ZendGuardLoader5.6.so : 无法打开共享对象文件: 没有那个文件或目录
ini_set('error_reporting', E_ALL);
ini_set('max_execution_time', 0);
$imagesDirectory = './certificate/'; //Source directory
$destinationDirectory = './certificate/'; //Destination directory
$newImageWidth = 1600;
$newImageHeight = 1200;
$quality = 80;
// Source image directory, loop through each Image and resize it.
if($dir = opendir($imagesDirectory)){
目标是在可能的情况下进行压缩和覆盖,如果没有则跳过。我无法控制最终用户上传的图像。任何形式的帮助将不胜感激。
白衣染霜花