$_SERVER[‘PHP_SELF’]、$_SERVER[‘SCRIPT_NAME’] 与 $_SERVER[‘REQUEST_URI’] 之间的区别

$_SERVER[‘PHP_SELF’]、$_SERVER[‘SCRIPT_NAME’] 与 $_SERVER[‘REQUEST_URI’] 三者非常相似,返回的都是与当前 URL 或 PHP 程序文件相关的信息:

  1. $_SERVER[‘PHP_SELF’]:相对于网站根目录的路径及 PHP 程序名称。
  2. $_SERVER[‘SCRIPT_NAME’]:相对于网站根目录的路径及 PHP 程序文件名称。
  3. $_SERVER[‘REQUEST_URI’]:访问此页面所需的 URI 。

一个简单的例子可以看出它们的区别。URL 地址如下:

http://www.5idev.com/php/index.php/test/foo?username=hbolive
  • $_SERVER[‘PHP_SELF’] 得到:/php/index.php/test/foo
  • $_SERVER[‘SCRIPT_NAME’] 得到:/php/index.php
  • $_SERVER[‘REQUEST_URI’] 得到:/php/index.php/test/foo?username=hbolive

从该例子可以看出:

  1. $_SERVER[‘PHP_SELF’] 则反映的是 PHP 程序本身;
  2. $_SERVER[‘SCRIPT_NAME’] 反映的是程序文件本身(这在页面需要指向自己时非常有用);
  3. $_SERVER[‘REQUEST_URI’] 则反映了完整 URL 地址(不包括主机名)。

其实从各自的命名上,也可以体现出它们之间的细微差别。

特别的,对于如下地址:

http://www.5idev.com/
  • $_SERVER[‘PHP_SELF’] 得到:/index.php
  • $_SERVER[‘SCRIPT_NAME’] 得到:/index.php
  • $_SERVER[‘REQUEST_URI’] 得到:/

至于有人提到 $_SERVER[‘PHP_SELF’] 与 $_SERVER[‘SCRIPT_NAME’] 在 PHP 以 CGI 模式运行下会有区别。由于 PHP 在 CGI 模式运行下并不多见,测试较为麻烦,在此就不再叙述了。如有这种情况,可注意并自行测试。

希望在理解了它们之间的区别之后,以便选择更适合自己程序的来使用。

Wampserver下安装memcache

1.Memcached-32位 下载

http://pan.baidu.com/s/1c1AsMfY

如果上面的不好使,再试试这个:

https://pan.baidu.com/s/1H7iBsgsl8V0cBUr-Wt90_A

2.Memcached-64位 下载

(1)最新版本下载:http://blog.couchbase.com/memcached-windows-64-bit-pre-release-available
(2)本站下载:memcached-win64-1.4.4-14.zip

3.将上述下载文件解压放到某个目录下,例如

D:\wamp\bin\memcached\memcached.exe

4.安装Memcached

在cmd命令行执行以下命令:

D:\wamp\bin\memcached\memcached.exe -d install

[提示错误:failed to install service or service already installed]
解决方法:在系统盘中找到cmd.exe文件,点击右键,以管理员身份运行

5.启动Memcached

D:\wamp\bin\memcached\memcached.exe -d start

测试memcache是否连接成功:

方法一:
>telnet 127.0.0.1 11211

[提示错误:’telnet’ 不是内部或外部命令,也不是可运行的程序或批处理文件。]

注:windows7带有telnet,只是默认没有安装。

解决方法:依次打开“开始”→“控制面板”→“打开或关闭Windows功能”,寻找并勾选“Telnet客户端”,然后点击“确定”。顺利安装后,再输入此命令即可。

方法二:
netstat -an 查看11211是否存在

6.安装Memcached的PHP扩展

(1)php_memcache.dll 下载:php_memcache.dll
(2)将上述文件解压并放到 D:\wamp\bin\php\php5.4.12\ext (可根据自己实际情况放入自己的对应目录)
(3)在php.ini文件中添加下面一行

extension=php_memcache.dll

7.重启Wamp的Apache服务

在phpinfo()界面搜索Memcache,如果有Memcache出现则安装成功!

js如何打印对象

js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一打印出来,具体代码如下:

function writeObj(obj){ 
    var description = ""; 
    for(var i in obj){   
        var property=obj[i];   
        description+=i+" = "+property+"\n";  
    }   
    alert(description); 
}

如何绕过浏览器的弹窗拦截机制

在chrome的安全机制里面,非用户触发的window.open方法,是会被拦截的。举个例子:

var btn = $('#btn');
btn.click(function () {

    //不会被拦截
    window.open('http://cssha.com')
});

上面的代码中,window.open是用户触发的时候,是不会被拦截的,可以正常打开新窗口。再看下面这个:

var btn = $('#btn');
btn.click(function () {

    $.ajax({
        url: 'ooxx',
        success: function (url) {

            //会被拦截
            window.open(url);
        }
    })
});

上面的代码中,用户没有直接出发window.open,而是发出一个ajax请求,window.open方法被放在了ajax的回调函数里,这样的情况是会被拦截的。

那么,当用户点击按钮,发出ajax请求,如何在ajax请求完成后再打开新窗口,又不被拦截呢? 接着往下看:

var btn = $('#btn');
btn.click(function () {

    //打开一个不被拦截的新窗口
    var newWindow = window.open();

    $.ajax({
        url: 'ooxx',
        success: function (url) {

            //修改新窗口的url
            newWindow.location.href = url;
        }
    })
});

上面的代码中,用户安点击按钮的时候,先打开一个空白页,再发ajax请求,在ajax回调里面修改新窗口的.location.href,这样就不会被拦截啦啦啦啦~~~