Какое из file_get_contents
или curl
должно использоваться в PHP для запроса HTTP?
Если file_get_contents
выполнит эту работу, нужно ли использовать curl
? Использование curl
похоже, требует больше строк.
например:
свернуться:
$ch = curl_init('http://www.website.com/myfile.php'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $content); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec ($ch); curl_close ($ch);
file_get_contents:
$output = file_get_contents('http://www.website.com/myfile.php'.$content);
Прежде всего, у cURL есть много вариантов для установки. Вы действительно можете установить любой параметр, который вам нужен – многие поддерживаемые протоколы, файлы-добавления, файлы cookie, прокси и многое другое.
file_get_contents()
действительно просто ПОЛУЧИТ или ПОЧТОВЫЙ файл и имеет результат.
Однако: я попробовал некоторые API и сделал некоторые «бенчмаркинга»:
cURL было намного быстрее, чем file_get_contents
Просто попробуйте с вашим терминалом: time php curl.php
curl.php:
<?php $ch = curl_init(); $options = [ CURLOPT_SSL_VERIFYPEER => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => 'http://api.local/all' ]; curl_setopt_array($ch, $options); $data = json_decode(curl_exec($ch)); curl_close($ch);
fgc.php
<?php $data = json_decode(file_get_contents('http://api.local/all'));
Усредненный cURL в моем случае был в 3-10 раз быстрее, чем file_get_contents
. Api.local обрабатывался с кешированным файлом JSON – около 600 КБ.
Я не думаю, что это совпадение. Но вы не можете измерить это точно, потому что время сети и время ответа сильно различаются, основываясь на их текущем времени загрузки / сети / времени ответа и т. Д. (Локальные сети не изменятся эффект – там будет загрузка и трафик)
Но для некоторых случаев использования также может быть, что file_get_contents
на самом деле быстрее.
Curl
быстрее, чем File_get_contents
. Я просто немного поработал над этим.
Приобретение google.com с использованием file_get_contents заняло (в секундах):
2.31319094 2.30374217 2.21512604 3.30553889 2.30124092
CURL взял:
0.68719101 0.64675593 0.64326 0.81983113 0.63956594
Для вашей информации, завиток, вы можете позволить иметь больше опций и использовать метод GET / POST и отправлять параметры.
И у file_get_contents
будут меньше параметров для параметров GET / POST.
Надеюсь это поможет…