【发布时间】:2011-07-08 14:48:57
【问题描述】:
是否可以检查网站 (php) 是在本地运行还是在托管服务器上运行?
如果网站在本地运行,我想启用一些日志,并且我不希望这些日志在线出现在网站上..
我可以设置一个变量$local=1;,但我必须在上传之前对其进行更改.. 有没有办法自动执行此任务?
本地服务器:WampServer 2.0 / Apache 网络服务器:Apache
【问题讨论】:
是否可以检查网站 (php) 是在本地运行还是在托管服务器上运行?
如果网站在本地运行,我想启用一些日志,并且我不希望这些日志在线出现在网站上..
我可以设置一个变量$local=1;,但我必须在上传之前对其进行更改.. 有没有办法自动执行此任务?
本地服务器:WampServer 2.0 / Apache 网络服务器:Apache
【问题讨论】:
检查$_SERVER['REMOTE_ADDR']=='127.0.0.1'。只有在本地运行时才会如此。请注意,这也意味着服务器本地。因此,如果您在服务器上运行任何脚本向您的 PHP 页面发出请求,它们也将满足此条件。
【讨论】:
$local = $_SERVER['REMOTE_ADDR']=='127.0.0.1' ? 1 : 0; 是我用的 :)
127.0.0.1 可能不是您服务器的 IP 地址。请务必将上面的 IP 替换为您服务器的实际 IP。
$local = ($_SERVER['REMOTE_ADDR']=='127.0.0.1' || '::1') 或类似名称。如果您的本地环境使用不同的主机名,例如 mysite.local 等,您也可以使用 HTTP_HOST 值。
我认为最好的方法是“伪造”测试模式,这可以通过在本地环境中创建文件来完成。
当我使用这种方法时,我创建了一个名为 testing.txt 的空文本文件,然后使用以下代码:
if (file_exists('testing.txt')) {
// then we are local or on a test environment
} else {
// we are in production!
}
此方法与任何操作系统 100% 兼容,如果您需要更精细的方法(例如 development.txt、testing.txt、staging.txt 或 production.txt),您可以使用多个测试文件以自定义您的部署过程。
【讨论】:
您应该自动部署
这不是您问题的直接答案,但在我看来是更好的方法。在自动化部署过程中,设置像 $local = true 这样的变量,就像其他配置值(例如您的 db-connection)一样,不会是手动的、容易出错的任务。
在我看来,检查“本地性”是错误的方式:您不想向每个本地访问者显示您的日志(代理可能是其中之一),但仅在部署在测试环境中时 .
一种流行的自动化部署工具是Capistrano,应该也有以 PHP 为中心的工具。
【讨论】:
127.0.0.1(或 IPV6 的 ::1)。 (当然,除非您自己在同一台服务器上运行代理;)
$whitelist = array(
'127.0.0.1',
'::1'
);
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
// not valid
}
【讨论】:
以防万一这对任何人都有用,我做了这个功能,因为上面的答案并没有真正做到我想要的:
function is_local() {
if($_SERVER['HTTP_HOST'] == 'localhost'
|| substr($_SERVER['HTTP_HOST'],0,3) == '10.'
|| substr($_SERVER['HTTP_HOST'],0,7) == '192.168') return true;
return false;
}
【讨论】:
$_SERVER['SERVER_ADDR']
我已经构建了这个函数来检查当前服务器名称是否有名称服务器记录,通常本地服务器没有。
<?php
function isLocal ()
{
return !checkdnsrr($_SERVER['SERVER_NAME'], 'NS');
}
?>
【讨论】:
您的远程服务器不太可能有 C 盘!所以我用这个运行:
//Local detection
$root = $_SERVER["DOCUMENT_ROOT"];
$parts = explode("/",$root);
$base = $parts[0];
$local = false;
if ($base == "C:") {
$local = true; //Change later for if local
}
【讨论】: