Php 其中';脚本在哪里?本地主机还是在服务器上?

Php 其中';脚本在哪里?本地主机还是在服务器上?,php,localhost,Php,Localhost,像许多程序员一样,我有一个服务器,在那里我托管脚本,还有一个本地主机,我在那里制作脚本。PHP中是否有一种安全的方法可以让脚本分辨它们之间的区别?服务器名称可以工作,但可以被注入,因此不安全。有人有解决办法吗?(最好是非静态解决方案)我倾向于检查$\u SERVER['SERVER\u ADDR']的IP,或者只需要一个配置设置来指示哪个是哪个。通常在Apache中,每个都会为其定义一组特定的主机名和别名。这是您将从$\u服务器['HTTP\u HOST']检索的名称,本质上是来自HOST:HT

像许多程序员一样,我有一个服务器,在那里我托管脚本,还有一个本地主机,我在那里制作脚本。PHP中是否有一种安全的方法可以让脚本分辨它们之间的区别?服务器名称可以工作,但可以被注入,因此不安全。有人有解决办法吗?(最好是非静态解决方案)

我倾向于检查
$\u SERVER['SERVER\u ADDR']
的IP,或者只需要一个配置设置来指示哪个是哪个。

通常在Apache中,每个都会为其定义一组特定的主机名和别名。这是您将从$\u服务器['HTTP\u HOST']检索的名称,本质上是来自HOST:HTTP头的数据

您可能需要进一步检查的唯一时间是当您的vhost是默认vhost,因此字段请求与主机vhost不关联的域,或者您的vhost使用通配符作为or。

您可以使用它返回当前主机的名称,并使用它来决定您所处的环境,但与简单地在配置文件中定义环境相比,这并没有多大好处。每次安装只需执行一次

我个人发现,最简单的方法是将
环境
符号定义为
“开发”
“测试”
,或
“生产”
,在配置文件中,该文件被排除在版本控制之外。我将该文件包括在项目的某些部分中,然后断言已定义了
环境
符号。如果我签出了项目的副本,但忘记了创建配置文件或指定其中的环境,那么程序将失败

您可以将这些方法结合起来,根据主机名定义
环境。

这对我很有用

if ($_SERVER['HTTP_HOST'] == 'localhost')
{
   // it is  local host
}

在www之外的某处创建一个文件。如果(文件_存在(“您的文件路径”)


给它起个奇怪的名字。在c:\if-ur-on-windows或/usr/home/if-u-on-linux

中,因为我的开发和生产路径总是不同的,所以我通常倾向于根据一组可能的值检查
dirname(\uu文件)


根据我最终使用的值,将加载正确的配置文件。

HTTP\U主机由浏览器发送。我说的是一个安全的解决方案!HTTP头不安全;)@凯文:这只是事实的一半。如果我发送了一个完全不正确的
HTTP\u主机
,Apache将(不应该)为正确的虚拟主机提供服务。当您自己不托管Apache时,您不应该信任它。谁知道配置是如何设置的?但是如果您不控制服务器,为什么您会相信它?请重新阅读问题。此解决方案不安全,因为用户可以更改HTTP_主机值。我认为您是服务器的唯一访问权限。我认为这是一个共享的托管环境。我会使用一个配置文件来实现这一点,在同步本地和远程主机时,可以忽略此配置文件。我会a)不给它一个奇怪的名称,B)不将其放在项目之外。您只是不必要地混淆了事情。Web服务器和您的本地主机之间的区别在于,Web服务器上没有安装任何游戏(例如)、硬件以及Web服务器上不需要的任何其他数据(您的个人文件)因此,创建一些个人文件是一个好主意,当它存在时,这意味着ur在本地主机中,否则就意味着它在服务器上,没有人可以在服务器上创建这样的文件,特别是当它位于apache或其他服务无法访问的只读文件夹中时。如果有人可以创建文件,就意味着他可以访问服务器,就意味着安全性消失了!