Ускорение запросов fopen к другим сайтам. кэширование, cron

mxup

Новичок
Здравствуйте. Имеется прайс лист, который находится на одном сайте. Этот прайс лист открывается на других сайтах (подгружается) с помощью функции fopen() вот так:
На сайте site2 в ячейке с ценами которой выполняются функции
PHP:
<?php
    $f = fopen("http://site1.ru/цена_холодильника.php", "r");
    echo fgets($f);
    fclose($f);
?>
<?php
    $f = fopen("http://site1.ru/цена_стула.php", "r");
    echo fgets($f);
    fclose($f);
?>
<?php
    $f = fopen("http://site1.ru/цена_двигателя.php", "r");
    echo fgets($f);
    fclose($f);
?>
....
Соответственно на одной странице происходит много таких вызовов. и с разный сайтов (site3, site4, site5)
Прайс-лист небольшой, обновляется раз в месяц максимум.

Хотелось бы спросить как это влияет на скорость загрузки страницы? Насколько критично?
Ну и хотелось бы спросить (если эта функция может критично сказаться на скорости загрузки страницы) - как сделать, чтобы или обойти её, или как нибудь закешировать данные получаемые этой функцией. Первое что пришло в голову, это на каждом сайте запускать Cron, который бы скачивал весь прайс лист (ну например раз в день) и уже функция fopen брала эти данный локально с каждого сайта. То есть чтобы она не обращалась каждый раз с сайтов site2, site3, site4 к сайту site1.
Или может вместо этой функции использовать какую то другую?
В общем, просьба подсказать. Важна скорость генерации страницы.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Идиотизм в чистом, неприкрытом виде. Надо такие вещи синхронизировать раз в ххх часов/минут, по необходимости и выбирать нужные данных уже с локальной базы.
 

Breeze

goshogun
Команда форума
Партнер клуба
Хотелось бы спросить как это влияет на скорость загрузки страницы? Насколько критично?
Напрямую каждый раз запрашивать -- очень критично. Если сайт1 затупит или ляжет, все остальные перестанут работать.

Скачивай файл раз в сутки, но, если ты с ним потом проводишь какие-то операции (разбираешь xml в массив, например), выполняй их тоже и сохраняй итоговый результат, который потом используй вживую и только на чтение.
Как простой пример без базы данных, для иллюстрации алгоритма:

1. скачал price1.xml в price1.xml
2. разобрал price1.xml в массив и сохранил через var_export в price1_processed.php.tmp
3. сделал rename price1_processed.php.tmp price1_processed.php
4. инклудишь только локальный price1_processed.php

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