<span> 1</span> <span>php
</span><span> 2</span> <span>Class</span><span> TaobaoIPQuery2{
</span><span> 3</span> <span>
private
</span> <span>
static
</span> <span>
$_requestURL
</span> =
'http://ip.taobao.com/service/getIpInfo.php'
<span>;
</span><span> 4</span> <span>
public
</span> <span>
static
</span> <span>
function
</span> getIPInfo(<span>
$ip
</span><span>){
</span><span> 5</span> <span>
$long
</span> = <span>
ip2long
</span>(<span>
$ip
</span><span>);
</span><span> 6</span> <span>
if
</span>(<span>
$long
</span> === 0<span>){
</span><span> 7</span> <span>
throw
</span> <span>
new
</span> <span>Exception</span>(
'IP address error'
, 5<span>);
</span><span> 8</span> <span> }
</span><span> 9</span> <span>
$ip
</span>=<span>long2ip</span>(<span>
$long
</span><span>);
</span><span>10</span> <span>
$IPInfo
</span> = self::queryIPInfo(<span>
$ip
</span><span>);
</span><span>11</span> <span>
return
</span> self::parseJSON(<span>
$IPInfo
</span><span>);
</span><span>12</span> <span> }
</span><span>13</span>
<span>14</span> <span>
private
</span> <span>
static
</span> <span>
function
</span> queryIPInfo(<span>
$ip
</span><span>){
</span><span>15</span> <span>
$query
</span> = <span>http_build_query</span>(<span>
array
</span>(
'ip'
=><span>
$ip
</span><span>));
</span><span>16</span> <span>
$ch
</span> =<span> curl_init();
</span><span>17</span> <span>
$options
</span> = <span>
array
</span><span>(
</span><span>18</span> CURLOPT_URL => <span>sprintf</span>(
'%s?%s'
, self::<span>
$_requestURL
</span>, <span>
$query
</span>),
<span>19</span> CURLOPT_RETURNTRANSFER => <span>true</span>,
<span>20</span> CURLOPT_AUTOREFERER => <span>false</span>,
<span>21</span> CURLOPT_FOLLOWLOCATION => <span>false</span>,
<span>22</span> CURLOPT_HEADER => <span>false</span>,
<span>23</span> CURLOPT_TIMEOUT => 3.0,
<span>24</span> <span> );
</span><span>25</span> curl_setopt_array(<span>
$ch
</span>, <span>
$options
</span><span>);
</span><span>26</span> <span>
$content
</span> = curl_exec(<span>
$ch
</span><span>);
</span><span>27</span> curl_close(<span>
$ch
</span><span>);
</span><span>28</span> <span>
return
</span> <span>
$content
</span><span>;
</span><span>29</span> <span> }
</span><span>30</span>
<span>31</span> <span>
private
</span> <span>
static
</span> <span>
function
</span> parseJSON(<span>
$json
</span><span>){
</span><span>32</span> <span>
$O
</span> = json_decode (<span>
$json
</span>, <span>true</span><span>);
</span><span>33</span> <span>
if
</span>(<span>false</span> === <span>
is_null
</span>(<span>
$O
</span><span>)){
</span><span>34</span> <span>
return
</span> <span>
$O
</span><span>;
</span><span>35</span> <span> }
</span><span>36</span> <span>
if
</span> (<span>version_compare</span>(<span>PHP_VERSION</span>,
'5.3.0'
,
'>='
<span>)) {
</span><span>37</span> <span>
$errorCode
</span> =<span> json_last_error();
</span><span>38</span> <span>
if
</span>(<span>isset</span>(self::<span>
$_JSONParseError
</span>[<span>
$errorCode
</span><span>])){
</span><span>39</span> <span>
throw
</span> <span>
new
</span> <span>Exception</span>(self::<span>
$_JSONParseError
</span>[<span>
$errorCode
</span>], 5<span>);
</span><span>40</span> <span> }
</span><span>41</span> <span> }
</span><span>42</span> <span>
throw
</span> <span>
new
</span> <span>Exception</span>(
'JSON parse error'
, 5<span>);
</span><span>43</span> <span> }
</span><span>44</span> <span>
</span>
<span>45</span> <span>
private
</span> <span>
static
</span> <span>
$_JSONParseError
</span> = <span>
array
</span><span>(
</span><span>46</span> JSON_ERROR_NONE=>
'No error has occurred'
,
<span>47</span> JSON_ERROR_DEPTH=>
'The maximum stack depth has been exceeded'
,
<span>48</span> JSON_ERROR_CTRL_CHAR=>
'Control character error, possibly incorrectly encoded'
,
<span>49</span> JSON_ERROR_STATE_MISMATCH=>
'Invalid or malformed JSON'
,
<span>50</span> JSON_ERROR_SYNTAX=>
'Syntax error'
,
<span>51</span> JSON_ERROR_UTF8=>
'Malformed UTF-8 characters, possibly incorrectly encoded'
,
<span>52</span> <span> );
</span><span>53</span> }