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

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

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

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

#31 Kismedia

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

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

А, т.е., в файле будет не одна строка, а несколько + организовать надо дозапись. Ок, попробуем немного переписать.


Ну да, правильно. ;)
Ну как бы суть всей затеи:
Парсим значения титл и записываем в файл построчно, потом что бы не повторять парсинг по новой, берем значения из cache.txt

Мне показалось что это понятно из первого поста.
Извиняюсь за неточно поставленную задачу. ;) плюс с меня на пиво! ;)
  • 0

#32 matroskin8

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

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

Так работает ;)
<?php

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

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

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

  • 0


#33 Kismedia

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

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

Ну вот так, полный код получается:

function parstitle ($urlsape){

$file = '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('http://' .$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');
}
if ($titles = "301 Moved Permanently") {
$html_content = @file_get_contents('http://www.' .$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');
}
}
echo $titles;
}else echo "Данные не доступны";
$handle = fopen($file, "a"); //открываем файл для записи в конец
if(fwrite($handle, $urlsape. "-" .$titles. "\r\n") === false){
echo "Невозможно записать в файл";
exit;
}else{
echo "Записано";
fclose($handle);
}
}else echo $result; //иначе просто выведем то, что попало в результирующую переменную
}


Не знаю, но файл пустой а на выходе постоянно ,допустим если парсим "masterwebs.ru":

SEO форум вебмастеровЗаписано

То есть получается все время идет запись так как в cache.txt ничего нет но и записи тоже нет.
Путь к cache.txt стоит правильный, ошибок не выдает.
  • 0

#34 matroskin8

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

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

Закомментировал те строки, из-за которых лезут ошибки и 29 строку с выводом . Файл cache.txt у меня лежит в одном каталоге со скриптом. Изначально сам файл пуст. После запуска скрипта мне выдан результат - Записано - после обновления страницы получил результат - SEO форум вебмастеров.
Код:
<?php
function parstitle ($urlsape){

$file = '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('http://' .$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');
} */
if ($titles = "301 Moved Permanently") {
$html_content = @file_get_contents('http://www.' .$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');
} */
}
//echo $titles;
}else echo "Данные не доступны";
$handle = fopen($file, "a"); //открываем файл для записи в конец
if(fwrite($handle, $urlsape. "-" .$titles. "\r\n") === false){
echo "Невозможно записать в файл";
exit;
}else{
echo "Записано";
fclose($handle);
}
}else echo $result; //иначе просто выведем то, что попало в результирующую переменную
}
$urlsape = 'masterwebs.ru';
parstitle ($urlsape);

?>

  • 0


#35 Kismedia

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

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

Странно, у меня просто "Записано" и все, при обновлении опять "Записано"
Ошибок нет, но и файл пустой.

Ну сейчас еще посмотрю,значит "косяк" с моей стороны, если у Вас все работает.

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


  • 0

#36 Kismedia

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

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

Вообщем записал в cache.txt сам принудительно следующие:
masterwebs.ru-SEO форум вебмастеров

Все отлично, на выходе "SEO форум вебмастеров", то есть файл он читает и путь верный.

Пробую парсить kismedia.ru=$urlsape на выходе опять постоянное "записано" и ничего не записано. ;)

Права стоят 777, может "косяк" на хостинге? ;)

В любом случае, не смею Вас больше напрягать, дальше сам разберусь.

Огромнейшие спасибо! ;)

Отправьте, пожалуйста мне в личку номер Вашего R кошелька. ;)
  • 0

#37 matroskin8

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

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

А может все же с путями что-то не так? Выложил тот же скрипт - можно немного поэкспериментировать... только не сильно, поскольку там проверок нет совсем (хотя можно и сильно... хостинг то - бесплатный )))). Также не очень долго, как закончишь - отпишись, я уберу.
Да, и не нужно на "Вы"... все же форум предполагает демократичное общение ;)

P.S. Да, кстати, только сейчас заметил эту строку:

Пробую парсить kismedia.ru=$urlsape

Правильно передавать аргумент ф-ции так:
parstitle ($urlsape='google.com.ua');

  • 0


#38 Kismedia

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

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

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

Если он читает, то значит путь верный, он один для всех операций.

Строку поправил. У меня вообще так

parstitle ('kismedia.ru');


  • 0

#39 matroskin8

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

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

А на локальной машине работает?
  • 0


#40 Kismedia

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

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

Сейчас не смогу проверить, я на работе. :unsure:

Если у тебя работает, значит все правильно.


  • 0

robot

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


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