Быстрее fopen или file_get_contents?

Я запускаю несколько сайтов с высоким трафиком, как требование, все изображения загружаются через image.php?id=IMAGE_ID_HERE. Если вы когда-либо делали это раньше, вы знаете, что этот файл будет читать образ файла и повторять его в браузере со специальными заголовками.

Моя проблема в том, что загрузка на сервере очень высока (150-200), а команда TOP показывает несколько экземпляров image.php, поэтому image.php работает медленно!

проблема, вероятно, заключается в том, что fopen загружает изображение в память перед отправкой его клиенту. Как прочитать файл и передать его напрямую?

Спасибо, ребята,


UPDATE

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

Ответ 1

fopen и file_get_contents почти эквивалентны

чтобы ускорить согласованность загрузки страницы, которую вы можете использовать

http://www.php.net/fpassthru

или, даже лучше

http://www.php.net/readfile

с этими функциями, содержимое файла печатается напрямую, байт за байт

в отличие от file_get_contents, например, где вы храните все данные внутри переменной

$var = file_get_contents();

поэтому для правильной работы этих функций вам необходимо отключить буферизацию вывода (иначе это будет делать readfile() бессмысленным) на странице, которая обслуживает изображения

надеюсь, что это поможет!

Ответ 2

Почему вы не кэшируете содержимое изображения с помощью apc?

if(!apc_exists('img_'.$id)){
    apc_store('img_'.$id,file_get_content(...));
}

echo apc_fetch('img_'.$id);

Таким образом, содержимое изображения не будет считываться с вашего диска более одного раза.