【美洲杯赌球】ThinkPHP中url隐藏入口文件后接收

本文实例讲述了ThinkPHP中url隐藏入口文件后接收alipay传值的方法。分享给大家供大家参考。具体方法如下:

1, $_SERVER['SCRIPT_FILENAME'] 和 常量 __FILE__的区别(一般情况下两者的显示相同,都是显示文件的绝对路径,包括文件名,显示的起点是 电脑根目录 /

现在公司项目的需求变化多端,项目使用的是Thinkphp2.0,而conf.php中设置的URL_MODEL=2,为了兼容.htaccess和隐藏index.php,但在使用一些第三方接口时(例如支付宝或MSN开放平台),他们返回的参数往往含有一个?号,而URL_MODEL=2时,TP会自动将含有?的URL进行转换.

  ①,如果在网站根目录下/var/www/创建一个软连接linkkk指向其他的文件夹~/work/test/,在linkkk下面建立a.php,打印$_SERVER,则这两者的显示就会有区别。

转换前:http://www.xxx.com/index.php/alipay/callback/?is_success/T/sign_type/MD5/notify_id/RqPnCoPT3K9/vwbh3I

    SCRIPT_NAME的显示以网站根目录为准,不忽略软连接,显示结果为:'SCRIPT_FILENAME' =>string '/var/www/linkkk/a.php' (length=21)

转换后:http://www.xxx.com/alipay/callback/is_success/T/sign_type/MD5/notify_id/RqPnCoPT3K9/vwbh3I

    __FILE__的显示以服务器(即某台电脑)为准,忽略软连接,显示结果为:string '/home/ths/work/test/a.php' (length=34)

转换后的网址将无法访问,而转换前的网址是可以访问的,这时需要临时针对alipay这个控制器,URL_MODEL=1,但在该控制器里C('URL_MODEL',1)是没有用的,因为TP会在入口文件App::run()时直接404了.

  ②,在include 或者require包含时,两者有区别。如b.php中包含a.php,在a.php中打印$_SERVER和__FILE__,然后访问b.php,则

想了很多方法,先是修改它的配置文件Conf.php,结果发现会生成缓存文件~app.php,所以必须根据情况删除这个缓存文件,于是我对index.php入口文件进行了修改(事实上,放在任何App::run()之前都可以,你可以自行封装).

    SCRIPT_NAME显示的是b.php所在的路径,即受到了包含文件的影响,而__FILE__显示的是a.php所在路径。

PHP实例代码:

  总结一下:__FILE__显示的永远是 此文件相对于服务器的绝对路径(包含文件名),而且不受包含文件的影响!!

复制代码 代码如下:

        而$_SERVER['SCRIPT_FILENAME']受到包含文件的影响,而且显示以网站根目录为准!

本文由美洲杯赌球发布于计算机教程,转载请注明出处:【美洲杯赌球】ThinkPHP中url隐藏入口文件后接收

TAG标签: 美洲杯赌球
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。