2013-05-29 68 views
1

我創建腳本來掃描圖像目錄,然後創建縮略圖到另一個目錄。掃描目錄和創建縮略圖圖像

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

「停止創建」是什麼意思?腳本是否停止執行?沒有迭代這些圖像?執行得很好,但根本不對這些圖像做任何事情?拋出異常?拋出錯誤?一個警告?在哪一行? – Patashu

+0

查看日誌:腳本是否以超時,OOM或其他方式停止? –

+2

@Patashu:我運行腳本,它停在'2335:爲small_S60.10700.jpg創建縮略圖「,我建議刪除'error_reporting(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其他文件並將其刪除。可能是導致錯誤的.bmpThumbs.db文件。我提到了Thumbs.db,因爲Windows通常在包含視頻或圖片的文件夾中生成此文件。

希望這有助於。

0

我知道這是一個古老的話題,但我想我會加入我的經驗。 如果您通過瀏覽器執行腳本,則超時事件將成爲問題。正如我想到的那樣,我想出了最簡單的解決方案,而不改變服務器設置,這就是使用AJAX。

所以通過使用jQuery AJAX,您可以讓jQuery觸發PHP腳本一次處理一張照片,然後報告狀態。您可以將JavaScript更新爲「列表」或其他內容,以便在所有照片的過程中查看它的位置。所以它會像這樣:jQuery發送命令來處理下一個文件> PHP進程文件,然後報告返回> jQuery處理響應,然後重複該過程。

最大的缺點是瀏覽器必須保持打開狀態,直到所有文件都完成爲止。您可以通過命令提示符運行腳本輕鬆地克服限制,但是從我的經驗來看,這有點複雜。

無論如何,我希望能夠幫助他人解決如何遍歷許多照片並克服限制,特別是當您無法訪問或更改服務器設置時。