Прошу прощения, вопрос, скорее всего, совсем ламерский, но все же...
есть скрипт, который грузит картинку с компа на сервер, уменьшает ее размер и потом выводит ее в браузер.
Заковырка в том, что в заданную директорию попадает уменьшенная копия, но вот в браузер грузится копия с оригинальтным размером. В чем может быть дело?
<?
function resize_image($name_big, $name_small, $max_x, $max_y){
//получаем размер изображения
list($x,$y,$t,$attr)=getimagesize($name_big);
//получаем имя исходного изображения
$big=imagecreatefromjpeg($name_big);
//выводим исходный размер в браузер
echo $x.', '.$y.'<br/>';
//ресайзим изображение в соответствии с заданными параметрами
if($x>$y){
$xs=$max_x;
$ys=$max_y/($x/$y);
}else{
$ys=$max_y;
$xs=$max_x/($y/$x);
}
//выводим в браузер новые размеры изображения
echo $xs.', '.$ys;
$small=imagecreatetruecolor($xs,$ys);
$res=imagecopyresampled($small,$big,0,0,0,0,$xs,$ys,$x,$y);
imagedestroy($big);
imagejpeg($small,$name_small);
imagedestroy($small);
}
if($_FILES['filename']['name']){
$uploaddir = '/home/test1.ru/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['filename']['name']);
move_uploaded_file($_FILES['filename']['tmp_name'], $uploadfile);
resize_image($uploadfile,$uploadfile,200,200);
//для простоты явно указываю, где именно лежит файл (проверяю руками - он там лежит, с измененными размерами)
$img='uploads/Untitled-1.jpg';
//выводим изображение в браузер
echo '<img src="'.$img.'"><br/>';
}
?>
<form action="<? $_SERVER['SELF_PHP'] ?>" method="POST" enctype="multipart/form-data">
<input type="file" name="filename" /><br/>
<input type="submit" value="UPLOAD" />
</form>
Спустя 1 минута, 37 секунд (8.04.2010 - 22:54) twin написал(а):
А где тут браузер?
Спустя 2 минуты, 58 секунд (8.04.2010 - 22:57) waldicom написал(а):
Цитата (twin @ 8.04.2010 - 21:54) |
А где тут браузер? |
Цитата (Fox M. Lurde @ 8.04.2010 - 21:52) |
echo '<img src="'.$img.'"><br/>'; |
Правда не понятно, зачем эта запись:
$img='uploads/Untitled-1.jpg';
и что там выше в коде за переменные, которые нигде не используются
Спустя 14 минут, 13 секунд (8.04.2010 - 23:11) Fox M. Lurde написал(а):
почистил код
Спустя 8 часов, 27 минут, 34 секунды (9.04.2010 - 07:39) twin написал(а):
Этого не может быть. Разве что кэш какой ниибудь.
Спустя 9 часов, 45 минут, 50 секунд (9.04.2010 - 17:25) Fox M. Lurde написал(а):
я понимаю, что быть этого не моет, и грузит он его откуда-нибудь из кэша. Но к стыду своему, я не дакадываюсь, из какого именно, а так как в этом случае его обойти. может быть, есть какие-нибудь варианты?
Спустя 9 минут, 55 секунд (9.04.2010 - 17:34) Fox M. Lurde написал(а):
Подумал. Понял, в чем ошибка.
После исполнения скрипта элемент массива $_FILES['filename']['name'] содержит имя изображения. Если после исполнения нажать F5 (перегрузить страничку, не выключая), скрипт сразу же выполнять функцию над имеющимся изображением (предыдущим), а текущее как бы ляжет в ожидании следующей очереди.
попробовал решить след. образом
не помогло((
После исполнения скрипта элемент массива $_FILES['filename']['name'] содержит имя изображения. Если после исполнения нажать F5 (перегрузить страничку, не выключая), скрипт сразу же выполнять функцию над имеющимся изображением (предыдущим), а текущее как бы ляжет в ожидании следующей очереди.
попробовал решить след. образом
<?
function resize_image($name_big, $name_small, $max_x, $max_y){
//...
}
if($_SERVER['REQUEST_METHOD']=='POST'){
//upload and resize
//...
}else{
$_FILES['filename']['tmp_name']=$_FILES['filename']['name']=null;
}
?>
не помогло((
Спустя 1 час, 28 минут, 47 секунд (9.04.2010 - 19:03) twin написал(а):
Неверно понял.
Цитата |
После исполнения скрипта элемент массива $_FILES['filename']['name'] |
не содержит ничего, так как скрипт уже отработан.
Скрипт конечно не идеален, но работает на ура. Или он тут не весь, или нужно ставить свечку - полтергейст.
А так работает?
Скрипт конечно не идеален, но работает на ура. Или он тут не весь, или нужно ставить свечку - полтергейст.
А так работает?
<?
function resize_image($name_big, $name_small, $max_x, $max_y){
//получаем размер изображения
list($x,$y,$t,$attr)=getimagesize($name_big);
//получаем имя исходного изображения
$big=imagecreatefromjpeg($name_big);
//выводим исходный размер в браузер
echo $x.', '.$y.'<br/>';
//ресайзим изображение в соответствии с заданными параметрами
if($x>$y){
$xs=$max_x;
$ys=$max_y/($x/$y);
}else{
$ys=$max_y;
$xs=$max_x/($y/$x);
}
//выводим в браузер новые размеры изображения
echo $xs.', '.$ys;
$small=imagecreatetruecolor($xs,$ys);
$res=imagecopyresampled($small,$big,0,0,0,0,$xs,$ys,$x,$y);
imagedestroy($big);
imagejpeg($small,$name_small);
imagedestroy($small);
}
if($_FILES['filename']['name']){
// $uploaddir = '/home/test1.ru/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['filename']['name']);
move_uploaded_file($_FILES['filename']['tmp_name'], $uploadfile);
resize_image($uploadfile,$uploadfile,200,200);
//для простоты явно указываю, где именно лежит файл (проверяю руками - он там лежит, с измененными размерами)
//$img='uploads/Untitled-1.jpg';
$img=$_FILES['filename']['name'];
//выводим изображение в браузер
echo '<img src="'.$img.'"><br/>';
}
?>
<form action="<? $_SERVER['SELF_PHP'] ?>" method="POST" enctype="multipart/form-data">
<input type="file" name="filename" /><br/>
<input type="submit" value="UPLOAD" />
</form>
Спустя 12 часов, 23 минуты, 35 секунд (10.04.2010 - 07:27) Fox M. Lurde написал(а):
Нет, фаберже тот же. Я, видимо, всё-таки не очень точно объяснил, что происходит. Загружаю страничку со скриптом в браузер (в первый раз). Загружаю картинку. Картинка отображается корректно. Потом в скрипте меняю размер изображения (скажем, не 200, а 50 точек). В браузере нажимаю Enter, затем F5, что бы обновить страничку со скриптом. Загружаю картинку. Браузер выводит в окно картинку с предыдущими размерами (200 точек). Но в директории лежит картинка с уже измененными (50 точек). После нажатия F5 браузер спрашивает, послать ли данные заново - отвечаю Да. И тогда уже выводится картинка с правильными размерами. Вот как-то так.
Спустя 26 минут, 14 секунд (10.04.2010 - 07:53) twin написал(а):
Тьфу ты, господи... Напугал. Я уж думал барабашка.
Ну это самый банальный кэш и есть. Так попробуй:
Ну это самый банальный кэш и есть. Так попробуй:
$img='uploads/Untitled-1.jpg?'. time();
Спустя 1 день, 11 часов, 27 минут, 53 секунды (11.04.2010 - 19:21) Fox M. Lurde написал(а):
Огромное спасибо! Всё стало работать, как надо.
Объясните, пожалуйста, как это работает? Что происходило до и что происходит теперь?
Объясните, пожалуйста, как это работает? Что происходило до и что происходит теперь?
Спустя 4 минуты, 35 секунд (11.04.2010 - 19:26) Семён написал(а):
Теперь браузер думает, что это другое изображение.
Спустя 46 минут, 58 секунд (11.04.2010 - 20:13) Fox M. Lurde написал(а):
Не совсем понятно, почему он так думает?
Спустя 13 минут, 27 секунд (11.04.2010 - 20:26) Nikitian написал(а):
Адрес файла изменился, имя осталось прежним, но идентичность определяется в том числе и по адресу.
Спустя 14 минут, 2 секунды (11.04.2010 - 20:40) Fox M. Lurde написал(а):
хм... Благодарю всех!