Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Доработайте пожалуйста скрипт кеширования

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
android
Отправлено: 16 Октября, 2011 - 00:33:38
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Доброй ночи, нашел скрипт кеширования картинки. Нужно его доработать так что бы он работал по такой схеме.

->Заходим site.ru/ims-идсервиса.png->смотрим есть ли такая картинка:
Да: -> Берем ее из папки cache
Нет: -> Генерируем новую картинку и заносим в папку cache
->При повторном заходе на ту же картинку через 3 часа (site.ru/ims-идсервиса.png) мы ее обновляем т.е заного генерируем картинку и перезаписываем ее в папке cache

Сам скрипт:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function createthumbnail($filetype, $origfile, $thumbfile, $new_w, $new_h, $par) {
  4.    
  5.     if ($filetype == 1) { $origimage = imagecreatefromgif($origfile); }
  6.     elseif ($filetype == 2) { $origimage = imagecreatefromjpeg($origfile); }
  7.     elseif ($filetype == 3) { $origimage = imagecreatefrompng($origfile); }
  8.    
  9.     $old_x = imagesx($origimage);
  10.     $old_y = imagesy($origimage);
  11.    
  12.     if ($old_x > $new_w || $old_y > $new_h) {
  13.         if (($old_x < $old_y) && $par=='n') {
  14.             $thumb_w = round(($old_x * $new_h) / $old_y);
  15.             $thumb_h = $new_h;
  16.         } elseif (($old_x > $old_y) && $par=='n') {
  17.             $thumb_w = $new_w;
  18.             $thumb_h = round(($old_y * $new_w) / $old_x);
  19.         } elseif (($old_x < $old_y) && $par=='s') {
  20.             $thumb_w = $new_w;
  21.             $thumb_h = round(($old_y * $new_w) / $old_x);
  22.         } elseif (($old_x > $old_y) && $par=='s') {
  23.             $thumb_w = $new_w;
  24.             $thumb_h = round(($old_y * $new_w) / $old_x);
  25.         } else {
  26.             $thumb_w = $new_w;
  27.             $thumb_h = $new_h;
  28.         }
  29.     } else {
  30.         $thumb_w = $old_x;
  31.         $thumb_h = $old_y;
  32.     }
  33.    
  34.     $thumbimage = imagecreatetruecolor($thumb_w,$thumb_h);
  35.     $result = imagecopyresampled($thumbimage, $origimage, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
  36.    
  37.     touch($thumbfile);
  38.  
  39.     if ($filetype == 1) { imagegif($thumbimage, $thumbfile); }
  40.     elseif ($filetype == 2) { imagejpeg($thumbimage, $thumbfile); }
  41.     elseif ($filetype == 3) { imagepng($thumbimage, $thumbfile); }
  42. }
  43.  
  44. if (isset($_GET['url']) && $_GET['url']!='' && isset($_GET['w']) && $_GET['w']!='' && isset($_GET['p']) && ($_GET['p']=='n' || $_GET['p']=='s')) {
  45.     $url = $_GET['url'];
  46.     $width = $_GET['w'];
  47.     $height = (isset($_GET['h']) ? $_GET['h'] : '500');
  48.     $par = $_GET['p'];
  49.    
  50.     $pic_types = array(".gif",".jpg",".jpeg",".png");
  51.     $pic = basename($url);
  52.     $pic_name = explode(".", $pic);
  53.      $pic_ext = strtolower(strrchr($pic,"."));
  54.     if (!in_array($pic_ext, $pic_types)) {
  55.         exit();
  56.     } else {
  57.         $imagefile = getimagesize($url);
  58.         $thumb = "cache/".$pic_name[0]."_".$width.$par.$pic_ext;
  59.         if (!file_exists($thumb) || filesize($thumb)==0) { createthumbnail($imagefile[2], $url, $thumb, $width, $height, $par); }
  60.     }
  61.     header('Location: '.$thumb);
  62. }
  63.  
  64. ?>


pic.php?url=images/kartinka.jpg&w=100&h=100&p=n
(Добавление)
За помощь дам на пиво Улыбка
 
 Top
snikers987
Отправлено: 16 Октября, 2011 - 17:41:05
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




этот скрипт создает превьюшку, а не генерирует картинку, если превьюшка есть- показывает из папки cache, нет - создает.

(Отредактировано автором: 16 Октября, 2011 - 20:21:33)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
snikers987
Отправлено: 16 Октября, 2011 - 21:26:04
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




фаил cache.php

PHP:
скопировать код в буфер обмена
  1. if(!isset($_GET['id'])) {$_GET['id']=0;} //проверяем пршло ли что-то и что пришло в гет
  2. if($_GET['id'] == 0 || !is_numeric($_GET['id'])){
  3.         header("Location: /index.php");
  4.         exit();
  5. }
  6. $file = "cache/ims-".$_GET['id'].".png";
  7. if(file_exists($file)){
  8.         $get_create_time = filemtime($file); //получаем время последнего изменения
  9.         $file_update_time = strtotime('+3 hours', $get_create_time); // прибавляем к дате создания 3 часа
  10.         $curent_timestamp = strtotime("now"); //получаем текущую метку времени
  11.         if($file_update_time <= $curent_timestamp){ //сравниваем время создания файла c текущим, если прошло 3 часа обновляем;
  12.                 if(unlink($file)){ //сносим старый фаил
  13.                         $img = imagecreatefrompng('img.png');
  14.                         $fff = imagecolorallocate($img, 0, 0, 0);
  15.                         imagettftext($img, 8, 0, 26, 17, $fff, 'tahoma.ttf', $_GET['id']);
  16.                         imagepng($img, $file);
  17.                         imagedestroy($img);
  18.                         echo "<img src='".$file."'/>"; //Обновили, показываем фаил.
  19.                 }else{
  20.                         echo "Произошла ошибка при удалении файла.";
  21.                 }
  22.         }else{
  23.                 echo "<img src='".$file."'/>"; //Обновление не требуется, показываем фаил.
  24.         }
  25. }else{
  26.                 //файла нет - создаем.
  27.                 $img = imagecreatefrompng('img.png');
  28.                 $fff = imagecolorallocate($img, 0, 0, 0);
  29.                 imagettftext($img, 8, 0, 26, 17, $fff, 'tahoma.ttf', $_GET['id']);
  30.                 imagepng($img, $file);
  31.                 imagedestroy($img);
  32.                
  33.                 echo "<img src='".$file."'/>"; //сгенерировали, теперь показываем
  34. }
  35.  
  36.  


добавь в .htaccess
PHP:
скопировать код в буфер обмена
  1.  
  2. RewriteEngine On
  3. RewriteBase /
  4. RewriteRule ^ims-([0-9]+).png$ cache.php?id=$1
  5.  


обращаться к скрипту так:

http://site.ru/ims-111.png , где 111 - это параметр ID который передается в гет

пиво наливай сюда Z160860718118 =)

(Отредактировано автором: 17 Октября, 2011 - 00:06:45)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
android
Отправлено: 17 Октября, 2011 - 19:26:10
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




snikers987

Цитата:
Нет: -> Генерируем новую картинку и заносим в папку cache
->При повторном заходе на ту же картинку через 3 часа (site.ru/ims-идсервиса.png) мы ее обновляем т.е заного генерируем картинку и перезаписываем ее в папке cache



Растерялся


echo "<img src='".$file."'/>"; //сгенерировали, теперь показываем картинка должна быть .png и в хеадере header('тип png')
 
 Top
snikers987
Отправлено: 17 Октября, 2011 - 21:35:42
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




android пишет:
картинка должна быть .png и в хеадере header('тип png')

Борзеете батюшка, в ТЗ об этом ни слова. Картинка и так в png. Ты вообще ничего не написал от том как она должна выводится.

если это так принципиально, то делай так:
PHP:
скопировать код в буфер обмена
  1.  
  2. if(!isset($_GET['id'])) {$_GET['id']=0;} //проверяем пршло ли что-то и что пришло в гет
  3. if($_GET['id'] == 0 || !is_numeric($_GET['id'])){
  4.         header("Location: /index.php");
  5.         exit();
  6. }
  7. $file = "cache/ims-".$_GET['id'].".png";
  8. if(file_exists($file)){
  9.         $get_create_time = filemtime($file); //получаем время последнего изменения
  10.         $file_update_time = strtotime('+3 hours', $get_create_time); // прибавляем к дате создания 3 часа
  11.         $curent_timestamp = strtotime("now"); //получаем текущую метку времени
  12.         if($file_update_time <= $curent_timestamp){ //сравниваем время создания файла c текущим, если прошло 3 часа обновляем;
  13.                 if(unlink($file)){ //сносим старый фаил
  14.                         $img = imagecreatefrompng('img.png');
  15.                         $fff = imagecolorallocate($img, 0, 0, 0);
  16.                         imagettftext($img, 8, 0, 26, 17, $fff, 'tahoma.ttf', $_GET['id']);
  17.                         imagepng($img, $file);
  18.                         imagedestroy($img);
  19.                         //echo "<img src='".$file."'/>"; //Обновили, показываем фаил.
  20.                 header("Content-type: image/png");
  21.       include "$file";
  22.                 }else{
  23.                         echo "Произошла ошибка при удалении файла.";
  24.                 }
  25.         }else{
  26.                 //echo "<img src='".$file."'/>"; //Обновление не требуется, показываем фаил.
  27.                header("Content-type: image/png");
  28.           include "$file";
  29.         }
  30. }else{
  31.                 //файла нет - создаем.
  32.                 $img = imagecreatefrompng('img.png');
  33.                 $fff = imagecolorallocate($img, 0, 0, 0);
  34.                 imagettftext($img, 8, 0, 26, 17, $fff, 'tahoma.ttf', $_GET['id']);
  35.                 imagepng($img, $file);
  36.                 imagedestroy($img);
  37.                
  38.                 //echo "<img src='".$file."'/>"; //сгенерировали, теперь показываем
  39.               header("Content-type: image/png");
  40.          include "$file";
  41. }
  42.  


В чем проблема то?

(Отредактировано автором: 18 Октября, 2011 - 09:30:51)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Stierus Супермодератор
Отправлено: 18 Октября, 2011 - 11:26:18
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Мммм, отменнейшие спагетти Улыбка
 
My status
 Top
snikers987
Отправлено: 18 Октября, 2011 - 11:48:02
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Цитата:
Мммм, отменнейшие спагетти


это в смысле?


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
EuGen Администратор
Отправлено: 18 Октября, 2011 - 12:19:35
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
snikers987
Отправлено: 18 Октября, 2011 - 17:26:37
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. function imgCreator($file){
  4.         $img = imagecreatefrompng('img.png');
  5.         $fff = imagecolorallocate($img, 255, 255, 255);
  6.         imagettftext($img, 8, 0, 26, 17, $fff, 'tahoma.ttf', $_GET['id']);
  7.         imagepng($img, $file);
  8.         header("Content-type: image/png");
  9.         imagepng($img);
  10.         imagedestroy($img);
  11. }
  12. if(!isset($_GET['id'])) {$_GET['id']=0;}
  13. if($_GET['id'] == 0 || !is_numeric($_GET['id'])){
  14.         header("Location: /index.php");
  15.         exit();
  16. }
  17. $file = "cache/ims-".$_GET['id'].".png";
  18. if(file_exists($file)){
  19.                 $file_update_time = strtotime('+3 hours', filemtime($file));
  20.                 $curent_timestamp = strtotime("now");
  21.                 if($file_update_time <= $curent_timestamp){
  22.                         if(!unlink($file)) {die('Произошла ошибка при удалении файла.');}
  23.                         if(!imgCreator($file)) {die('Не удалось обновить картинку.');}
  24.                 }else{
  25.                         header("Content-type: image/png");
  26.                         require_once $file;
  27.         }
  28. }else{
  29.                 if(!imgCreator($file)) {die('Не удалось создать картинку.');};
  30. }
  31. ?>

Немного переработал логику. Спасибо за критику=)
(Добавление)


Линк ведет в никуда.

(Отредактировано автором: 18 Октября, 2011 - 17:32:55)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
snikers987
Отправлено: 19 Октября, 2011 - 19:30:36
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




ТС ты хоть бы отписался чтоль.


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
android
Отправлено: 20 Октября, 2011 - 13:41:02
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Да забыл я, занят был.

->Заходим site.ru/ims-идсервиса.png->смотрим есть ли такая картинка:
Да: -> Берем ее из папки cache
Нет: -> Генерируем новую картинку и заносим в папку cache
->При повторном заходе на ту же картинку через 3 часа (site.ru/ims-идсервиса.png) мы ее обновляем т.е заного генерируем картинку и перезаписываем ее в папке cache

написано же было: Генерируем новую картинку
 
 Top
morosit
Отправлено: 20 Октября, 2011 - 14:12:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Июль 2010  
Откуда: Казахстан


Помог: 4 раз(а)





snikers987 пишет:
Линк ведет в никуда.
поменяите кодировку на УТФ-8 и попробуите снова

(Отредактировано автором: 20 Октября, 2011 - 14:13:29)

 
 Top
snikers987
Отправлено: 20 Октября, 2011 - 15:03:50
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




android пишет:
Да забыл я, занят был.

->Заходим site.ru/ims-идсервиса.png->смотрим есть ли такая картинка:
Да: -> Берем ее из папки cache
Нет: -> Генерируем новую картинку и заносим в папку cache
->При повторном заходе на ту же картинку через 3 часа (site.ru/ims-идсервиса.png) мы ее обновляем т.е заного генерируем картинку и перезаписываем ее в папке cache

написано же было: Генерируем новую картинку

так исправил ведь уже, выводит как надо. Че теперь не так то?


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
android
Отправлено: 22 Октября, 2011 - 23:28:13
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Ошибка...

Когда картинка сгенерировалась она показывается а когда страницу обнавляешь то не показывает (показывает рамку типа нет изображения или оно битое). Просмотрев без тега header вот ошибка:

Warning: Unexpected character in input: '' (ASCII=30) state=1 in /home/***/****/1/cache/ims-84700653.png on line 80

Parse error: syntax error, unexpected T_STRING in /home/***/****/1/cache/ims-84700653.png on line 80
 
 Top
snikers987
Отправлено: 23 Октября, 2011 - 03:04:12
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)





был не прав

(Отредактировано автором: 23 Октября, 2011 - 12:44:28)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB