500 Внутренняя ошибка сервера при загрузке изображений с помощью PHP

StackOverflow https://stackoverflow.com/questions/8823328

Вопрос

Я получаю ошибку внутреннего сервера 500, запустив следующий скрипт, хотя я загружаю и вставляю в изображения DB 80 за раз:

<?php

function download_remote_file($file_url, $save_to)
{
    $content = file_get_contents($file_url);
    file_put_contents($save_to, $content);
}

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

require_once('sqlconnect.php');
$time_start = microtime_float();
$query="SELECT * FROM GAMES WHERE GAME_IMAGE LIKE '%cache%' LIMIT 0, 80";

$result = mysql_query($query);

while($row = mysql_fetch_array($result))
{
  $game_img = $row['GAME_IMAGE'];
  $gameDB_id = $row['GAME_DBID'];
  chdir($_SERVER['DOCUMENT_ROOT'].'/img/game/');
  if(!file_exists($gameDB_id))
  {
  mkdir($gameDB_id);
  }
  if(strlen(strstr($game_img,'boxart')) == 0)
  {
      $game_img = $game_img.'/boxart/original/front/'.$gameDB_id.'-1.jpg'; 
  }

  $game_img_path = $_SERVER['DOCUMENT_ROOT'].'/img/game/'.$gameDB_id;
  chmod($game_img_path,0777);
  $game_img_name = $gameDB_id.'.jpg';
 $gamefullpath = 'http://www.someSite.nl/img/game/'.$gameDB_id.'/'.$game_img_name;
 if(!file_exists($game_img_path.'/'.$game_img_name ))
 {
  download_remote_file($game_img, realpath($game_img_path) . '/'.$game_img_name); 

  $bytes = filesize($game_img_path.'/'.$game_img_name );
  $KB = round($bytes / 1024, 2);
  if($KB > 50)
  {
      echo "The ID number ".$gameDB_id. " has an invalid image URL, look it up on gamedb.net! <br />";
  }
 }
   $query2 = "UPDATE GAMES SET GAME_IMAGE = '$gamefullpath' WHERE GAME_DBID = '$gameDB_id' AND GAME_DBID";
  $result2 = mysql_query($query2) or die("error!");
  //$nr_of_files = count($game_img_path);
  //echo "Nr of images downloaded:".$nr_of_files;
}

mysql_close($con);
$time_end = microtime_float();
$time = $time_end - $time_start;

echo "Downloading and adding to the database took ".$time." seconds <br />";
$message = "The specified images have been downloaded!";
echo $message;
?>

Я делаю что -то не так, что заставляет сервер останавливаться? Или в случае, если это не эффективно, что я могу сделать, чтобы сделать это. Или, может быть, проблема заключается в конфигурации сервера.

Сервер:

Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 PHP/5.2.6-1+lenny13 with Suhosin-Patch mod_ruby/1.2.6 Ruby/1.8.7(2008-08-11) mod_ssl/2.2.9 OpenSSL/0.9.8g Server

Ваша помощь очень ценится.

Обновление (журнал):

‎[Wed Jan 11 08:58:39 2012] [notice] mod_fcgid: call /home/someSiteName/public_html/admin/download_game_img.php with wrapper /home/someSiteName/fcgi-bin/php5.fcgi

Время обновления):

около 100 секунд.

Обновление (Die):

Я положил кубик после этой строки, и, кажется, здесь ошибка:

download_remote_file($game_img, realpath($game_img_path) . '/'.$game_img_name);
Это было полезно?

Решение

Это связано с максимальным временем выполнения сценария PHP по умолчанию 30 секунд И ваша страница занимает более 100 секунд.

Вы можете увеличить максимальное время выполнения для ваших сценариев PHP с помощью файла .htaccess

Добавьте следующие строки в свой .htaccess файл

php_value max_execution_time 8000
php_value max_input_time 4000

Вы также можете установить предел в Php.ini файл

max_execution_time 8000
max_input_time 4000
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top