Перейти к содержимому

Сервис обмена электронных валют

Выбрать шаблон и создать сайт

Кэширование данных в .TXT файл (запись и вывод)

#71 Kismedia

Kismedia
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 0
0

Отправлено 19 Январь 2011 - 13:37

Косяк с кодировкой:

parstitle ("http://smsc.ru");


SMS-����� : ���-�������� �� ����� ����! - smsc, sms-����, smpp-������

Мне в utf8 выводить или записывать нужно. Сайт в utf8
  • 0

#72 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 19 Январь 2011 - 13:51

У меня все ок. Правда я на денвере тестирую - кодировка windows-1251. Поэтому функцией function utf8_cp1251() перекодирую из utf-8 в windows-1251. В предложенном скрипте это делается при записи в файл. Если у тебя кодировка UTF-8, то нужно, соответственно, перекодировать записываемые данные в этой кодировке... ну а выводится они уже будут в кодировке сайта.
  • 0


#73 Kismedia

Kismedia
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 0

Отправлено 19 Январь 2011 - 14:25

Опять "301 Moved Permanently" на некоторых сайтах пошел

http://masterwebs.ru=301 Moved Permanently

Не думал я что это будет так сложно и вылезит столько ньюансов.
  • 0

#74 Kismedia

Kismedia
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 0

Отправлено 19 Январь 2011 - 15:06

С кодировкой вроде разобрался, добавил опять в конец:

if (mb_check_encoding($result, 'Windows-1251') && !mb_check_encoding($result, 'UTF-8')){
$result = mb_convert_encoding($result, 'UTF-8', 'Windows-1251');
}
echo $result; //иначе просто выведем то, что попало в результирующую переменную
}


Остались только проблемы с masterwebs.ru ,парсит титл только так www.masterwebs.ru
  • 0

#75 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 19 Январь 2011 - 16:30

Остались только проблемы с masterwebs.ru ,парсит титл только так www.masterwebs.ru

А если без www, тогда что получаем? Потому что у меня все ок с этим адресом... так вроде и у тебя с ним было все нормально вчера.
  • 0


#76 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 19 Январь 2011 - 22:15

Kismedia, нужно соблюдать кодировку страницы и кодировку файла, в который мы записываем данные, одинаковой. Это так, к слову...

Остались только проблемы с masterwebs.ru ,парсит титл только так www.masterwebs.ru

У тебя каждый раз так выводится или через раз? На локалке работаешь?
  • 0

#77 Kismedia

Kismedia
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 0

Отправлено 19 Январь 2011 - 23:52

Вообщем как выяснилось, переменная $urlsape будет подаватся уже в правильной форме (либо с www, либо без) в функцию.
Следоваетельно момент с "301 Moved Permanently" уже не важен.
Сделал вообщем так, вернул свой старый парсер в код, кодировка меняестя перед записью в файл (если требуется), то есть все в UTF-8 (как советовал ZiTosS).
Вроде работает, все проверил, косяков нет.
Тестирую сразу на сервере.

Вообщем вот конечный скрипт:

function parstitle ($urlsape){

$file = $_SERVER['DOCUMENT_ROOT'].'/wp-content/themes/katalog/cache.txt'; // в этот файл будем писать
// считываем файл в массив
$read = file($file);
// пробегаемся по массиву в цикле
foreach($read as $str){
$res = explode("=", $str); // разбиваем строки на элементы
if($res[0] == $urlsape) $result = $res[1]; // если совпадает УРЛ ($urlsape), то заносим в переменную титл УРЛа
}
//если в переменную ничего не попало - значит в файле нет такого УРЛа... запишем его
if(empty($result)){
/* парсер начало*/
if($html_content = @file_get_contents($urlsape)){
preg_match_all( "|<title>(.*)</title>|sUSi", $html_content, $titles);
$titles = $titles[1][0];
if (mb_check_encoding($titles, 'Windows-1251') && !mb_check_encoding($titles, 'UTF-8')){
$titles = mb_convert_encoding($titles, 'UTF-8', 'Windows-1251');
}
}else echo "Данные не доступны";
/* парсер конец */
/* записываем в файл то, что напарсили */
$handle = fopen($file, "a"); //открываем файл для записи в конец
if(fwrite($handle, $urlsape. "=" .$titles. "\r\n") === false){
echo "Невозможно записать в файл";
exit;
}else{
echo "Записано. Можно обновить страницу, чтобы вывелся записанный титл";
fclose($handle);
}
}else
echo $result; //иначе просто выведем то, что попало в результирующую переменную
}


Всем большое спасибо! ;)
  • 0


Оформление форума – IPBSkins.ru