Проблема с PHP юзербаром ( функции GB)

Tortan

Новичок
Проблема с PHP юзербаром ( функции GB)

Все здрасьте. Возникла такая проблема.
Скрипт работает на хостинге, отображается нормально. на форуме отображается, но показывает последнюю информацию полученную при его вызове на хостинге. как я понял, получаеться при вызове его через рефер он вообще не выполняется и выдает последнюю сгенерированную картинку. зато весело: когда обновляешь его на хостинге сразу же картинка обновляется на форуме. где ошибка?


PHP:
<?php  
$trans_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];  
$hour=date("H"); 
$hourpl=8; 
$hour=$hour+$hourpl; 
if($hour==24) {$hour=00;} 
elseif($hour>=24) {$hour-24;} 
$time = date("d.m.Y  ". $hour." : i"); 
$o_system = eregi(windows,$_SERVER['HTTP_USER_AGENT']); 
if($o_system==1){ 
$os = "OS: Windows"; 
} else { 
$os = "OS: Linux"; 
} 
$otherinf = getenv("HTTP_USER_AGENT"); 
$browser = getenv("HTTP_USER_AGENT"); 
$browser = substr($browser, 0, 11); 
$browser = "Browser: $browser"; 
$ref = getenv('HTTP_REFERER');  
if(!$ref) 
{$reftext = "From : Default URL.";} 
else 
{$reftext = "From: ".$ref;} 
$member = "Your data is kept. "; 
$ip = $_SERVER['REMOTE_ADDR']; 
header("content-type: image/gif");  
$im = imagecreatefromgif("userbar.gif");  
$color = imagecolorallocate($im, 0, 0, 0);  
$mf = imageloadfont('fonts/Capture_it.ttf'); 
imagettftext($im, 12, 2, 198, 22, $color, "fonts/Capture_it.ttf", "I P : ".$ip);  
imagettftext($im, 11, -5, 65, 33, $color, "fonts/Capture_it.ttf", $browser); 
imagettftext($im, 11, 1, 117, 68, $color, "fonts/Capture_it.ttf", $member); 
imagettftext($im, 11, 0, 260, 42, $color, "fonts/Capture_it.ttf", $os); 
imagettftext($im, 11, -1, 265, 68, $color, "fonts/Capture_it.ttf", $time); 
imagegif($im); 
imagedestroy($im); 
?> 


.htaccess 

<Files ~ "\.gif$"> 
AddType application/x-httpd-php .gif 
</Files>
 

x-yuri

Новичок
каким обфускатором пользуешься?

-~{}~ 25.12.08 13:52:

а, так уже немного лучше

$hour-24; - так и задумано?

-~{}~ 25.12.08 13:57:

$o_system = eregi(windows,$_SERVER['HTTP_USER_AGENT']);
плохая привычка, пиши лучше 'windows'

-~{}~ 25.12.08 13:58:

а форум не на хостинге находится?
 

Tortan

Новичок
-~{}~ 25.12.08 13:52: а, так уже немного лучше
в каком смысле?
$hour-24; - так и задумано?
ошибочка, потом исправлю. но она не влияет на саму генерацию, только на отображение времени.

PHP:
а форум не на хостинге находится?
нет форум на другом сайте. пробовал просто вставить тегом в страницу тоже на другом сайте, такая же проблема.
 

x-yuri

Новичок
если я правильно тебя понял, отображается только тот gif, который в файловой системе хранится
а у тебя этот скрипт в файле с расширением gif хранится?

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

-~{}~ 25.12.08 14:05:

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

-~{}~ 25.12.08 14:05:

тебе в скрипт какие-нибудь заголовки надо вставить против кэширования
 

Tortan

Новичок
Автор оригинала: x-yuri
если я правильно тебя понял, отображается только тот gif, который в файловой системе хранится
а у тебя этот скрипт в файле с расширением gif хранится?
нет. отображается gif, который был сгенерирован последним вызовом скрипта на хостинге прямой ссылкой. да я проиндексировал гиф, чтоб сервер его как пхп понимал. но делал и так

RewriteEngine On
RewriteRule userbar.gif userbar.php

я думаю апач при повторном обращении, говорит, что не изменился файл, ведь так и есть а как только ты его меняешь, апач запускает скрипт один раз а потом то же самое
а почему же, когда я открываю его на хостинге он выполняется нормально?

тебе в скрипт какие-нибудь заголовки надо вставить против кэширования
нет дело не в этом. тут другая лажа...
 

x-yuri

Новичок
вставь в скрипт
PHP:
trigger_error( getenv('HTTP_REFERER') )
узнаешь, запускается он с другого сайта или нет
 

Tortan

Новичок
Автор оригинала: x-yuri
вставь в скрипт
PHP:
trigger_error( getenv('HTTP_REFERER') )
узнаешь, запускается он с другого сайта или нет
ну и че, результат=1 ? с другого сайта также грузит последнюю картинку.
 

x-yuri

Новичок
что значит 1? там URL должен быть в логах
так вот появляется в логах URL внешних сайтов?
 

Tortan

Новичок
Автор оригинала: x-yuri
что значит 1? там URL должен быть в логах
так вот появляется в логах URL внешних сайтов?
я же сказал, что при загрузке с хостинга пишет 1 , а с другого сайта также грузит последнюю картинку сгенирированную на хостинге, в логах ниче нет. скрипт вообще не выполняется через рефер.
 

x-yuri

Новичок
а реферер при чем? у тебя получается, что скрипт запускается только при обращении с хостинга, с других сайтов - нет

-~{}~ 25.12.08 18:59:

я попробовал у себя: работает как через сайт, так и с другого сайта, в логе пишет URL, а не единицы какие-то

-~{}~ 25.12.08 19:01:

это имхо какое-то кеширование, посмотри в access_log есть там обращение к этому gif с других сайтов? или каким-нибудь http-дебаггером посмотри, запрашивается этот gif при заходе на внешний сайт
 

Tortan

Новичок
Автор оригинала: x-yuri
а реферер при чем? у тебя получается, что скрипт запускается только при обращении с хостинга, с других сайтов - нет

-~{}~ 25.12.08 18:59:

я попробовал у себя: работает как через сайт, так и с другого сайта, в логе пишет URL, а не единицы какие-то

-~{}~ 25.12.08 19:01:

это имхо какое-то кеширование, посмотри в access_log есть там обращение к этому gif с других сайтов? или каким-нибудь http-дебаггером посмотри, запрашивается этот gif при заходе на внешний сайт
в логах писало 1 из-за этой функции trigger_error. а так у меня тоже писало юрл. а где ты у себя пробовал? че за хостинг? почитал щас чуть инфу, походу и правда кэширование, только как его обойти или отрубить... как я в acess_log на хостинге войду??? http-дебаггером, можно попробовать.
 

x-yuri

Новичок
в логах писало 1 из-за этой функции trigger_error.
странно, trigger_error пишет строку в лог

как я в acess_log на хостинге войду???
на разных хостингах по-разном, на некоторых можно через ftp, на некоторых через панель управления хостингом

http-дебаггером, можно попробовать
я думаю с этого стоит начать

ты у себя пробовал? че за хостинг?
один сайт - adamant, второй - моя машина
 

Tortan

Новичок
Автор оригинала: x-yuri
странно, trigger_error пишет строку в лог


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


я думаю с этого стоит начать


один сайт - adamant, второй - моя машина
вообщем попробовал запустить этот скрипт у себя на машине (че я раньше этого не сделал), работает нормально и на машине и на форумах и при вставках в страницу. теперь ясно, что дело в хостинге. спасибо за помощь. возможно и правда хостинг сам кэширует файлы.
 

x-yuri

Новичок
так ты скажи, кто именно у тебя кэширует этот image (воспользуйся http-дебаггером) и какие с ним заголовки приходят

-~{}~ 26.12.08 15:13:

хотя бы последнее
но появляется ли он в логе-сервера и делается ли запрос изображения браузером тоже интересно

-~{}~ 26.12.08 15:21:

но вообще тебе должно помочь
PHP:
header('Cache-Control: no-cache');
 

Tortan

Новичок
Автор оригинала: x-yuri
так ты скажи, кто именно у тебя кэширует этот image (воспользуйся http-дебаггером) и какие с ним заголовки приходят

-~{}~ 26.12.08 15:13:

хотя бы последнее
но появляется ли он в логе-сервера и делается ли запрос изображения браузером тоже интересно

-~{}~ 26.12.08 15:21:

но вообще тебе должно помочь
PHP:
header('Cache-Control: no-cache');
header не мпомог. не стал я проверять дебаггером, на другой хостинг перешел вроде работает нормально, только "fopen" не работает почему-то скорей всего отключена. ну ладно главное сам юзербар пашет. потом еще попробую разобраться. возник вопрос. я в php новичек( ну это видно))). возник вопрос. тот же самый скрипт. как проще сделать, чтоб с каждым днем на переменную шел накрут допустим с 1 до 5 потом и также заного??
например:
сегодня
$dinday=1
завтра
$dinday=2
и т.д. до определенного числа и заного.
 

x-yuri

Новичок
только "fopen" не работает почему-то скорей всего отключена
ты можешь это выяснить
PHP:
ini_get('disable_functions');
-~{}~ 27.12.08 16:03:

как проще сделать, чтоб с каждым днем на переменную шел накрут допустим с 1 до 5 потом и также заного??
насколько я тебя понял
PHP:
$seconds_passed = time() - strtotime('2008-12-27');
$days_passed = floor( $seconds_passed / (60*60*24) );
$dinday = ($days_passed % 5) + 1;
-~{}~ 27.12.08 16:04:

или можешь в качестве отсчета взять Unix Epoch (January 1 1970 00:00:00 GMT), тогда
PHP:
$days_passed = floor( time() / (60*60*24) ); 
$dinday = ($days_passed % 5) + 1;
 

Tortan

Новичок
Спасибо. это то что нужно. можно еще вопрос, допустим есть определенная дата. как сделать отсчет времени с этой даты. дни я сделал, а надо чтоб было: Лет, месяцев, дней.

PHP:
$last = "2008-01-09"; 
$now = time(); 
$res = $now - strtotime($last); 
$days = 0; 
while ( $res >= 86400 ) { 
   $days++; 
   $res -= 86400;
}
 

x-yuri

Новичок
ты б что-ли топики создавал отдельные

по поводу дней - можно сделать проще, посмотри предыдущий пример

-~{}~ 30.12.08 19:33:

по поводу месяцев и лет
PHP:
$now = time();
$diff = $now - strtotime( '2008-01-09' );
$years = strftime( '%Y', $diff ) - 1970;
$monthes = strftime( '%m', $diff )-1 + $years*12;
-~{}~ 30.12.08 19:36:

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

-~{}~ 30.12.08 20:14:

а переход на летнее время не учитывается и в предыдущих примерах)))

-~{}~ 30.12.08 20:34:

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

-~{}~ 30.12.08 22:12:

дням, в смысле
 
Сверху