是否可以检查网站(php)是在本地运行还是在托管服务器上运行?
如果网站在本地运行,我想启用一些日志,我不希望这些日志在网站上出现。
我可以设置一个变量$local=1;
,但我必须在上传之前更改它..无论如何都要自动执行此任务?
本地服务器:WampServer 2.0 / Apache WebServer:Apache
答案 0 :(得分:15)
检查$_SERVER['REMOTE_ADDR']=='127.0.0.1'
。只有在本地运行时才会出现这种情况。请注意,这也意味着服务器本地。因此,如果您在服务器上运行任何向PHP页面发出请求的脚本,它们也将满足这一条件。
答案 1 :(得分:2)
您应该自动部署
这不是你问题的直接答案,但在我看来更好的方法。在自动部署过程中,像其他配置值(例如您的数据库连接)一样设置像$local = true
这样的变量,不会出现手动,容易出错的任务。
在我看来,检查'localness'是错误的方式:您不希望向每个本地访问者显示您的日志(代理可能是一个),但在测试环境中部署时
自动部署的一个流行工具是Capistrano,也应该有以PHP为中心的工具。
答案 2 :(得分:2)
为了防止这对任何人都有用,我做了这个功能,因为上面的答案没有真正做我想要的:
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;
}
答案 3 :(得分:2)
我相信最好的方法是“伪造”测试模式,可以通过在本地环境中创建文件来实现。
使用这种方法时,我创建了一个名为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
或{ {1}})以自定义您的部署过程。
答案 4 :(得分:0)
我已经构建了这个函数来检查当前服务器名称是否有名称服务器记录,通常是本地服务器没有。
<?php
function isLocal ()
{
return !checkdnsrr($_SERVER['SERVER_NAME'], 'NS');
}
?>
答案 5 :(得分:0)
$whitelist = array(
'127.0.0.1',
'::1'
);
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
// not valid
}
答案 6 :(得分:0)
您的远程服务器不太可能有 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
}