php 使用GEOIP服务获取语言代码(此代码使用WPEngine和freegeoipnet作为后备。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 使用GEOIP服务获取语言代码(此代码使用WPEngine和freegeoipnet作为后备。相关的知识,希望对你有一定的参考价值。

<?php
namespace mkdo\geoip_langauge_code;
/**
 * Class LangaugeCode
 *
 * Gets the LanguageCode
 *
 * @package mkdo\geoip_langauge_code
 */
class LanguageCode {

	private $ip;
	private $language_code;

	/**
	 * Constructor
	 */
	function __construct() {
	}

	/**
	 * Do Work
	 */
	public function run() {
		add_action( 'init', array( $this, 'set_ip' ) );
		add_action( 'init', array( $this, 'set_language_code' ) );
	}

	/**
	 * Set the IP address
	 */
	public function set_ip() {

		if ( ! empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) ) {
		    $this->ip = $_SERVER[ 'HTTP_CLIENT_IP' ];
		} elseif ( ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) ) {
		    $this->ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
		} else {
		    $this->ip = $_SERVER['REMOTE_ADDR'];
		}
	}

	/**
	 * Get the IP address
	 * @return string IP Address
	 */
	public function get_ip() {
		return $this->ip;
	}

	/**
	 * Set the langauge code
	 */
	public function set_language_code() {

		$this->language_code = getenv( 'HTTP_GEOIP_COUNTRY_CODE' );

		if ( empty( $this->language_code ) ) {
			$this->language_code = $this->get_freegeoipnet_language_code();
		}

		if ( empty( $this->language_code ) ) {
			$this->language_code = 'NA';
		}
	}

	/**
	 * Get the langauge code
	 * @return string langauge code
	 */
	public function get_language_code() {
		return $this->language_code;
	}

	/**
	 * Get the freegeoip.net langauge code
	 * @return string langauge code
	 */
	public function get_freegeoipnet_language_code() {

		$json        = '';
		$code        = '';
		$url         = 'http://freegeoip.net';
		$format      = 'json';
		$request     = $url . '/' . $format . '/' . $this->ip;
		$curl_handle = curl_init();
		curl_setopt( $curl_handle, CURLOPT_URL, $request );
		curl_setopt( $curl_handle, CURLOPT_CONNECTTIMEOUT, 2 );
		curl_setopt( $curl_handle, CURLOPT_RETURNTRANSFER, 1 );
		$json = curl_exec( $curl_handle );
		curl_close( $curl_handle );
		$result  = json_decode( $json );

		if ( isset( $result->country_code ) ) {
			$code = $result->country_code;
		}
		return $code;
	}
}

以上是关于php 使用GEOIP服务获取语言代码(此代码使用WPEngine和freegeoipnet作为后备。的主要内容,如果未能解决你的问题,请参考以下文章

为什么geoip不适合我

PHP - 打印 GeoIP 数组

使用 PHP 从保存在本地的 GeoIP 数据库中获取数据

如何在共享服务器上配置 GeoIP?

“此网页有一个重定向循环”(使用 GeoIP 重定向网站)

使用 maxmind geoip2 呼出城市名称