эффективна ли память и данные PHP в file_get_contents? - PullRequest
4 голосов
/ 03 января 2012

Я делаю сервер push-уведомлений, который собирает определенные данные с внешней (сторонней) html-страницы, если я знаю, что необходимая информация находится в пределах первой, например. 5000 символов, будет ли PHP фактически использовать меньше памяти, если я укажу MAX_LENGTH? Или вся страница полностью загружена в память? Кроме того, загружена ли вся html-страница или разрывается ли соединение при достижении предела? (и, в свою очередь, экономия затрат на передачу данных)

$html = file_get_contents ("http://.....", false, null, -1, 5000);

спасибо.

Ответы [ 3 ]

2 голосов
/ 03 января 2012

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

"file_get_contents () - это предпочтительный способ считывания содержимого файла в строку. Он будет использовать методы отображения памяти, если они поддерживаются вашей ОС, для повышения производительности."

так что на самом деле он должен дать вам стимулы, которые вы ищете.

2 голосов
/ 03 января 2012

Да, это экономит память и пропускную способность ... Я также провел тест скорости (который не совсем уместен для этого вопроса, но полезен и предполагает, что он прекращает чтение потока) и тест памяти, чтобы просто,Я не запускал пиковый тест памяти, но по крайней мере ваша переменная $ html будет хранить меньше информации и сохранять там память.

Time to get ALL characters of remote page 10 times: 6.0368211269379
Time to get ALL characters of remote page 10 times: 6.0158920288086
Time to get ALL characters of remote page 10 times: 5.8945140838623
Time to get ALL characters of remote page 10 times: 8.867082118988
Time to get ALL characters of remote page 10 times: 5.7686760425568

Time to get first ten characters of page 10 times: 4.2118229866028
Time to get first ten characters of page 10 times: 4.5816869735718
Time to get first ten characters of page 10 times: 4.2146580219269
Time to get first ten characters of page 10 times: 4.1949119567871
Time to get first ten characters of page 10 times: 4.1788749694824

Memory Useage First 10 characters:40048
Memory Useage ALL characters:101064
2 голосов
/ 03 января 2012

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

...