Повышение производительности за счет наличия глобального массива или файла для всех посетителей?

#php #xml #arrays

#php #xml #массивы

Вопрос:

В моем приложении у меня есть две страницы. Индекс и движок. В Index в основном используются скрипты jQuery, и основными двумя из них являются функции автоматической загрузки для engine.php файл, который происходит каждые 3 минуты, а другой — кнопка «показать еще», которая показывает еще 10 сообщений при нажатии.

 $feeds = array('','');
$entries = array();
foreach ($feeds as $feed) {
$xml = simplexml_load_file($feed);
$entries = array_merge($entries, $xml->xpath('/rss/channel//item'));
}
  

То, что я ищу, — это способ отделить $feeds = array('',''); часть, загруженную с engine.php каждые 3 минуты или щелчком мыши.

Каковы ваши предложения по этому поводу?

Ответ №1:

Я не уверен, что понимаю ваш вопрос, но глобальные переменные определяются в php, если они определены вне всех функций. Чтобы использовать их внутри, вы должны ссылаться на него так, прежде чем использовать его:

 $variable = ""; //this variable is global
function test(){
   global $variable;

   //now you can use your variable
}
  

Если вы имели в виду, что значение вашей переменной должно сохраняться между запросами, то я бы посоветовал вам использовать массив $ _SESSION (ссылка).

Если это не ответит на ваш вопрос, дайте мне знать.

Редактировать для обновленного ответа

Вам придется каким-то образом сохранить массив $feeds. Я думаю, что самым простым способом было бы использовать сеанс, но это не сделает массив доступным для всех пользователей, как вы упомянули. Поэтому я бы посоветовал вам сохранить список каналов в файле, чтобы вы могли получать доступ к одной и той же информации каждый раз для всех пользователей.

Делая это, вы можете создать новый скрипт, который будет обновлять файл всякий раз, когда вы захотите (т.е. каждые 10 минут), и engine.php придется только работать непосредственно с файлом.

Вам нужна конкретная помощь с кодом для этого предлагаемого решения? Помогает ли это вам решить вашу проблему?

Правка2

Чтобы сохранить ваш массив $feeds в файл, просто выполните следующие действия (я думаю, эту часть вы уже знаете):

 $fp = fopen("feeds.txt", "a");
if($fp) {
   foreach($feeds as $line) {
      fwrite($fp, $line."n");
   }
   fclose($fp);
}
  

И чтобы загрузить тот же файл, вы можете сделать это:

 $feeds = file("feeds.txt"); //This will load each  line into a different position of the array $feeds.
  

Если вы хотите сериализовать массив $entries, я бы посоветовал взглянуть на функции serialize amp; unserialize

Комментарии:

1. На самом деле я попробовал некоторый код, который я нашел, который сохраняет массив в файле. Я поместил его после первого foreach , но в нем говорится, что он не может сериализовать массив SimpleXML. Любая помощь в этом кодировании была бы признательна.

2. пожалуйста, опубликуйте то, что у вас есть на данный момент.

3. С другой стороны, не следует ли мне сохранить его как XML-файл?

4. Зависит от того, что вы хотите .. иногда XML может быть слишком подробным и добавлять ненужные накладные расходы в ваш код.

5. Я думаю, я хочу сохранить его как массив, таким образом, мне не придется менять весь свой код