标签 php 下的文章

Thumb

Eclipse PDT的PHP项目中无法使用函数跟踪功能的解决办法

使用免费的Eclipse PDT来做PHP项目开发,是很多PHPer的选择,毕竟它有很多地方对于开发者而言是非常方便的,其中一项就是函数跟踪功能。开发者只需要按住Ctrl键,再将鼠标移动到所要跟踪的函数上轻轻点击左键,PDT会自动找到该函数所定义的位置,即可察看函数的源代码。可谓是相当方便。但是程序这个东西毕竟是死的,难免会遇到功能无效的情况。这里就来介绍一下其中一种解决办法。

首先,检查PHP项目的跟目录下面是否有 .buildpath 文件。如果不存在就从别的项目复制一个来,或者手动创建一个。内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<buildpath>
	<buildpathentry kind="src" path=""/>
	<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
</buildpath>

其次,检查一下 .project 文件的内容。如果文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>test</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
	</buildSpec>
	<natures>
	</natures>
</projectDescription>

则说明是不正确的,需要按照如下内容进行修改(注意:buildSpec和natures两块):

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>test</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.wst.validation.validationbuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.dltk.core.scriptbuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.php.core.PHPNature</nature>
	</natures>
</projectDescription>

保存后即可解决。

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

获取 javascript 时间戳

获取从 1970年1月1日午夜开始的时间戳(单位:毫秒)。

// 其毫秒部分都为 0,即只是精确到秒的毫秒数 // 将值除以 1000 后,可以和 PHP 互通 var timestamp = Date.parse(new Date());

或者:

// 精确到毫秒数 // 将值除以 1000 后取整也可和 PHP 互通,Math.ceil(timestamp / 1000) var timestamp = (new Date()).valueOf();