三年前,有使用file_get_contents 获取大量数据时(zabbix)导致程序崩溃,排查原因的时候,发现是因为file_get_contents没有做超时限制,导致一些请求因为网络不稳定,卡死在那边。
中间查找资料,发现curl应该是更优选择,所以改用了curl。
1、fopen/file_get_contents 每次请求都会做DNS查询,并不对DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询的次数。所以CURL的性能比fopen /file_get_contents 好很多。
2、fopen/file_get_contents 在请求HTTP时,使用http_fopen_wrapper,不会keeplive。而curl却可以。这样在多次请求多个链接时,curl效率会好一些。
3、fopen/file_get_contents 函数收到php.ini文件中 allow_url_open选项配置的影响。如果该配置关了,那么这个函数将会失效.