PHP:file_get_contents太慢了

时间:2018-03-15 10:36:45

标签: php

我试图使用ip-api.com/php 但我的服务器响应非常慢,我发现这是因为file_get_contents

基本上,我有一个非常简单的脚本(我认为是从github获得的)

function get_ip() {
        //Just get the headers if we can or else use the SERVER global
        if ( function_exists( 'apache_request_headers' ) ) {
            $headers = apache_request_headers();
        } else {
            $headers = $_SERVER;
        }
        //Get the forwarded IP if it exists
        if ( array_key_exists( 'X-Forwarded-For', $headers ) && filter_var( $headers['X-Forwarded-For'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
            $the_ip = $headers['X-Forwarded-For'];
        } elseif ( array_key_exists( 'HTTP_X_FORWARDED_FOR', $headers ) && filter_var( $headers['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 )
        ) {
            $the_ip = $headers['HTTP_X_FORWARDED_FOR'];
        } else {

            $the_ip = filter_var( $_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 );
        }
        return $the_ip;
    }

$ip=get_ip();


$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));

说到

$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));

冻结约1分钟。

2 个答案:

答案 0 :(得分:3)

如果您阅读了他们的API,您会看到:

  

不推荐使用JSON。几乎所有PHP站点现在都支持json_decode(),   它比unserialize()

更快

引用为here

在那里你也会找到如何用Json做一个你可以利用的例子来说明你的观点:

  

要以JSON格式接收响应,请向

发送GET请求      

http://ip-api.com/json

     

您可以提供要查找的IP地址或域,或者无需使用您的IP地址或域   当前的IP地址。

引用为here

答案 1 :(得分:0)

根据我的经验,http://ip-api.com/json没有响应服务器,这需要花费很多时间。当我从本地主机打电话时,它工作正常。

现在我正在使用https://freegeoip.app/json/,默认情况下每小时允许最多15,000个查询。