У меня есть изображение, которое разорвано скриптом php. Я называю это таковым.Как решить усеченные изображения, созданные php-скриптом?
<img src="/index.php/image-name.jpg">
Если изображение больше 5 минут назад мой сценарий будет получить новую копию изображения от поставщика данных, а затем отобразить новое изображение.
Когда на веб-сайте, который предоставляет изображения, загружен, и этот скрипт отправляется на получение новой копии, он часто отображает только верхнюю часть изображения. Firebug скажет мне, что изображение повреждено или усечено. Если я открою изображение на новой вкладке, мой разор будет иметь полную копию. Если я запустил сценарий второй раз в течение 5 минут, он отлично работает.
Это похоже, если требуется больше определенного времени, чтобы получить изображение, которое он терпит неудачу, и показывает только верхнюю часть. Любые мысли о том, как заставить его ждать дольше, прежде чем сдаться? Или, может быть, я полностью ошибаюсь в том, что происходит неправильно.
<?php
// get the image name from the uri
$path= $_SERVER['REQUEST_URI'];
$image = explode("/", $path);
$image=$image[3];//Get the file name
$image=str_replace('%20',' ', $image); //make it all spaces
$localimage='./road_images/'.$image; //where to find the image on the sever
// check if the image exists, this prevents some kinds of attacks
if (is_file($localimage)) {
$age = filemtime($localimage); // get the file age
if ($age < time() - (60*5)) { // 5 mins old
$simage='http://www.someplace/cams/'.$image;
$simage=str_replace(' ', '%20', $simage);//need to remove the spaces for URLs
copy($simage, $localimage);
}
// serve the image to the user.
$fp = fopen($localimage, 'r');
// send the right headers
header("Content-Type: image/jpg");
header("Content-Length: " . filesize($localimage));
// dump the picture and stop the script
fpassthru($fp);
exit();
}
else
{
echo("Error, no such file: '$image'");
}
?>
EDIT: обнаружили, что при редактировании из
header("Content-Length: " . filesize($localimage));
Он работает, как ожидалось. Все еще пытаюсь понять, почему.
Я зеркалирую другой сайт, который не позволит мне hotlink. Изображение обновляется каждые 5 минут. Если моя копия изображения больше 5 минут, я получаю новую копию и показываю ее. Если ему меньше 5 минут, то я использую копию, которую у меня уже есть. – Brandan
ohh .. знаете ли вы размеры файлов? Может быть, файл слишком большой для вашего веб-сервера. (игнорировать мой последний комментарий) – tanjir
Изображения довольно маленькие. Большой будет 328 × 314 пикселей и 30 КБ. Ночью большинство изображений черное или близко к нему и ближе к 10 КБ. – Brandan