Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сделать чтобы при смене аватарки она уже отображалась не из кеша
 
 автор: tvv123456   (04.11.2009 в 17:24)   письмо автору
 
 

Аватарка отображается в левом блоке страницы, после того как она поменялась на вновь загруженную делаю header("Location:kabinet.php");(форма для загрузки аватарки на этой же странице), но отображается по прежнему старая аваторка, если обновить то все ОК.
Как сделать чтоб она автоматически обновлялась а не из кеша бралась?

Еще напомните пожалуйста функцию, при помощи которой проверяется что картинка пришла из формы.

  Ответить  
 
 автор: ols   (04.11.2009 в 17:35)   письмо автору
 
   для: tvv123456   (04.11.2009 в 17:24)
 

>Еще напомните пожалуйста функцию, при помощи которой проверяется что картинка пришла из формы.

Ничего не понял. Имеете вввиду при загрузке файла на сервер?

  Ответить  
 
 автор: tvv123456   (04.11.2009 в 18:04)   письмо автору
 
   для: ols   (04.11.2009 в 17:35)
 

да
Но главный вопрос как сделать чтобы картинка обновилась в левом блоке сразу после загрузки ее на сервер

  Ответить  
 
 автор: ols   (04.11.2009 в 18:20)   письмо автору
 
   для: tvv123456   (04.11.2009 в 18:04)
 


<?
if(is_uploaded_file($_FILES['image']['tmp_name']))
{
    
move_uploaded_file($_FILES['image']['tmp_name'],$newfilename);
}
?>

  Ответить  
 
 автор: tvv123456   (04.11.2009 в 18:51)   письмо автору
 
   для: ols   (04.11.2009 в 18:20)
 

Спасибо это я и имел ввиду во втором вопросе!

  Ответить  
 
 автор: ols   (04.11.2009 в 18:21)   письмо автору
 
   для: tvv123456   (04.11.2009 в 18:04)
 

>Но главный вопрос как сделать чтобы картинка обновилась в левом блоке сразу после загрузки ее на сервер
Вы напишите хоть что это за самый левый блок. О чем речь-то?

  Ответить  
 
 автор: Temnovit   (04.11.2009 в 18:23)   письмо автору
 
   для: tvv123456   (04.11.2009 в 17:24)
 

>Аватарка отображается в левом блоке страницы, после того как она поменялась на вновь загруженную делаю header("Location:kabinet.php");(форма для загрузки аватарки на этой же странице), но отображается по прежнему старая аваторка, если обновить то все ОК.
>Как сделать чтоб она автоматически обновлялась а не из кеша бралась?

Прилепляйте к адресу пару случайных символов при сохранении на диск. Тогда адрес картинки будет меняться и она не будет грузиться из кэша.

  Ответить  
 
 автор: tvv123456   (04.11.2009 в 18:31)   письмо автору
 
   для: Temnovit   (04.11.2009 в 18:23)
 

>Прилепляйте к адресу пару случайных символов при сохранении на диск. Тогда адрес
>картинки будет меняться и она не будет грузиться из кэша

Я не могу менять название картинки, она называется по id пользователя и потом ищеться по этому id

Вот функция которой я обрабатываю картинку

<?
function img_resize($src$dest$width$heightnuj$rgb 0xFFFFFF$quality 75) { 
                             if (!
file_exists($src)) return false
                                 
$size getimagesize($src); 
                             if (
$size === false) return false
                             
$kr $size['0']/$size['1'];
                                  
$height $width/$kr;
                                  if(
$height>$heightnuj)
                                  {
$ratio $height/$heightnuj;
                                  
$width $width/$ratio;
                                  
$height $height/$ratio;
                                  }
                                 
$format strtolower(substr($size['mime'], strpos($size['mime'], '/')+1)); 
                                 
$icfunc "imagecreatefrom" $format
                             if (!
function_exists($icfunc)) return false
                                  
$x_ratio     $width $size[0]; 
                                  
$y_ratio     $height $size[1]; 
                                  
$ratio       min($x_ratio$y_ratio); 
                                  
$use_x_ratio = ($x_ratio == $ratio); 
                                  
$new_width   $use_x_ratio  $width  floor($size[0] * $ratio); 
                                  
$new_height  = !$use_x_ratio $height floor($size[1] * $ratio); 
                                  
$new_left    $use_x_ratio  floor(($width $new_width) / 2); 
                                  
$new_top     = !$use_x_ratio floor(($height $new_height) / 2); 
                                  
$isrc        $icfunc($src); 
                                  
$idest       imagecreatetruecolor($width$height); 
                                   
                                  
imagefill          ($idest00$rgb                         ); 
                                  
imagecopyresampled ($idest$isrc$new_left$new_top00
                                                      
$new_width$new_height$size[0], $size[1]); 
                                        
                                
imagejpeg          ($idest$dest$quality                    ); 
                                  
imagedestroy       ($isrc                                      ); 
                                  
imagedestroy ($idest                                           ); 
                                                return 
true

                   } 



Вот так ее вызываю

$a = $HTTP_POST_FILES["avatarka"]["tmp_name"];
img_resize($a, 'avatar/'.$id_user.'.jpg', 142, 190); 
header("Location:kabinet.php"); //эфекта не дает картинка все равно береться из кеша
exit;
?>


вот форма

<form action="kabinet.php" method="post" enctype="multipart/form-data"><input name="avatarka" type="file">
    <input type="hidden" name="MAX_FILE_SIZE" value=\"1048000\" />
     <input name="avatar" type="submit" value="Загрузить" /><br /><font size="-1">Максимальный размер картинки 1 Мб.</font></form>



Конечно можно сделать рефреш мета тегом или яваскриптом, но не очень хочеться так как страница как будто "моргнет", а хотелось бы чтоб просто картинка взялась не из кеша

  Ответить  
 
 автор: Trianon   (04.11.2009 в 19:57)   письмо автору
 
   для: tvv123456   (04.11.2009 в 18:31)
 

>Я не могу менять название картинки, она называется по id пользователя и потом ищеться по этому id

Значит Вам придется эту логику переделать.
К примеру - записывать текущее название файла с аватаркой в данные о пользователе наравне с его id, логином и прочими. Ну или хотя бы номер её версии.
Вопросы обновления частей страницы - вопросы языков клиентской стороны (HTML+JS+CSS).

  Ответить  
 
 автор: tvv123456   (04.11.2009 в 20:24)   письмо автору
 
   для: Trianon   (04.11.2009 в 19:57)
 

Заменил
header("Location:kabinet.php"); 
на
echo "<html><head>
<meta http-equiv='Refresh' content='0; URL=kabinet.php'>


 </head></html>";

Конечно все работает хоть и не так красиво(во втором случае страница все-таки начинает загружаться и вылетает белый фон),

Но главное, я если честно думал что эти 2 кода будут иметь приблизительно один и тот же эффект в части обновления, но почему то когда используется header(), страница береться из кеша, можно как-нибудь все-таки указать что нужно обновить страницу а не брать ее из кеша?.

  Ответить  
 
 автор: Trianon   (04.11.2009 в 20:43)   письмо автору
 
   для: tvv123456   (04.11.2009 в 20:24)
 

точно также. Location: kabinet.php?случайное_число
Только это не даст никаких гарантий, что изображение тоже обновится.

  Ответить  
 
 автор: tvv123456   (04.11.2009 в 20:46)   письмо автору
 
   для: Trianon   (04.11.2009 в 20:43)
 

Пробовал не обновляется :)))

  Ответить  
 
 автор: Trianon   (04.11.2009 в 21:02)   письмо автору
 
   для: tvv123456   (04.11.2009 в 20:46)
 

Я уже написал.
Если (и только в том случае если) Вы меняете объект (картинку) - Вы обязаны сменить её имя. Или как минимум её URI.

  Ответить  
 
 автор: sim5   (04.11.2009 в 21:28)   письмо автору
 
   для: tvv123456   (04.11.2009 в 18:31)
 

<?
header
("Pragma: no-cache, must-revalidate");
header("Expires: Mon, 01 Jan 1990 00:00:00 GMT");
header("Content-type: image/jpeg");

  Ответить  
 
 автор: Trianon   (04.11.2009 в 21:32)   письмо автору
 
   для: sim5   (04.11.2009 в 21:28)
 

Sim5, я настолько дико рад, что Вы, наконец, вернулись, что даже не стану критиковать предложенное Вами фе.
Где Вы пропадали?

  Ответить  
 
 автор: tvv123456   (04.11.2009 в 21:36)   письмо автору
 
   для: Trianon   (04.11.2009 в 21:32)
 

Будем считать, что вопрос решен, но у меня есть еще вопросик, который думаю не заслуживает отдельной темы:

Написал игрушку(кто хочет стать миллионером) можно как-нибудь узнать сколько она занимает ресурсов когда играют одновременно, ну скажем 1000 человек? Просто хочеться хостинг подобрать подешевле, но и чтоб игрушка шла без тормозов

  Ответить  
 
 автор: sim5   (04.11.2009 в 21:41)   письмо автору
 
   для: Trianon   (04.11.2009 в 21:32)
 

В казино играл. А почему "фе"?

  Ответить  
 
 автор: Trianon   (04.11.2009 в 21:45)   письмо автору
 
   для: sim5   (04.11.2009 в 21:41)
 

много выиграли?
Потому что такой код запретит картинке кешироваться не только в момент замены.

  Ответить  
 
 автор: sim5   (04.11.2009 в 21:47)   письмо автору
 
   для: Trianon   (04.11.2009 в 21:45)
 

Состояние ;-)
А, ну да, значится я не внимательно читал чего надо автору.

  Ответить  
 
 автор: tvv123456   (04.11.2009 в 21:49)   письмо автору
 
   для: sim5   (04.11.2009 в 21:47)
 

А как насчет
Написал игрушку(кто хочет стать миллионером) можно как-нибудь узнать 
сколько она занимает ресурсов когда играют одновременно, ну скажем 1000 человек?
 Просто хочеться хостинг подобрать подешевле, но и чтоб игрушка шла без тормозов

Конечно щас вопрос не важен, так как не скоро у меня 1000 единовременно играть будут, но просто интересно, как можно узнать сколько ресурсов занимает скрипт если его одновременно запускают много народу

  Ответить  
 
 автор: sim5   (04.11.2009 в 22:11)   письмо автору
 
   для: tvv123456   (04.11.2009 в 21:49)
 

Ну если вашему Якубовичу будет присылать соленья, варенья и прочие подарки, то.... :)

  Ответить  
 
 автор: tvv123456   (04.11.2009 в 22:23)   письмо автору
 
   для: sim5   (04.11.2009 в 22:11)
 

да просто там асинхронных аякс запросов много с периодичностью 2 секунды так что нагрузка не малая, но все-таки хочеться конкретики

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования