Thumb

使用伪静态后,PHP无法使用$_SERVER['SERVER_PORT']获取真实端口

今天无意间遇到这么个问题,就是在使用伪静态后,$_SERVER['SERVER_PORT']无法获取到服务器真实的端口。起先以为是程序问题,但是后来关了程序的伪静态功能后,发现又能正确获取到端口,所以就写了个简单的测试脚本。

在localhost根目录下建个 index.php 文件,内容为:

同一目录下再建个 .htaccess 文件,内容为:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^test$ /index.php
</IfModule>
server_port-1
图1

测试环境:XAMPP 1.7.3 (Apache 2.2.14 + PHP 5.3.1)

测试结果如图1

询问了半天 Google 和百度两兄弟,都没结果,正郁闷之时,突然想起还有官方的帮助文档有很多人会留言,于是去看看。结果,不看不知道,这下子可让我发现新大陆了。原来官网文档(E文)上关于“SERVER_PORT”还有这样一段文字:

Note: Under the Apache 2, you must set UseCanonicalName = On, as well as UseCanonicalPhysicalPort = On in order to get the physical (real) port, otherwise, this value can be spoofed and it may or may not return the physical port value. It is not safe to rely on this value in security-dependent contexts. 
server_port-2
图2

大概意思是说:在 Apache2 下必须要将 UseCanonicalName 和 UseCanonicalPhysicalPort 都设置为 On 才能获取到真实的端口。

这下知道原因了,剩下的就是改 Apache 配置文件了。不过要说明下,配置文件里,可能只能找到 UseCanonicalName,而找不到 UseCanonicalPhysicalPort,当然这不需要担心,只要手动加上就可以了。注意,如果只改了 UseCanonicalName 而没有改 UseCanonicalPhysicalPort 的话,就连不使用伪静态都无法获取到真实端口的!

然后再运行上面测试脚本,结果就应该如图2所示。然后,就没有然后啦~~哈哈~

Thumb

在 Mac OS X 10.7 和 10.8 中刷新 DNS 缓存的方法

互联网上搜索 Mac OS X 系统下刷新 DNS 缓存的方法,绝大部分网站都说是在终端中执行下面这个命令:

sudo dscacheutil -flushcache

但其实上面的命令仅针对 Mac OS X 10.5 和 10.6 有效,在 Lion 和 Mountain Lion 中都是错误的,正确的应该是:

sudo killall -HUP mDNSResponder

参考地址:http://support.apple.com/kb/HT5343

Thumb

IE6下使用DD_belatedPNG修复透明png图片后引发的bug

首先我们必须承认使用DD_belatedPNG是目前在处理IE6下使用透明png图片的最好解决办法。这一方法在中国特色的互联网环境下,还是很有用的!但是,话说回来,这毕竟是使用第三方的脚本来进行处理的,兼容性自然不可能做到完美,自然也会存在一定的bug。下面就来说说本人在使用这一脚本后遇到的问题以及解决办法。

  1. position为relative的对象上使用,会使该对象的position的值会被替换成:absolute
    示例代码:
    <div class="png_bg" style="position:relative; background:url(xxx.png) no-repeat 0 0;"></div>

    解决办法:在这个对象外面再包裹一层,并将position放到这个包裹对象上。例:
    <div style="position:relative;">
    <div class="png_bg" style="background:url(xxx.png) no-repeat 0 0;"></div>
    </div>
  2. img对象上使用会导致onclick事件失效
    示例代码:
    <img src="xxx.png" class="png_bg" onclick="javascript:xxx();" />

    解决办法:使用链接,将onclick事件放到链接上。例:
    <a href="javascript:xxx();"><img src="xxx.png" class="png_bg" /></a>
  3. a:hover的背景图片无法修复。这个问题,是我觉得很奇怪的,因为官网上明明写着,支持a:hover的
    示例代码:
    <style>
    a{background:url(xxx.png) no-repeat 0 0;}
    a:hover{background:url(xxx_hover.png) no-repeat 0 0;}
    </style>
    <a href="#" class="png_bg">链接</a>

    解决办法:我使用的是最原始的办法——filter。需要注意background的先后顺序以及第二个background和filter之前的下划线,都是必须的。例:
    <style>
    a{background:url(xxx.png) no-repeat 0 0;}
    a:hover{background:url(xxx_hover.png) no-repeat 0 0; _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="xxx.png" ,sizingMethod="crop");}
    </style>
    <a href="#" class="png_bg">链接</a>

以上是我个人遇到的一些问题和解决办法,也欢迎大家来补充和指正哈~

Thumb

网站又搬一次家

之前的空间其实用着挺好的,淘宝那个卖家也很好。。。可惜就是空间供应商对于站点的CPU限制太过了,把我的站挂了好几次。按说我的站也没怎么用啊,日IP、PV也就那么点,又没装什么多余的插件。怎么就说我的站CPU太多了呢。次奥~~不过算了,惹不起还躲不起啊。说换就换,两个小时搞定。哇哈哈~~