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


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

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

#41 ZiTosS

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

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

Kismedia, Дискуссии-то развели. Давайте не будем ругаться.

И так... Попорядку.
1) На файлах осуществить сложнее чем с БД, т.к. с БД легко работать: запрашивать данные, заносить данные, осуществлять поиск. Запросы к базам данных осуществляются намного быстрее, чем к файлам, причём с файлами есть некоторые проблемы. Попробуйте единовременно с двух компов записать или прочитать данные из одного файла. У одного данная задача будет неудачной. Конечно это мелочь при малой загруженности, но когда у нас это кеш... и запросов много... ;)
2) Функция парсинга у вас использует библиотеку mb - работа с многобайтными строками, не на каждом хостинге есть, отсюда проблемы с ошибками. Так же в регулярках флагов наставили, без S не работает? Мне кажется некоторые лишние?!
3) Прежде чем записывать в файл стоило бы проверить, что выведется на экран при распечатке конвертированных данных.
4) Что делать с кодировками? Да взять нормальный конвертер на PHP, который имеет возможность определения кодировки и конверта строк. Например использовать i18n ConvertCharset класс и т.д. Либо юзать стандартный iconv, если либа установлена на хостинге.

Естественно, что подобные данные со сторонних сайтов лучше всего кешировать. Есть 2 варианта:
1) Кеширование по необходимости, нет в базе, заносим (но тут проблема с достоверностью)
2) Автоматическое кеширование с обновлением (используем CRON и подобные), второй вариант в помощь. запускаем каждый день в 24 ночи и спим спокойно, главное чтобы настройки не сбились.

Вообще это специфический у вас кеш получается. Обычно кешируют страницу в буфер, либо сгенерированные шаблоны в текстовые файлы, чтобы не нагружать систему обращениями и подобным. Ваш кеш подойдет для сайтов статистической тематики, к примеру когда очень много посетителей желающих узнать инфу о каком-либо ресурсе, не парсить же её каждый раз. Нету - парсим и кешируем. Есть - выводим.

Если уж очень нужен вариант с БД, напишите, как буду свободен, помогу.
  • 0

#42 Kismedia

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

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

Kismedia, Дискуссии-то развели. Давайте не будем ругаться.


Да, я согласен, погорячился. Действительно в теме получилось много лишнего текста и диалогов.

По-поводу вообще кэширования, я с Вами тоже согласен, с БД работать быстрее. Но раз уж тема называется "Кэширование данных в .TXT файл (запись и вывод)" , кстати этому можно было удилить внимание и диалогов было бы меньше, ну ладно, я сам виноват.
Так вот, раз тема называется так, то давайте уже обсудим этот вариант, я думаю информация тоже будет не лишней для пользователей и мне самому будет полезно это знать.

Дело в том что, конкретно для моего случая, кэширования в .TXT ,вполне хватит.
Кэш, данные не будут обновлятся вообще, ну может я сам очищу все раз в пол года. Титл не меняется так часто.
То есть несколько пользователей одновременно не будут писать, обновлять данные, только чтение.

А так, вообще спасибо за предложение и советы! ;)

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


А вот это сейчас попробую, только мне не понятно почему только у меня не работает.

Все проверил, и даже хотеру написал, стоят реально права на файл 777
  • 0

#43 matroskin8

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

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

Попробуй идти от простого к сложному. Возьми код из 32-го сообщения, текстовый файл положи в один каталог со скриптом и в переменных $urlsape и $titles задавай значения, чтобы проверить проходит ли запись в файл. Только желательно тестировать на локальной машине.
  • 0


#44 Kismedia

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

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

Залил файл, скрипт на сайт в ту же папку, где кэш, вызвал, все пишет и выводит! ;)

Так в чем же косяк?

Скрипт вызываю так, допустим,:

<?php
parstitle ('led-info.ru');
?>


Сама функция хранится в файле functions.php в директории там где и кэш.


  • 0

#45 matroskin8

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

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

Насколько я понял, раньше скрипт и файл лежали не в одной директории - и не работало, теперь ты положил их в одну директорию - и все заработало. Если я понял верно, то вывод очевиден и логичен - ошибка в путях. Сам аргумент в функцию передается правильно.
Кстати, по предыдущим постам, если скрипт выдает результат - Записано - значит он все же куда-то пишет. Скорее всего где-то на серваке создается файл и записывается в него, поэтому полазь по каталогам сервака и поищи этот файл, потому что так быть не может, что функция fwrite() возвращает истину, но в файле ничего нет, тогда она должа вернуть ложь.
  • 0


#46 Kismedia

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

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

А если значения $urlsape и $titles перед записью файла пустые?
Тоесть он как бы пишет ,не ругается но строки пустые.

Путь задан четко, не относительно:

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

  • 0

#47 matroskin8

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

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

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


  • 0


#48 Kismedia

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

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

Но как он может писать в другое меcто если:

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

Сейчас посмотрел cache.txt

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

Нет $titles
  • 0

#49 matroskin8

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

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

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


#50 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

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

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

мне кажется, что нельзя писать на сервер по протоколу http, иначе вам на сервер, чего только не напихают.
  • 0

robot

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


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