我正在创建脚本来扫描图像目录,然后创建缩略图到另一个目录。
function createThumbs( $pathToImages, $pathToThumbs, $thumbWidth )
{
// Turn off all error reporting
error_reporting(0);
set_time_limit(0);
// open the directory
$dir = opendir( $pathToImages );
// loop through it, looking for any/all JPG files:
$i='1';
while (false !== ($fname = readdir( $dir ))) {
// parse path for the extension
$info = pathinfo($pathToImages . $fname);
// continue only if this is a JPEG image
$source_file_name = basename($source_image);
$source_image_type = substr($source_file_name, -3, 3);
switch(strtolower($info['extension']))
{
case 'jpg':
$img = imagecreatefromjpeg("{$pathToImages}{$fname}");
break;
case 'gif':
$img = imagecreatefromgif("{$pathToImages}{$fname}");
break;
case 'png':
$img = imagecreatefrompng("{$pathToImages}{$fname}");
break;
}
echo "$i : Creating thumbnail for small_$fname <br />";
// load image and get image size
$width = imagesx( $img );
$height = imagesy( $img );
// this will be our cropped image
// copy the crop area from the source image to the blank image created above
// calculate thumbnail size
$new_width = $thumbWidth;
$new_height = $thumbWidth;
// create a new tempopary image
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
// copy and resize old image into new image
imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
switch(strtolower($info['extension']))
{
case 'jpg':
imagejpeg($tmp_img, "{$pathToThumbs}small_$fname", 100);
break;
case 'gif':
imagegif($tmp_img, "{$pathToThumbs}small_$fname");
break;
case 'png':
imagepng($tmp_img,"{$pathToThumbs}small_$fname", 0);
break;
}
imagedestroy($img);
imagedestroy($tmp_img);
$i++;
}
// close the directory
closedir( $dir );
}
我们用
调用这些函数createThumbs("media/normal/","media/small/",70);
脚本运行良好,但问题是,我有大约4000张图片,并且脚本停止在大约2400-2600张图片上创建缩略图
您可以尝试使用此链接http://saharandev.co.uk/saharan/create_thumbs_small.php
任何人都可以帮忙吗?
由于
答案 0 :(得分:0)
前一段时间我遇到了类似的问题。我猜测您托管服务器php.ini
中的PHP脚本执行时间指令设置的时间值比完成处理任务所需的时间值低
要防止脚本超时,您需要增加处理脚本的执行时间。您可以在脚本内或函数内执行此操作。这是一个例子:
function createThumbs( $pathToImages, $pathToThumbs, $thumbWidth )
{
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
... Your code here ...
}
如果您仍然遇到错误,请尝试将max_execution_time
增加到更高的值。
OR
检查源目录中是否包含.jpeg
,.gif
和.png
以外的文件并将其删除。可能是.bmp
或Thumbs.db
文件导致错误。我提到了Thumbs.db
,因为Windows通常会在包含视频或图片的文件夹中生成此文件。
希望这会有所帮助。
答案 1 :(得分:0)
我知道这是一个古老的话题,但我想我会为此添加经验。 如果您通过浏览器执行脚本,则超时问题将成为问题。正如我想的那样,我在没有改变服务器设置的情况下找出了最简单的解决方案,那就是使用AJAX。
因此,通过使用jQuery AJAX,您可以让jQuery触发PHP脚本一次处理一张照片,然后报告状态。您可以让javascript更新“列表”或其他内容,这样您就可以在所有照片的过程中看到它的位置。所以它会是这样的:jQuery发送命令来处理下一个文件&gt; PHP处理文件,然后报告&gt; jQuery处理响应,然后重复该过程。
最大的缺点是浏览器必须保持打开状态才能完成所有文件。您可以通过命令提示符运行脚本轻松克服限制,但根据我的经验,这有点复杂。
无论如何,我希望能帮助其他人解决如何迭代许多照片并克服这些限制,尤其是当您无法访问或更改服务器设置时。