简体   繁体   English

使用PHP下载图像时500内部服务器错误

[英]500 internal server error while downloading images using PHP

I'm getting the 500 Internal Server Error by running the following script, even though I'm downloading and inserting to the DB 80 images at a time: 即使我一次下载并插入到DB 80映像中,我仍然通过运行以下脚本来获得500 Internal Server Error:

<?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;
?>

Am I doing something wrong which forces the server to stop? 我在做错什么迫使服务器停止吗? Or in case it's not efficient what can I do to make it so. 否则,如果效率不高,我该怎么做。 Or maybe the problem is some server configuration. 也许问题出在某些服务器配置上。

Server: 服务器:

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

Your help is much appreciated. 非常感谢您的帮助。

UPDATE (log): 更新(日志):

‎[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

UPDATE (time): 更新时间):

about 100 seconds. 大约100秒

UPDATE (die): 更新(死):

I put a die after this line and the error seems to be here: 我在这一行之后死了,错误似乎在这里:

download_remote_file($game_img, realpath($game_img_path) . '/'.$game_img_name);

this is because the default php script's maximum execution time is 30 seconds and your page is taking more than 100 seconds. 这是因为默认php脚本的最大执行时间为30秒,而您的页面则花费了100多秒。

you can increase the maximum execution time for your php scripts using .htaccess file 您可以使用.htaccess文件增加php脚本的最大执行时间

add the following lines to your .htaccess file 将以下行添加到您的.htaccess文件中

php_value max_execution_time 8000
php_value max_input_time 4000

you can also set the limit in php.ini file 您还可以在php.ini文件中设置限制

max_execution_time 8000
max_input_time 4000

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM