2013-11-26 63 views
0

這裏的PHP新手總數....我一直在努力學習,並編寫了一個腳本從在線掃描服務器上的文件夾的各種教程。爲找到的圖像生成縮略圖,然後根據需要將縮略圖放入新創建的拇指文件夾中。然後在縮略圖鏈接回大圖的情況下在縮略圖中顯示縮略圖。創建縮略圖將不能用於40+圖片

一切都在我的測試很好,除非我用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(); ?> 
+0

默認情況下,PHP允許運行腳本超時30秒。你可能會經過你的服務器上的最大值 –

回答

0

PHP的默認超時時間爲30秒。您可能需要更改此設置:

set_time_limit(0); 

如果執行時間很長,將停止腳本超時。

此外,許多網絡託管服務對您的網頁允許使用的CPU和RAM有限制,您可能會超出。爲了解決這個問題,你可以將你的腳本分成幾塊,然後多次運行PHP文件,一次處理30個圖像。

+0

感謝您的幫助,但仍然是同樣的問題......我添加了這個,但仍然沒有...但它適用於較小的圖像採樣...很令人沮喪! <?php \t set_time_limit(0); \t \t#SETTINGS – user3034445

+0

我在處理大量大圖像時也遇到了內存問題,但我不知道該如何處理它們......我會環顧四周。 –

+0

我剛剛在我的本地服務器上用'set_time_limit(0);'運行了80個圖像(2000 x 1500像素,每個大約1MB)並且沒有任何問題。你在本地服務器上還是在真實網絡上運行它?該操作在我的電腦上使用了大約80MB RAM和100%CPU,時間約爲2分鐘。您是主機服務(或本地計算機)可能有此腳本超出的限制。 –