ディレクトリ内の写真のサムネイルを作成するスクリプトがあります。しかし、実行に時間がかかりすぎます (ディレクトリ内の約 170 の画像)。
スクリプトは ajax リクエストによって呼び出されます。70% 完了した後、おそらくタイムアウトが原因でエラーが発生します (約 3 ~ 4 分かかります)。
この問題を解決するにはどうすればよいですか?
function createThumbs( $pathToImages, $pathToThumbs, $thumbWidth )
{
// open the directory
$dir = opendir( $pathToImages );
// loop through it, looking for any/all JPG files:
while (false !== ($fname = readdir( $dir ))) {
// parse path for the extension
$info = pathinfo($pathToImages . $fname);
// continue only if this is a JPEG image
if ( strtolower($info['extension']) == 'jpg' )
{
// load image and get image size
$img = imagecreatefromjpeg( "{$pathToImages}{$fname}" );
$width = imagesx( $img );
$height = imagesy( $img );
// calculate thumbnail size
$new_width = $thumbWidth;
$new_height = floor( $height * ( $thumbWidth / $width ) );
// create a new temporary image
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
// copy and resize old image into new image
imagecopyresampled( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
// save thumbnail into a file
imagejpeg( $tmp_img, "{$pathToThumbs}thumb_{$fname}" );
}
}
// close the directory
closedir( $dir );
}
createThumbs($directory,$directory."/thumbs/",150);
ajax 呼び出し;
var ajaxr=$.ajax({
type: "POST",
url: "after_upload.php",
timeout:600,
beforeSend: function() {
$("#result").html('<div align="center"><h2>מבצע עיבוד נתונים יקח זמן ,חכה..תכין קפה בנתיים ותעשן סיגריה</h2><div><img src="loader.gif"/><div dir="rtl" style="margin:15px;">טוען מידע וממיר תמונות... <button id="cancel" style="padding:5px;">בטל פעולה ותחזור חזרה [X]</button></div></div> </div>');
},
success: function(data){
$("#result").html(data);
},
error: function(xhr, textStatus, errorThrown) {
$("#result").html(textStatus);
}
});
現在、ajax呼び出しでタイムアウトを3000に増やし、すぐに何らかの理由でタイムアウトエラーを返します。呼び出しからタイムアウトプロパティを削除すると、呼び出しが実行され、スクリプトが実行されます..しかし、ジョブの70%しか完了していません..done は空のエラーを返しました...
更新:スクリプトの実行時間を改善するためにすべてを実行しました:コンソールは404を返しません..