在当前 PHP 版本的默认配置下,“输出缓冲(Output Buffering)”是被打开的。旧版本则不是这样,在旧版本的 PHP 中,字符串在每次被输出的时候(通过 echo 或 print 函数),都会触发一次发送到客户端浏览器的动作。
“输出缓冲”的引入,使得这一过程更加快速、更加高效。缓冲区实际上是在内存中开辟了一块区域,可以认为是内存中的一个大的字符串。当程序中有字符要输出的时候,会把要输出的内容附加到该缓冲区中,用来替代旧版本 PHP 中每次都直接输出到浏览器的方式。当缓冲区被“刷新”的时候,再统一输入到用户浏览器。以下几种情况下,会引起缓冲区的“刷新”操作: 阅读全文
如果你使用一面大镜子作为冲浪板会发生什么?或许你会在较短的时间内征服海浪,但是你肯定从内心深处明白,这不是冲浪的正确选择。同样的道理也适用于PHP编程,尽管这样的类比听起来有一些古怪。我们经常听到有人试图用一个周末多点的时间来学会PHP,但是请恕我直言,这是学习这门编程语言的一种非常糟糕的方式。
为何说学习PHP的过程有别于任何其它语言?
就其本质而言,如果你掌握了以PHP语言“做事”的方式,那么在使用它时就会得心应手,因此值得你去投入精力去了解这些方式。在PHP中,单纯按照自己思路去解决问题往往会是一种错误的办法。这并不是因为你是一个糟糕的程序员,而是因为如果你想写出好的可维护性强的代码,有些标准技巧是你必须要使用的。下面让我们一起看一下你需要知道的10大技巧。 阅读全文
之前要保存flash POST 过来的图片数据。一开始以为这个数据在tiny_mce_marker
POST 数组里,但事实并不是。后来才知道在 $GLOBALS['HTTP_RAW_POST_DATA'] 里。所以备忘下。
在网上找了一下两者的区别:
$GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype=”multipart/form-data” 表单数据不可用。也就是说基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和tiny_mce_marker
POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。
并且如果 $GLOBALS['HTTP_RAW_POST_DATA'] 不存在时,可以通过 file_get_contents(‘php://input’); 获取 阅读全文
在php中有两个函数——至少有两个是否有其他的我还不知道,能够实现数字补零,str_pad(),sprintf()详细如下
str_pad
顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任何其它的字符串
例如:str_pad(带填补的字符串,填补后的长度,填补字符串,填补位置)
其中填补后的长度必须是个正整数,填补位置有三个选项,
左边:STR_PAD_LEFT,
右边:STR_PAD_RIGHT,
两端:STR_PAD_BOTH
例如:
echo str_pad(1,8,”0″,STR_PAD_LEFT);
结果:00000001
echo str_pad(1,8,”0″,STR_PAD_RIGHT);
结果:10000000
echo str_pad(1,8,”0″,STR_PAD_BOTH);
结果:00010000 阅读全文
说实在话在一年前战地写PHP代码的时候从来没有想过什么系统资源什么的,幸好PHP对于内存等其它的系统资源回收还是相当积极的。但是不管怎么样还是要注意的,毕竟资源是是宝贵的嘛。
那么我们开始今天的话题吧,说说PHP的引用操作符&,熟悉C的都知道C中有一个被称为指针的东西,指针就是指向内存地址的。这个&也是具有同样的功能的。
看如下代码:
$source=”110″;
$a=$source;
$b=&$source;
$source=”120″;
echo $a.”rn”,$b; 阅读全文
好多年没有遇到过PHP网页乱码问题了,真的。但是今天错误重现是我惊诧莫名啊!
有一个很久的工程今天要莫名其妙的重新启动了,这个工程是xampp的环境——不知道xampp?你Google一下吧,这个我不多说了。
一开始轻车熟路,apahce配置,php配置……一路下来没有任何问题。开始访问吧,问题就来了,很奇怪预料之中可以运行的页面,却出了个预料之外的乱码问题。
第一个想到的是,apache的缺省字符集,于是在apache的语言扩展配置文件中加入:
AddDefaultCharset UTF-8 阅读全文
小心使用get_defined_functions,这是一个自作主张的函数,是的,很自作主张!
他的作用想必大家都是知道的取得所有已经定义的函数,把函数名称放进一个数组里面。例如:
$functions=get_defined_functions();
这时候$functions['internal']所有元素是PHP自身定义的函数,这次想知道PHP到底定义了多少个函数的兄弟们有福了,呵呵…………我是PHP5.2显示这个数组有1221个元素,想必是PHP自身定义了1221个函数了。这个可能不包括扩展库的函数,例如xml扩展库和gd扩展库!
另外一个元素$functions['user']中则收纳了用户自身定义的所有函数——这个地方要注意啊,我们所说的所有是指当前运行的程序文件和这个程序文件所包含的其他文件中定义的函数。
言归正传,我们为啥要说他自作主张呢?原因是这样的,他不管用户定义的时候写的函数名是不是有大写字母,这些大写字母是不是有特殊含义,他通通的把函数名转换为小写之后才写进数组里面
例如我们定义两个函数:
<?php
function shortHim(){}
function killYouJJ(){}
$functions=get_defined_functions();
var_dump($functions['user']);
结果是这样的
array(2) {
[0]=>
string(8) “shorthim”
[1]=>
string(9) “killyoujj”
}
这就导致像如下的程序始终不成立
in_array(“shortHim”,$functions['user']);
所以使用的时候还是要小心的
0、用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的”函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。
1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。
2、$row['id'] 的速度是$row[id]的7倍。
3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。
4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
5、注销那些不用的变量尤其是大数组,以便释放内存。 阅读全文