- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Доброго времени суток, уважаемые форумчане.
У меня возникла проблема следующего характера:
Вчера ночью перенес форум на движке 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-файл.
Заранее благодарен за любую помощь.
Мы сейчас немного туго соображаем, но
$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 не отдает).
если бы так было то были бы ошибки.
Ошибки выдает ? что в еррор логе ?
Возможно проблема в этом - if($rez<=1255)
Попробуйте посмотреть, что имено пишется в temp.html при исполнении скрипта, возможно дело в том что на уровне сокетов вы получаете chunked ответ, попробуйте не использовать сокеты, а уровень повыше, тот же fopen, и проверяйте корректность ответа не размером полученного файла, а наличием в нем стороки "pnlNotFound"................................
Мы сейчас немного туго соображаем, но
Если туго соображаете, зачем писать? Кто-то ведь верит.
^\s - это, если не ошибаемся, любой не пробельный символ.
Вот это [^\s], а еще вот это \S любой непробельный символ, а это /^\s+/ - пробелы в начале строки.
а во что может превратить iconv этот %20 - загадка великая есть
Он ее заменит на %20.
Т.С., попробуйте для начала включить отображение ошибок
ini_set("display_errors", 1);Пока могу предположить, что права на запись для файла temp.html не выставили.error_reporting(E_ALL);
Пока могу предположить, что права на запись для файла temp.html не выставили.
Вот ведь я бот 😂 Вчера часов 7 ковырялся, ходил вокруг да около, в том числе и права доступа смотрел, только про temp.html даже мысль не мелькнула :(
Спасибо вам большое за помощь и спасибо всем откликнувшимся 🙄