2014-12-02 69 views
1

我有功能以及與此funqction我真的想在我的服務器圖像生成減慢servre

  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庫一樣工作。 所以請幫助我做這個功能比現在更快。

+0

它不會創建減慢速度的文件。但使用圖像庫,你有沒有嘗試過最有名的? – 2014-12-02 08:25:26

回答

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 = imagecreatetruecolor($width, $height); 
imagejpeg($getfile, "../www/classifieds_images/$originalname"); 

這不是你可以做優化你的代碼是最好的,但至少它是一個開始。 我建議設置一些限制,以便在腳本的一次執行中對多少個文件進行處理並對其進行排隊 - 如果您嘗試處理大量數據(不一定與圖像相關),那麼這是最好的選擇。

[EDIT2]

而且 - 當他們不再需要尚未設定的變量。 當你完成了所有的圖像並保存在一個文件中時 - 銷燬資源。它不會刪除圖像文件,只是從內存中刪除它的數據。 http://php.net/manual/en/function.imagedestroy.php

+0

是的。它現在比過去更快。但它使用2GB RAM。我能做些什麼來最小化使用RAM? – shalvasoft 2014-12-02 09:05:13