PHP4 vs PHP5 или в чем проблема?

Light Phantom
На сайте с 17.03.2007
Offline
188
1012

Доброго времени суток, уважаемые форумчане.

У меня возникла проблема следующего характера:

Вчера ночью перенес форум на движке phpbb от одного хостера к другому. Вылезли после этого некоторые косяки, которые я сиправил, но вот один косяк все же остался. У меня к форме регистрации дописан скрипт, который проверяет вводимый вользователем ник на другом сервере. Если там есть пользователь с таким ником, то регистрация завершается, если такого пользователя нет -выдает ошибку "'Ваш логин не зарегистрирован в игре". Таким незамысловатым способом я защитил форум от ботов и "левых" пользователей. На старом хостинге все работало корректно, а на новом почему-то стало на любой ник выдавать сообщение "'Ваш логин не зарегистрирован в игре", то есть зарегистрироваться стало не возможно. Перепроверил уже все что можно и единственная версия осталось - это то, что на старом хосте был PHP4, а на новом PHP5. Ниже приведена основная часть скрипта проверки вводимого ника. Посмотрите плиз, кто хорошо разбирается, быть может здесь есть какая-то функция, которая работает только в PHP4 или еще какие-то версии как исправить проблему.

   $username = preg_replace('/^\s+/', '%20', $username); 

$urlmn = 'http://darkagesworld.com/vr/common/FighterInfo.aspx?username='.UrlEncode (iconv("windows-1251","UTF-8",$username));
$purl = parse_url($urlmn);
$fp = fsockopen($purl['host'],80);
$d=fopen("temp.html","w+");
if ($fp){
fwrite($fp,"GET $urlmn HTTP/1.0\nHost: {$purl['host']}\n\n");
while(!feof($fp)) fwrite($d,fgets($fp));
fclose($fp);
}
fclose($d);
$s=fopen("temp.html","r+");
$ar=fread($s,100000);
$rez=strlen($ar);

fclose($s);

if($rez<=1255)
{

$error = TRUE;

$error_msg .= ( ( isset($error_msg) ) ? 'Ваш логин не зарегистрирован в игре<br />' : '' ) . $lang['Fields_empty'];


}

В приаттаченом файле находится весь php-файл.

Заранее благодарен за любую помощь.

zip usercp_register.zip
edogs software
На сайте с 15.12.2005
Offline
775
#1

Мы сейчас немного туго соображаем, но

$username = preg_replace('/^\s+/', '%20', $username);

^\s - это, если не ошибаемся, любой не пробельный символ. А Вы его в этой строке заменяете на %20. Уберите оттуда ^ и попробуйте снова.

Хотя мы бы убрали вообще эту строчку с заменой, от нас её смысл ускользает - всё равно при запросе Вы делаете urlencode, т.е. всё равно заменяете, а во что может превратить iconv этот %20 - загадка великая есть.

Плюс если уж заменять пробел, то

$username=str_replace(' ','%20',$username);

т.к. регулярка может зависеть от локали, и если локаль выставлена неверно ( php.net/setlocale ), то подумать на вполне честную русскую букву что она пробел есть и соответственно заменить.

Хотя если это работало на php4, то значит причина не в этом.

Вообще в коде ничего php4 vs php5 не видим. Поэтому скорее всего проблема либо с записью файла (проверить возможность записи в temp.html и посмотреть пишеться ли туда что-либо), либо со скачкой его с другого сервера (может на новом хостинге запрещено это или сервер онлайн-игрушки данных на его IP не отдает).

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
КМ
На сайте с 08.03.2007
Offline
66
#2
Посмотрите плиз, кто хорошо разбирается, быть может здесь есть какая-то функция, которая работает только в PHP4 или еще какие-то версии как исправить проблему.

если бы так было то были бы ошибки.

Ошибки выдает ? что в еррор логе ?

T
На сайте с 11.07.2007
Offline
43
#3

Возможно проблема в этом - if($rez<=1255)

Попробуйте посмотреть, что имено пишется в temp.html при исполнении скрипта, возможно дело в том что на уровне сокетов вы получаете chunked ответ, попробуйте не использовать сокеты, а уровень повыше, тот же fopen, и проверяйте корректность ответа не размером полученного файла, а наличием в нем стороки "pnlNotFound"................................

Kolyaj
На сайте с 28.03.2006
Offline
69
#4
edogs:
Мы сейчас немного туго соображаем, но

Если туго соображаете, зачем писать? Кто-то ведь верит.

edogs:
^\s - это, если не ошибаемся, любой не пробельный символ.

Вот это [^\s], а еще вот это \S любой непробельный символ, а это /^\s+/ - пробелы в начале строки.

edogs:
а во что может превратить iconv этот %20 - загадка великая есть

Он ее заменит на %20.

Т.С., попробуйте для начала включить отображение ошибок

ini_set("display_errors", 1);
error_reporting(E_ALL);
Пока могу предположить, что права на запись для файла temp.html не выставили.
Light Phantom
На сайте с 17.03.2007
Offline
188
#5
Вообще в коде ничего php4 vs php5 не видим. Поэтому скорее всего проблема либо с записью файла (проверить возможность записи в temp.html и посмотреть пишеться ли туда что-либо)
Kolyaj:
Пока могу предположить, что права на запись для файла temp.html не выставили.

Вот ведь я бот 😂 Вчера часов 7 ковырялся, ходил вокруг да около, в том числе и права доступа смотрел, только про temp.html даже мысль не мелькнула :(

Спасибо вам большое за помощь и спасибо всем откликнувшимся 🙄

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