/**

* ThinkSNS 版本,太过严密和可移植性,很多基本用不到,参考之

*/

echo '

';

echo PHP_SAPI,'
';//先查看web服务器和php之间的接口类型

//print_r($_SERVER);

define('IS_CGI',substr(PHP_SAPI, 0, 3)=='cgi' ? 1 : 0 );

if(IS_CGI) {

// CGI/FASTCGI模式下,(我没这个环境没有测试)

$_temp = explode('.php',$_SERVER["PHP_SELF"]);

define('_PHP_FILE_', rtrim(str_replace($_SERVER["HTTP_HOST"],'',$_temp[0].'.php'),'/'));

}else {

define('_PHP_FILE_', rtrim($_SERVER["SCRIPT_NAME"],'/'));

}

echo _PHP_FILE_,'
';

$_root = dirname(_PHP_FILE_);

define('__ROOT__', (($_root=='/' || $_root=='')?'':rtrim($_root,'/')));

echo __ROOT__,'
';

define('SITE_URL','http:'.'//'.strip_tags($_SERVER['HTTP_HOST']).__ROOT__);

echo SITE_URL,'
';

ThinkPHP的和ThinkSNS的大同小异,但是要简洁一些,感觉完全够用了

define('IS_CGI',substr(PHP_SAPI, 0,3)=='cgi' ? 1 : 0 );

defined('APP_NAME') or define('APP_NAME', basename(dirname($_SERVER['SCRIPT_FILENAME'])));

if(!defined('_PHP_FILE_')) {

if(IS_CGI) {

//CGI/FASTCGI模式下

$_temp = explode('.php',$_SERVER['PHP_SELF']);

define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/'));

}else {

define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'],'/'));

}

}

if(!defined('__ROOT__')) {

// 网站URL根目录

if( strtoupper(APP_NAME) == strtoupper(basename(dirname(_PHP_FILE_))) ) {

$_root = dirname(dirname(_PHP_FILE_));

}else {

$_root = dirname(_PHP_FILE_);

}

define('__ROOT__', (($_root=='/' || $_root=='')?'':$_root));

}

ThinkSNS和ThinkPHP他们定义SITE_URL的时候都做了足够的兼容,很多环境我预测不到,我只是写一个满足自己能使用的SITE_URL即可。

我做的实际测试:

//虚拟主机名为test.com

define('SITE_URL', 'http:'.'//'.$_SERVER['HTTP_HOST'].dirname($_SERVER["SCRIPT_NAME"]));

echo SITE_URL;

如果该脚本是项目根目录下的文件,执行该脚本,得到的结果为http://test.com/

如果该脚本在项目根目录下的子目录bbs下面,执行该脚本,得到的结果为http://test.com/bbb,而这种情况非常常见,比如我们要在一个网站的子目录下面安装一个论坛。

我做了如下增强,想必应对一般的小项目,这个配置应该是够用了吧!

$_root = dirname(rtrim($_SERVER["SCRIPT_NAME"],'/'));

define('SITE_URL', 'http:'.'//'.$_SERVER['HTTP_HOST'].(($_root == '/')?'':$_root));

base href= php,如何正确定义项目下的base href(页面中所有相对链接的基准URL)...相关推荐

  1. 【Android游戏开发二十七】讲解游戏开发与项目下的hdpi 、mdpi与ldpi资源文件夹以及游戏高清版本的设置...

    今天一个开发者问到我为什么游戏开发要删除项目下的hdpi.mdpi和ldpi文件夹:下面详细给大家解答一下: 首先童鞋们如果看过我写的<[Android游戏开发二十一]Android os设备谎 ...

  2. idea查看java文件编码_Intellij Idea编译项目下的.java文件时的编码问题

    由<编译.java文件时的编码问题>可知,在编译.java文件的时候,需要正确指定一个编码方案,该编码方案用于解码.java文件的字节流. 那么在使用Intellij Idea编译(假定使 ...

  3. vue项目下props传进去的数据,生命周期勾子函数包括watch不触发的解决办法

    vue项目下props传进去的数据,生命周期勾子函数包括watch不触发的解决办法 @TOC 遇到的问题 在深层props过程中,props的数据传到了目标文件 但却没有触发数据更新及页面更新: wa ...

  4. Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包

    转载: http://xyly624.blog.51cto.com/842520/865630/ Maven项目下HttpServletRequest 或 HttpServletResponse需引用 ...

  5. maven项目下tomcat直接启动不了(LifecycleException)。报错如下截图

    经查,tomcat项目下的lib中没有jar包,发布的时候没有将jar包发布上去.这个问题在我的博客中以前遇到过.如何将maven的jar发布到项目中,我的博客里面有记载 转载于:https://ww ...

  6. scala学习-12-scala读取java项目下Src目录下的properties文件

    1.概述 scala读取java项目下Src目录下的properties文件 package scalaimport java.util.Properties import java.io.FileI ...

  7. Web项目下的WebRoot和WebContent

    Web项目发布到Tomcat中. 在Eclipse中生成项目是WebContent目录 而在MyEclipse中生成的项目目录名字好像叫做WebRoot,那么如果把MyEclipse的项目导入到Ecl ...

  8. MyEclipse打不开项目下的jsp文件,或是打开jsp文件报错!

    MyEclipse打不开项目下的jsp文件,或是打开jsp文件报错! 解决:出现此问题的根本原因是因为MyEclipse编译器默认的打开jsp文件的方式不对! 下面是设置MyEclipse打开jsp的 ...

  9. 徐磊语法 6 7 时态的正确定义

    时态的正确定义 时:指时间状语 态:动作和时间状语之间的关系 决定态 (在前面,在后面) 在时间状语这一刻,动作已经是什么样子的.也就是跟时间状语的关系. 先通过时,确定时间状语的某一点,在通过态,告 ...

最新文章

  1. java main 方法不能执行,AndroidStudio无法执行Java的main函数
  2. 删除html中所有的脚本,从HTML内容中删除脚本标记
  3. 设计sample语言的语法_Verilog语法之〇:Verilog HDL简介
  4. 山大824计算机基础,山东大学2020年考研824计算机基础考试大纲
  5. xx闪购—搜索框和iconfont
  6. next主题美化——背景图片、页面透明化、阴影、圆角、动画
  7. excel打开html非常慢,打开excel很慢
  8. ESP32产品系列之智能插座(二),ESP32代码部分
  9. Arduino ESP32 通过定时器(Timer)功能唤醒深度睡眠
  10. 求矩阵伪逆的matlab方法,手把手教学
  11. [积水成渊]asp.net中HiddenField的使用
  12. SQL中NVL和NVL2有什么区别,以及NULLIF 的使用
  13. 京东方27寸液晶屏MV270FHM-N20参考参数
  14. 如何安装ubuntu kylin(优麒麟)?
  15. Fastbot_Android稳定性测试
  16. 控制系统的复域数学模型
  17. 学习机器学习四 回归模型——线性回归、L1正则化(Lasso回归)、L2正则化(ridge回归)
  18. OllyDbg使用学习 笔记
  19. DB2中对比两个表之间的数据差异
  20. JPEG系列四 JPEG图像压缩优化

热门文章

  1. 最简单的jQuery程序
  2. 程序员,你可以更优秀些!加油!
  3. 第 6 节:前端面试指南 — React 篇(附面试题答案)
  4. 拒绝职场危机,程序员最核心的竞争力是什么?
  5. 都说程序员是吃青春饭!
  6. Facebook妥协了,React回归
  7. 阿里云ubuntu mysql_Ubuntu下安装MySQL(阿里云服务器)
  8. 程序员对辉瑞新冠疫苗的计算解读,这些常识可能你也不知道
  9. java精通时间_你真的精通 Java 吗?
  10. java绘制半透明图片_如何使绘制的图像在Java中透明