如何在共享服务器上配置 GeoIP?
Posted
技术标签:
【中文标题】如何在共享服务器上配置 GeoIP?【英文标题】:How to configure GeoIP on a shared server? 【发布时间】:2014-09-26 14:56:26 【问题描述】:我想配置 GeoIP 以根据共享服务器中的国家 IP 地址将域重定向到子域。我创建了一个自定义php.ini
来导入geoip.so,然后在我的index.php
中添加了以下代码:
<?php
require_once('/home/fuiba/php.ini');
$gi = geoip_open('GeoIP.dat', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
geoip_close($gi);
$my_countries = 'fr';
if (strtolower($country) == $my_countries)
header('Location: fr.fuiba.org');
$my_countriessss = 'us';
if (strtolower($country) == $my_countriessss)
header('Location: en.fuiba.org');
?>
在浏览器中出现此错误:
extension=geoip.so
Fatal error: Call to undefined function geoip_open() in /home/fuiba/public_html/index.php on line 3
GeoIP 安装在服务器中。我在 info.php 上查看过:geoip version 1.0.8.
【问题讨论】:
【参考方案1】:你不能在 php 脚本中包含一个 php.ini,而且你不需要因为 phpinfo()
返回它已经安装。
为了使 GeoLite 正常工作,您需要做的是首先包含 geoip.inc
文件 include("include/geoip.inc");
如果您还没有它,可以在这里找到它: https://github.com/maxmind/geoip-api-php/blob/master/src/geoip.inc
<?php
include("include/geoip.inc");
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
geoip_close($gi);
$my_countries = 'fr';
if (strtolower($country) == $my_countries)
header('Location: fr.fuiba.org');
$my_countriessss = 'us';
if (strtolower($country) == $my_countriessss)
header('Location: en.fuiba.org');
?>
【讨论】:
谢谢艾萨克。我正在使用共享服务器,所以我不知道include/geoip.inc
的路径,我无法安装任何扩展或插件或更改服务器配置。我问了提供商,但他们建议我更改路径到 /home/fuiba/php.ini,因为他们不能给我路径 geoip.inc。
@Fuiba 就像我的帖子中指定的一样,您可以在此地址下载它github.com/maxmind/geoip-api-php/blob/master/src/geoip.inc 然后放入include/
文件夹或任何您想要的文件夹,不要忘记将正确的路径放入include
@ChrysUgwu $gi = geoip_open('GeoIP.dat', GEOIP_MEMORY_CACHE);
以上是关于如何在共享服务器上配置 GeoIP?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Joomla 作为服务器配置跨域资源共享 (CORS)?