创建缩略图不适用于40多张图像

时间:2013-11-26 00:29:09

标签: php image thumbnails

这里的全新php新手....我一直在努力学习并编写了一个脚本来自在线的各种教程,扫描服务器上的文件夹。为找到的图像生成缩略图,然后根据需要将缩略图放入新创建的拇指文件夹中...然后在html页面中显示缩略图,缩略图链接回更大的图片。

在我的测试中,一切都运行良好,除非我用40多个图像实现它,我从脚本中得不到任何响应。只是一个没有正文的空白html页面......

正如我所说我是新手,但我认为它与服务器的超时有关?无法渲染图像或其他东西?我看到了一些关于服务器php.ini超时的事情,但我不确定这是不是问题。

我只需要弄清楚为什么我不能一次做40多张图片而且我会变成金色的!

<?php
# SETTINGS
$max_width = 300;
$max_height = 300;

function getPictureType($ext) {
    if ( preg_match('/jpg|jpeg/i', $ext) ) {
        return 'jpg';
    } else if ( preg_match('/png/i', $ext) ) {
        return 'png';
    } else if ( preg_match('/gif/i', $ext) ) {
        return 'gif';
    } else {
        return '';
    }
}

function getPictures() {
    global $max_width, $max_height;
    if ( $handle = opendir(".") ) {
        $lightbox = rand();

        while ( ($file = readdir($handle)) !== false ) {
            if ( !is_dir($file) ) {
                $split = explode('.', $file); 
                $ext = $split[count($split) - 1];
                if ( ($type = getPictureType($ext)) == '' ) {
                    continue;
                }
                if ( ! is_dir('thumbs') ) {
                    mkdir('thumbs');
                }
                if ( ! file_exists('thumbs/'.$file) ) {
                    if ( $type == 'jpg' ) {
                        $src = imagecreatefromjpeg($file);
                    } else if ( $type == 'png' ) {
                        $src = imagecreatefrompng($file);
                    } else if ( $type == 'gif' ) {
                        $src = imagecreatefromgif($file);
                    }
                    if ( ($oldW = imagesx($src)) < ($oldH = imagesy($src)) ) {
                        $newW = $oldW * ($max_width / $oldH);
                        $newH = $max_height;
                    } else {
                        $newW = $max_width;
                        $newH = $oldH * ($max_height / $oldW);
                    }
                    $new = imagecreatetruecolor($newW, $newH);
                    imagecopyresampled($new, $src, 0, 0, 0, 0, $newW, $newH, $oldW, $oldH);
                    if ( $type == 'jpg' ) {
                        imagejpeg($new, 'thumbs/'.$file);
                    } else if ( $type == 'png' ) {
                        imagepng($new, 'thumbs/'.$file);
                    } else if ( $type == 'gif' ) {
                        imagegif($new, 'thumbs/'.$file);
                    }
                    imagedestroy($new);
                    imagedestroy($src);
                }
                echo "<div class=\"box\">";
                echo '<a href="'.$file.'" class="swipebox">';
                echo '<img src="thumbs/'.$file.'" alt="" />';
                echo '</a>';
                echo '</div>';
            }
        }
    }
}
?>

<---HTML CODE BELOW HERE-->
Using this to call function above in html code:

<?php getPictures(); ?>

1 个答案:

答案 0 :(得分:0)

PHP的默认超时为30秒。你可能需要改变这个:

set_time_limit(0);

如果需要很长时间才能执行,这将阻止脚本超时。

此外,许多网络托管服务对您可能超出的页面允许使用的CPU和RAM有限制。为了解决这个问题,你可以将你的脚本分解成块并运行几次PHP文件,一次处理30个图像。