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

Реферальная программа Мегаплана

Партнерская программа Kredov

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

#51 Kismedia

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

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

Я редко работаю с файлами, потому всех тонкостей не знаю... вот здесь пишется о некоторых проблемах при использовании ф-ции fopen() и протокола http://. Возможно в этом у тебя проблема - попробуй прописать относительный путь к файлу.


Так вот не могу относительный прописать, тогда вообще ошибки.

Так $file = 'cache.txt'; // в этот файл будем писать
и так $file = '/wp-content/themes/katalog/cache.txt'; // в этот файл будем писать

Не получается, "Невозможно записать в файл"
  • 0

#52 Kismedia

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

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

Ну смотри в файл пишет но только это:

led-info.ru-
led-info.ru-

Нет $titles, вот он и начинает писать заново.
  • 0

#53 matroskin8

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

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

Это потому, что изначально в скрипте неверно выбран разделитель УРЛа и титла - выбрано тире, а оно довольно часто встречается в титлах и УРЛах, например, как в УРЛе led-info.ru скрипт сравнивает led-info.ru с просто led, не находит совпадения и пишет в файл повторно ну и т.д. Надо просто сменить разделитель на такой, который вряд ли встретится в переменных, в этих 2 строках:

$res = explode(":::::", $str); // разбиваем строки на элементы
...
if(fwrite($handle, $urlsape. ":::::" .$titles. "\r\n") === false)

Тогда с этими url будет все ок - в файл будет попадать это:

led-info.ru:::::А тута идет его титл

Так вот не могу относительный прописать, тогда вообще ошибки.

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


#54 Kismedia

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

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

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


Мне нужно вызвать его и отправить переменную, поэтому делал функцией.

как подключить его и отпраить значение $urlsape?
  • 0

#55 Kismedia

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

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

С таким типом титла "Как добиться настоящих естественных ссылок? | Блог Добряка" тоже проблемы.
Видимо из-за символа " | " ?
  • 0

#56 Kismedia

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

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

matroskin8, я наверное уже тебя достал окончательно своей этой затеей.
Номер кошелька вышли ;) , а с этим поробую сам разобраться, не горит, решение уже по сути есть. ;)
Потом напишу результат.
  • 0

#57 matroskin8

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

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

С таким типом титла "Как добиться настоящих естественных ссылок? | Блог Добряка" тоже проблемы.
Видимо из-за символа " | " ?

Странно, только что у себя проверил - у меня нормально титл этого блога пишется... этот символ здесь не при чем - пока не встретится выбранный разделитель элемент будет заноситься в переменную.

matroskin8, я наверное уже тебя достал окончательно своей этой затеей.
Номер кошелька вышли

да нет, не достал - мне самому интересно ;)
а про кошелек забудь - это не настолько серьезная работа, чтобы ее оплачивать.
  • 0


#58 Kismedia

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

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

Ну значит буду должен, вплане обращайся если что, прогер из меня конечно никакой, но по другим воросам кое что знаю. :)


  • 0

#59 matroskin8

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

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

Окейно, буду иметь в виду ;)
Если еще нужно, то чуть позжее выложу нужный скрипт, который 100% должен работать везде (при условии правильных путей) и корректно работает с кодировками.
По проблеме, мне кажется, что yury был прав по поводу невозможности записи по протоколу http... поэтому все же лучше на всякий случай писать относительные пути.
Новый скрипт доведу до ума и выложу.


  • 0


#60 matroskin8

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

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

Еще раз рекомендую идти от простого к сложному. Этот код 100% рабочий. Соответственно, для начала можно вставить его как есть и проверить его работоспособность (скрипт и файл лежат в одном каталоге). Если все ок, то тогда уже можно пробовать по необходимости вносить изменения - типа: переносить куски кода в функции, изменять пути и т.д. Так будет гораздо проще отлавливать ошибки, потому как точно будет известна причина.
Функцию перекодирования из utf-8 в windows-1251 нашел в сети.
Код:
<?php

$urlsape = 'http://google.com.ua'; // цель
$titles = ''; // сюда попадет распарсенный титл
$file = 'cache.txt'; // в этот файл будем писать

// перекодируем из utf-8 в windows-1251
function utf8_cp1251($sString){
$aCode = array ("\xD0\xB0"=>"а", "\xD0\x90"=>"А", "\xD0\xB1"=>"б", "\xD0\x91"=>"Б", "\xD0\xB2"=>"в", "\xD0\x92"=>"В", "\xD0\xB3"=>"г", "\xD0\x93"=>"Г", "\xD0\xB4"=>"д", "\xD0\x94"=>"Д", "\xD0\xB5"=>"е", "\xD0\x95"=>"Е", "\xD1\x91"=>"ё", "\xD0\x81"=>"Ё", "\xD0\xB6"=>"ж", "\xD0\x96"=>"Ж", "\xD0\xB7"=>"з", "\xD0\x97"=>"З", "\xD0\xB8"=>"и", "\xD0\x98"=>"И", "\xD0\xB9"=>"й", "\xD0\x99"=>"Й", "\xD0\xBA"=>"к", "\xD0\x9A"=>"К", "\xD0\xBB"=>"л", "\xD0\x9B"=>"Л", "\xD0\xBC"=>"м", "\xD0\x9C"=>"М", "\xD0\xBD"=>"н", "\xD0\x9D"=>"Н", "\xD0\xBE"=>"о", "\xD0\x9E"=>"О", "\xD0\xBF"=>"п", "\xD0\x9F"=>"П", "\xD1\x80"=>"р", "\xD0\xA0"=>"Р", "\xD1\x81"=>"с", "\xD0\xA1"=>"С", "\xD1\x82"=>"т", "\xD0\xA2"=>"Т", "\xD1\x83"=>"у", "\xD0\xA3"=>"У", "\xD1\x84"=>"ф", "\xD0\xA4"=>"Ф", "\xD1\x85"=>"х", "\xD0\xA5"=>"Х", "\xD1\x86"=>"ц", "\xD0\xA6"=>"Ц", "\xD1\x87"=>"ч", "\xD0\xA7"=>"Ч", "\xD1\x88"=>"ш", "\xD0\xA8"=>"Ш", "\xD1\x89"=>"щ", "\xD0\xA9"=>"Щ", "\xD1\x8A"=>"ъ", "\xD0\xAA"=>"Ъ", "\xD1\x8B"=>"ы", "\xD0\xAB"=>"Ы", "\xD1\x8C"=>"ь", "\xD0\xAC"=>"Ь", "\xD1\x8D"=>"э", "\xD0\xAD"=>"Э", "\xD1\x8E"=>"ю", "\xD0\xAE"=>"Ю", "\xD1\x8F"=>"я", "\xD0\xAF"=>"Я");
return strtr($sString, $aCode);
}

// считываем файл в массив
$read = file($file);
// пробегаемся по массиву в цикле
foreach($read as $str){
$res = explode("=", $str); // разбиваем строки на элементы
if($res[0] == $urlsape) $result = $res[1]; // если совпадает УРЛ ($urlsape), то заносим в переменную титл УРЛа
}

//если в переменную ничего не попало - значит в файле нет такого УРЛа... запишем его
if(empty($result)){
/* парсер начало*/
//открываем страницу
@$read = fopen($urlsape, "r");
if (!$read){
echo "Страница не открывается";
exit;
}else{
//содержимое страницы
$content = "";
//читаем страницу до конца
while (!feof($read)){
$content .= fgets($read, 100);
}
//закрываем страницу
fclose($read);
//ищем <title>...</title>
if (preg_match("#<title>(.*)</title>#si", $content, $match)){
//преобразуем в 1251
$titles = utf8_cp1251($match[1]);
}else $titles = "Нет заголовка";
}
/* парсер конец */

/* записываем в файл то, что напарсили */
$handle = fopen($file, "a"); //открываем файл для записи в конец
if(fwrite($handle, $urlsape. "=" .$titles. "\r\n") === false){
echo "Невозможно записать в файл";
exit;
}else{
echo "Записано. Можно обновить страницу, чтобы вывелся записанный титл";
fclose($handle);
}
}else echo $result; //иначе просто выведем то, что попало в результирующую переменную
?>

Протестировал на следующих сайтах (результат из файла):
http://led-info.ru=LED Info - Светодиодные технологии освещения (лампы,линейки,модули,светильники,иллюминация,прожекторы и блоки питания).Интернет-магазин,Купить,цена в Нижнем Новгороде
http://mazurband.com=MAZUR BAND
http://yandex.ru=Яндекс
http://kismedia.ru=Нет заголовка
http://info-runet.ru=Инфо-Рунет - Общетематический каталог (Рунета) русскоязычных сайтов.Лучшие,популярные и проверенные сайты и блоги
http://artmobile.ua=Artmobile - ремонт мобильных телефонов. Запчасти и комплектующие для мобильных телефонов
http://masterwebs.ru=SEO форум вебмастеров
http://dobryak-blog.ru=Блог Добряка | заработок в интернете
http://google.com.ua=Google

  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


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