Intereting Posts
Как закончить ссылку активации в PHP? Как получить тот же результат с помощью Node.js и PHP-mcrypt с использованием шифрования TripleDES? Как сделать таблицу, подобную этой, с помощью FPDF с помощью PHP? Модуль Magento Fatal error: Class 'Mage_Cashondelivery_Helper_Data' не найден в \ xampp \ htdocs \ magento \ app \ Mage.php в строке 516 «Три способа» отношения «многие-ко-многим» с использованием Eloquent Объедините 2 массива в третий массив с непостоянными уникальными ключами из одного массива Уникальный уникальный трек Mailgun Неожиданный T_PAAMAYIM_NEKUDOTAYIM в PHP 5.2.x Неустранимая ошибка: допустимый размер памяти 67108864 байт исчерпан (пытался выделить 122880 байт) Linkedin разделяет URL-адреса / не анализирует открытый граф Повторяющиеся события в «nth» будни каждого месяца Использование одного и того же идентификатора сеанса в двух сценариях PHP одновременно Обновить элемент страницы после определенного времени Стратегии кэширования в MVC Framework? Типичные ошибки PHP

Самый простой способ кэшировать результаты запросов MySQL с помощью PHP?

Каждый раз, когда кто-то приземляется на моей странице list.php?id=xxxxx он запрашивает некоторые запросы MySQL, чтобы вернуть это:

 $ids = array(..,..,..); // not big array - not longer then 50 number records $thumbs = array(..,..,..); // not big array - not longer then 50 text records $artdesc = "some text not very long"; // text field 

Поскольку база данных, из которой я делаю запросы, довольно велика, я хотел бы кэшировать эти результаты в течение 24 часов в файле, например: xxxxx.php в xxxxx.php / cache /, поэтому я могу использовать его в include("xxxxx.php") если он присутствует. (или txt-файлы!? или любым другим способом)

Поскольку есть очень простые данные, я считаю, что это можно сделать, используя несколько строк PHP, и не нужно использовать memcached или другие профессиональные объекты.

Becasuse мой PHP очень ограниченный может кто-то просто разместить основные строки PHP (или код) для этой задачи?

Я действительно был бы очень благодарен!

Кэширование массива PHP довольно просто:

 file_put_contents($path, '<?php return '.var_export($my_array,true).';?>'); 

Затем вы можете прочитать его обратно:

 if (file_exists($path)) $my_array = include($path); 

Вы также можете посмотреть в ADOdb , который обеспечивает кэширование внутри.

Попробуйте использовать сериализацию;

Предположим, вы получаете свои данные в двух массивах $array1 и $array2 . Теперь вам нужно сохранить эти массивы в файле. Хранение строки (третья переменная в вашем вопросе) в файл легко, но для хранения массива вам нужно сначала преобразовать его в строку.

 $string_of_array1 = serialize( $array1 ); $string_of_array2 = serialize( $array2 ); 

Следующая проблема – это именование файлов кеша, чтобы вы могли легко проверить, доступен ли соответствующий массив в кеше. Лучший способ сделать это – создать хеш MD5 вашего запроса mysql и использовать его как имя файла кэша.

 $cache_dir = '/path/cache/'; $query1 = 'SELECT many , fields FROM first_table INNER JOIN another_table ...'; $cache1_filename = md5( $query1 ); if( file_exists( $cache_dir . $cache1_filename ) ) { if( filemtime( $cache_dir . $cache1_filename ) > ( time( ) - 60 * 60 * 24 ) ) { $array1 = unserialize( file_get_contents( $cache_dir . $cache1_filename ) ); } } if( !isset( $array1 ) ) { $array1 = run_mysql_query( $query1 ); file_put_contents( serialize( $array1 ) ); } 

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

В конце концов, вам нужно решить, как долго ваш кеш останется в силе. Для этого же запроса в таблице mysql могут быть изменены записи, которые могут привести к устареванию кеша файловой системы. Таким образом, вы не можете просто полагаться на уникальные имена файлов для уникальных запросов.

Важный:

  • Файлы старого кеша должны быть удалены. Возможно, вам придется написать процедуру, которая проверяет все файлы каталога и удаляет файлы старше n секунд.
  • Храните кеш-каталог вне веб-узла.

Просто напишите новый файл с именем $ _GET ['id'] и содержимым материала, который вы хотите кэшировать, и каждый раз проверяйте, существует ли этот файл, иначе создайте его. Что-то вроде этого:

 $id = $_GET['id'] if (file_exists('/a/dir/' . $id)) { $data = file_get_contents('/a/dir/' . $id); } else { //do mysql query, set data to result $handle = fopen('/a/dir/' . $id, 'w+'); fwrite($handle, $data); fclose($handle); }