Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 哪一种是按国家重定向用户的最佳可扩展方式?_Php_Linux_.htaccess_Redirect_Country - Fatal编程技术网

Php 哪一种是按国家重定向用户的最佳可扩展方式?

Php 哪一种是按国家重定向用户的最佳可扩展方式?,php,linux,.htaccess,redirect,country,Php,Linux,.htaccess,Redirect,Country,我有一个网站,几个月后会有来自不同国家的流量, 但这取决于我应该展示哪个国家的网站 目前我正在使用免费的maxmind GeoIp重定向流量, 使用php 但我认为,如果一天有4万个独立用户,一天大约有10万个请求,这将非常缓慢 我曾考虑使用.htaccess进行此操作,但我认为请求时间将需要更长一点 我现在的最后一个想法是根据不同的国家在不同的文件夹(或子域)中建立网站的html主页,如us.website.com,并将用户重定向到那里,但我不知道哪种方式对用户体验最快 服务器是LAMP(我可

我有一个网站,几个月后会有来自不同国家的流量, 但这取决于我应该展示哪个国家的网站

目前我正在使用免费的maxmind GeoIp重定向流量, 使用php

但我认为,如果一天有4万个独立用户,一天大约有10万个请求,这将非常缓慢

我曾考虑使用.htaccess进行此操作,但我认为请求时间将需要更长一点

我现在的最后一个想法是根据不同的国家在不同的文件夹(或子域)中建立网站的html主页,如us.website.com,并将用户重定向到那里,但我不知道哪种方式对用户体验最快

服务器是LAMP(我可以选择发行版)

请帮我决定!!
谢谢你所做的一切

从PHP访问下载的MaxMind GeoIP国家/地区数据库(免费或付费,没有区别)时速度非常快(即使他们的PHP代码没有经过优化-很明显,它是从优秀的C代码翻译过来的)

只需在您的计算机上计时(例如,通过两次调用
microtime(true)
和一个真实的数据集的差异),您可能会发现您可以在代码顶部访问GeoIP数据库,以便在需要时切换到特定于国家/地区的代码

下一步是使用国家代码cookie。如果用户已经拥有cookie,则使用该cookie切换到特定于国家/地区的代码,否则访问GeoIP DB以确定国家/地区代码,设置cookie,并按常规切换(即使用户不接受cookie也有效)。将其设置为会话cookie,用户可能会旅行。如果您有一些页面缓存,请小心:它不能忽略国家代码cookie

您的问题提到一个重定向,它可能是特定于国家的
标题('Location:…'),但您可能不需要它,因为它会使事情变得更加复杂,并增加您的流量。

好吧, 我觉得你太担心了,但让我解释一下:

  • IP->country是一个哈希表,所以我希望很快就能解决您的查询
  • 这是一个静态信息,一旦解析就可以缓存
  • 100k页面视图和40k用户意味着每2.5个页面视图中有1个用户,“短”导航历史(我稍后解释)
  • 对于这种情况,我建议:

  • 使用PHP查询数据库(将代码放在执行的“头”中),并将国家/地区存储/缓存在cookie中,并为请求提供服务。一个简单的if(空($COOKIE['country'])将允许理解是否查询数据库
  • 避免重定向到其他站点(us.domain.com),每个用户将传递2.5到3.5个请求(大约多40%)
  • 当站点需要更多资源时,您可以添加更多的云资源,或者添加一台具有相同地址(www.domain.com)但具有新IP的新机器进行DNS循环,在导航历史较短的情况下运行良好 PS


    如果您要群集$\u,会话共享将是真正的挑战,因此您可以从现在开始查看会话管理器

    为不同国家/地区提供不同站点的原因是什么?这只是语言吗?如果是这样,则可以在标题中找到,不需要查找。此外,如果你使用他们推荐的方法,MaxMind的数据库也不会太慢。这是因为网站上的广告、链接和一些专门为每个国家定制的信息=)啊,是的,你肯定会想做IP检测。我建议你继续使用你的免费数据库。他们有一个国家版本,更轻。但这将是足够快的流量10万或100万的要求?你没有太多的选择。它的速度取决于您的服务器配置。幸运的是,它是非常可伸缩的,因为数据几乎是静态的。MaxMind的GeoIP DB不是哈希表,它是一个Ehm,我并不是说GeoIP DB的真正实现是一个哈希表,而是说数据本身“是”一个哈希表,所以我认为实际实现的性能与哈希表实现相差不远,也许你的意思是数据本身就是一个映射。不过,该映射作为前缀树(即trie)实现比作为哈希表实现要好得多。对不起,我坚持使用术语,只是我认为对事物使用正确的名称很重要(一般而言)。顺便说一句,我应该纠正我的第一个评论:我应该写“哈希表”,而不是“哈希”…不,你说得对,术语真的很重要。我根本不在乎GeoIP数据库中的算法是什么(我的错),因为Saikios别无选择,他必须为每个用户查询数据库一次,所以这是一个我们可以忘记的问题,当然,如果我们缓存结果;)