图像创建减慢服务器

时间:2014-12-02 08:24:00

标签: php gd ram uiimagejpegrepresentation

我有功能,有了这个功能,我试图在我的服务器中创建一些图像

           foreach($value[0] as $imagekey => $imageval) {
                $imgname = $gancxadeba . '_' . $imagekey;
                $saveaddr = dirname(dirname($_SERVER['PHP_SELF'])).'/www/classifieds_images/';
                $as = '.JPG';
                $originalname = $imgname . $as;
                if(!file_exists($saveaddr.$originalname)) {
                    if (preg_match('/\.(jpg)$/', $imageval)) {
                        $getfile = imagecreatefromjpeg($imageval);
                    } elseif (preg_match('/\.(JPG)$/', $imageval)) {
                        $getfile = imagecreatefromjpeg($imageval);
                    } elseif (preg_match('/\.(png)$/', $imageval)) {
                        $getfile = imagecreatefrompng($imageval);
                    } else {
                        $getfile = imagecreatefromgif($imageval);
                    }
                    list($width, $height) = getimagesize($imageval);
                    $newWidth = 90;
                    $newHeight = 120;
                    $original = imagecreatetruecolor($width, $height);
                    imagecopyresampled($original, $getfile, 0, 0, 0, 0, $width, $height, $width, $height);
                    imagejpeg($original, "../www/classifieds_images/$originalname");
                    echo 'განცხადება: ' . $gancxadeba . ' ორიგინალი სურათი: ' . $imgname . ' created!' . PHP_EOL;

                    $thumbname = $imgname . '_THUMB' . $as;
                    if (!file_exists($saveaddr . $thumbname)) {
                        $thumb = imagecreatetruecolor($newWidth, $newHeight);
                        imagecopyresampled($thumb, $getfile, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
                        imagejpeg($thumb, "../www/classifieds_images/$thumbname");
                        echo 'განცხადება: ' . $gancxadeba . ' თამბი სურათი: ' . $imgname . ' created!' . PHP_EOL;
                    }
                }
                $image[$imagekey] = $imgname;
            }

如您所知,我m getting image link and then chacking if file exists and I创建文件(如果不存在)。 但我的服务器速度慢了。 它使用2GB RAM。 我该怎么做才能加速我的服务器?

我首先尝试了file_put_content()然后创建了拇指 但它不如gd库工作。 所以请帮助我更快地完成这项功能。

1 个答案:

答案 0 :(得分:2)

有一点需要注意(不是你问题的答案): 使用GD2功能时,不要信任文件扩展名。有人可以使用名称" trollpic.gif"来保存JPEG。并导致你的imagecreatefromgif引发错误。

使用exif数据: http://php.net/manual/en/function.exif-imagetype.php

另外 - 你可以尝试使用imegemagick作为GD2的替代品,如果可能的话(它不是在一些更便宜的托管服务上)。

[编辑]

$original = imagecreatetruecolor($width, $height);
imagecopyresampled($original, $getfile, 0, 0, 0, 0, $width, $height, $width, $height);
imagejpeg($original, "../www/classifieds_images/$originalname");

看起来$ getfile和$ original都保持相同的数据。 检查这是否有效:

$original = imagecreatetruecolor($width, $height);
imagejpeg($getfile, "../www/classifieds_images/$originalname");

这不是您可以做的最好的优化代码,但至少它是一个开始。 我建议设置一些限制,以便在一次执行脚本时处理多少文件并对其进行排队 - 如果您尝试处理大量数据,那么这是您可以做的最好的事情,不一定与图像有关。

[EDIT2]

此外 - 在不再需要时取消设置变量。 当您对图像完成所有操作并将其保存在文件中时 - 销毁资源。它不会删除图像文件,只是从内存中删除它的数据。 http://php.net/manual/en/function.imagedestroy.php