Я загружаю favicons с помощью PHP, и я потратил некоторое время на устранение неполадок, прежде чем заметил, что curl_exec
работает на некоторых сайтах, а file_get_contents
- нет.
Например, вот ответ от http://www.hellmanns.com/favicon.ico
file_get_contents
Предупреждение: file_get_contents (http://hellmanns.com/favicon.ico): не удалось открыть поток: HTTP-запрос не удался! HTTP/1.0 403 Запрещено в /home/arcmarks/public_html/arcmarks/source/class.FaviconFinder.php в строке 44
curl_exec
h (e? C⬠^ ÏÉÌŒ $ B # (ÌlcYfƒy9C ¥ D; üès¨H8§ ¥ § <& 5é¨QÛœJ O5Öžfå§LíáÛÜ߸n ÜŒa ~ †}... l "'±" o} þþþ ¥ FHòòÞïïï/Á ± mžç¿ ~ L "-, y¾i'öá̳²¶ £ A%" §? Ù "" i² ~ Âh * ^? ÖáμÅÅ ØezU [¢ <4¡ -5;/ïÀöæØaéìÐÌ † cN,; U @Nã½ §Õðî ‰ Õ¨îѹk_jÖšmî'ÌáÜÝ [æ -ì · D¡? -s wE <# õ¹ "$ 0" 6 & ï²1Ú|Žž # "+ $ §HR ¢ @3 €, 3 @üÿÿþÿÿP: H € ô¯VüáBâ ? "J W ~ ± |ª † ôòóaQ ŸE7Ç | @F2? G2? Åóãäå¸ ~ Q p, KEv (Cud). # LUH4mkr $ gj [ahVf9 & 2Se/@ZLwPYiF0QOG? Y> QbJx + cIMDzW! -] * 't5B; < ^% T6 _XsR = ': n "A7831o N ÿÿÿÿÿÿÿÿ € Àÿÿÿÿÿÿÿÿ
curl_exec основан на и весь проект, который используется на многих языках, см. здесь:
Почему у файла file_get_contents() нет такого же доступа, как curl_exec()?
Следовательно, он имеет гораздо большую поддержку.
Ошибка ответа 403
указывает, что сервер отклонил запрос, сделанный file_get_contents.
Curl и file_get_contents не делают один и тот же HTTP-запрос.
Как минимум CURL будет использовать другой заголовок пользовательского агента.
В целом CURL превосходит и быстрее, чем использование file_get_contents для загрузки удаленных файлов.