php中的filesize

filesize — 取得文件大小
int filesize ( string $filename )

注意事项:
1> 对于路径中使用了“\”分隔上级目录与子目录的文件,或者是路径中包含中文字符都将会出现如下:

<?php
var_dump(filesize("E:\123.txt"));
?>

Warning: filesize() [function.filesize]: stat failed for........
2> $filename参数可以是绝对路径,也可是相对路径
3> 对于官方手册中提到的:
Note: 因为 PHP 的整数类型是有符号的,并且大多数平台使用 32 位整数,filesize() 函数在碰到大于 2GB 的文件时可能会返回非预期的结果。对于 2GB 到 4GB 之间的文件通常可以使用 sprintf("%u", filesize($file)) 来克服此问题。
ps : 这点初步测试结果是不会出错


28
Jun 2012
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

htmlentities与htmlspecialchars的区别

php官方手册的解释:
htmlentities() 函数把字符转换为 HTML 实体。
htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

下面是作者的理解,如有差错,请您指明。
htmlentities 与 htmlspecialchars 在处理英文字符的时候完全一样,在处理中文字符的时候就有区别啦。
htmlentities 将会对几个特殊字符进行转换,但是遇到中文的时候,如果文件的编码与第三个参数不同就会出现乱码。
而htmlspecialchars 却只可能转换如下几个特殊字符:
& (和号) 成为 &amp;
" (双引号) 成为 &quot;
' (单引号) 成为 &#039;
< (小于) 成为 &lt;
> (大于) 成为 &gt;
因此,对于中文不会出现乱码。请看以下代码对比:

<?php
$str='<a href="test.html">测试页面</a>';
$str1 = htmlentities($str);
echo $str1;   //出现乱码
$str2 = htmlspecialchars($str);
echo $str2;   //显示正常
$str3 = htmlentities($str, ENT_COMPAT, 'utf-8');
echo $str3;   //显示正常
?>
以上文件编码是:utf-8

在大多数情况下,我们都不需要对中文进行处理,所以在转换html代码的时候还是建议使用htmlspecialchars(),这样可以少些两个参数,呵呵!

15
Jun 2012
AUTHOR WiFeng
CATEGORY Web
COMMENTS 2 Comments

PHP设计模式:单例模式

简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务;

使用类(class)来实现:
1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;
2、拥有一个保存类的实例的静态成员变量。
3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)。
另外,需要创建__clone()方法防止对象被复制(克隆)。在其他语言比如Java中是没有这种方法,所以这时php的特别之处。

为什么要使用PHP单例模式?
1、一般情况下,php应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。
2、如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现。

示例如下:

<?php
/**
 * 服务器请求处理类
 *
 * TODO getSiteUrl
 * @package Request
 */
class Typecho_Request
{

	/**
	 * 单例句柄
	 *
	 * @access private
	 * @var Typecho_Request
	 */
	private static $_instance = NULL;

	/**
	* 构造方法
	*
	* @access private
	*/
	private function __construct() {
		
	}

	/**
	* 构造方法
	*
	* @access private
	*/
	private function Typecho_Request() {

	}

	/**
	 * 获取单例句柄
	 *
	 * @access public
	 * @return Typecho_Request
	 */
	public static function getInstance()
	{
		if (NULL === self::$_instance) {
			self::$_instance = new Typecho_Request();
		}

		return self::$_instance;
	}

	/**
	 * 在克隆方法中进行提示
	 *
	 * @access public
	 * @return void
	 */
	public function __clone() {
		//这个根据需要进行
		trigger_error("The class does't allows clone.", E_USER_ERROR); 
	}  
}

$request = Typecho_Request::getInstance();
var_dump($request); //echo object(Typecho_Request)[1]

$request_new = new Typecho_Request();
var_dump($request_new); //error

$request_clone = clone $request;
var_dump($request_bak);  //error 

?>
12
Jun 2012
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments