Posts Tagged ‘php’

eaccelerator.shm_size=”32″ eAccelerator 可以使用的共享内存的数量 (以兆为单位) . “0″ 是指操作系统的默认值. 默认值是 “0″.可根据服务器的实际情况来调整,16,32,64,128都是可以的。 eaccelerator.cache_dir=”/home/php/tmp” 这个目录是给磁盘缓存使用. eAccelerator 在这里储存预先编译好的代码, 进程数据, 内容以及用户的自定义内容. 同样的数据也能被储存在共享内存中 (这样可以提高访问速度). 默认的设置是 “/tmp/eaccelerator”. eaccelerator.enable=”1″ 开启或关闭 eAccelerator。”1″ 为开启,”0″ 为关闭。默认值为 “1″。 eaccelerator.optimizer=”1″ 启或关闭内部优化器,可以提升代码执行速度。”1″ 为开启,”0″ 为关闭。默认值为 “1″。 eaccelerator.check_mtime=”1″ 打开或者关闭 PHP 的文件修改检查. “1″ 是指打开, “0″ 是指关闭. 如果您在修改以后重新编译 PHP 的文件,那么您应当设置为 “1″. 默认值是 “1″. eaccelerator.debug=”0″ 开启或关闭调试日志记录。”1″ 为开启,”0″ 为关闭。默认值为 “0″。会将缓存命中得记录写入日志。 eaccelerator.filter=”” 判断哪些 PHP 文件必须缓存。您可以指定缓存和不缓存的文件类型(如 “*.php *.phtml”等) [...]

Tuesday, September 7th, 2010 at 18:07 | 0 comments
Categories: 技术

1. 如果你安装了PHP的memcache模块,则使用phpinfo()函数可以看到如下信息 memcache supportenabledActive persistent connections10Revision$Revision: 1.62 $ DirectiveLocal ValueMaster Valuememcache.allow_failover11memcache.chunk_size81928192memcache.default_port1121111211memcache.max_failover_attempts2020 其中:Active persistent connections 代表是的已建立的长连接的个数; 注意,该值是当前进程的,因为长连接在进程间是无法共享的。 2. php.ini 中配置解释 [Memcache] ; 一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表, ; 它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。 ; 是否在遇到错误时透明地向其他服务器进行故障转移。 memcache.allow_failover = On ; 接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。 memcache.max_failover_attempts = 20 ; 数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。 ; 如果发现无法解释的速度降低,可以尝试将此值增加到32768。 memcache.chunk_size = 8192 ; 连接到memcached服务器时使用的默认TCP端口。 memcache.default_port = 11211 ; 控制将key映射到server的策略。默认值”standard”表示使用先前版本的老hash策略。 ; 设为”consistent”可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。 ;memcache.hash_strategy = “standard”; 控制将key映射到server的散列函数。 默认值”crc32″使用CRC32算法,而”fnv”则表示使用FNV-1a算法。 [...]

Thursday, July 15th, 2010 at 10:47 | 0 comments
Categories: 技术

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、注销那些不用的变量尤其是大数组,以便释放内存。 6、尽量避免使用__get,__set,__autoload。 7、require_once()代价昂贵。 8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。 9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于 time()。 10、函数代替正则表达式完成相同功能。 11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。 12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而 不是只写一行代码接受数组作为查询和替换的参数。 13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。 14、用@屏蔽错误消息的做法非常低效,极其低效。 15、打开apache的mod_deflate模块,可以提高网页的浏览速度。 16、数据库连接当使用完毕时应关掉,不要用长连接。 17、错误消息代价昂贵。 18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。 19、递增一个全局变量要比递增一个局部变量慢2倍。 20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。 21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。 22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。 23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。 24、派生类中的方法运行起来要快于在基类中定义的同样的方法。 25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操 作。 26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。 27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。 28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负 载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。 29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返 回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。 (举例如下) if (strlen($foo) < 5) { echo [...]

Monday, May 24th, 2010 at 22:30 | 9 comments
Categories: 技术
Tags: ,

php的引用(就是在变量或者函数、对象等前面加上&符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容.与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址变量的引用PHP 的引用允许你用两个变量来指向同一个内容 PHP代码 <? $a=“ABC”; $b =$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b=“EFG”; echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG ?> 函数的传址调用传址调用我就不多说了 下面直接给出代码 PHP代码 function test($a) { $a=$a+100; } $b=1; echo $b;//输出1 test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了 echo “<br>”; echo $b;//输出101 要注意的是,在这里test(1);的话就会出错,原因自己去想函数的引用返回先看代码 PHP代码 function &test() { static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b; } $a=test();//这条语句会输出 $b的值 为1 $a=5; $a=test();//这条语句会输出 $b的值 为2 $a=&test();//这条语句会输出 $b的值 为3 $a=5; $a=test();//这条语句会输出 $b的值 为6 [...]

Thursday, April 15th, 2010 at 17:33 | 0 comments
Categories: 技术
Tags: ,

群组功能发帖时候增加编辑器,其实并不是很复杂,只不过我们要理解,为什么要这样修改代码。 *可能有些听不懂,不过不会影响修改,多学点东西总是好的吧? 首先,我们解析一下blog的编辑器。 看模板文件夹下cp_blog.htm里面的这段代码: 复制内容到剪贴板 代码: <textarea class=”userData” name=”message” id=”uchome-ttHtmlEditor” style=”height:100%;width:100%;display:none;border:0px”>$blog[message]</textarea> <iframe src=”editor.php?charset=$_SC[charset]&allowhtml=$allowhtml” name=”uchome-ifrHtmlEditor” id=”uchome-ifrHtmlEditor” scrolling=”no” border=”0″ frameborder=”0″ style=”width:100%;border: 1px solid #C5C5C5;” height=”400″></iframe> 第一步呢,我们先要读懂这两行代码: 这就是编辑器的比较核心的部分,用一个隐藏的textarea来提交信息,用js提取框架iframe里面的编辑内容,而iframe里面的部分是编辑器页面。 display:none 表示用css隐藏了textarea,看不到但是提交信息是可以发出去的。 我们会发现,textarea的iduchome-ttHtmlEditor和iframe里面的name和id都很像,对,这两个能合并在一起就是用这个挂钩的,当然,还要借助于js实现。 第二步,再看提交的时候,触发了什么,请看这两段代码,还是那个文件。 复制内容到剪贴板 代码: <input type=”button” id=”blogbutton” name=”blogbutton” value=”提交发布” onclick=”validate(this);” style=”display: none;” /> 复制内容到剪贴板 代码: <input type=”button” id=”issuance” onclick=”document.getElementById(’blogbutton’).click();” value=”保存发布” class=”submit” /> 如果刚才认真听课的同学都发现了,“display: none”又一次使用到了隐藏。 但是提交的时候更有趣: 下面的按钮触发的是上面按钮的动作,怎么做到的呢? 复制内容到剪贴板 代码: [...]

Thursday, March 4th, 2010 at 09:45 | 0 comments
Categories: TODO, 技术
Tags: , ,

urlencode:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码不同。 rawurlencode:功能和urlencode基本一样,采用的是RFC1738编码,因此空格会编码为%20。 转载地址:http://hi.baidu.com/roaxiaolong/blog/item/a043ac809f9c0ed39123d982.html

Tuesday, February 2nd, 2010 at 18:00 | 0 comments
Categories: TODO, 技术

通常情况下,当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度。 本文将以两种方法介绍生成随机字符串的办法。 第一种办法是要创建字符池。 而第二种办法甚至省去了创建字符池的创建。 function randomkeys($length) { $pattern = ’1234567890abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLOMNOPQRSTUVWXYZ,./&amp;l t;&gt;?;#:@~[]{}-_=+)(*&amp;^%$£!’; //字符池 for($i=0; $i<$length; $i++) { $key .= $pattern{mt_rand(0,35)}; //生成php随机数 } return $key; } echo randomkeys(8); 这个php随机函数能生成XC*=z~7L这样的字符串,够随机! 现在介绍另一种用PHP生成随机数的方法:利用chr()函数,省去创建字符池的步骤。 function randomkeys($length) { $output=”; for ($a = 0; $a < $length; $a++) { $output .= chr(mt_rand(35, 126)); //生成php随机数 } return $output; } echo randomkeys(8); 在第二个php随机函数里 ,先用mt_rand()生成一个介于33到126之间的php随机数,然后用chr()函数转化成字符。查看ascii码表就会发现,33到126代表的正是第一个函数中字符池里的所有字符。第二个函数和第一个函数功能相同,而且更简洁。 [...]

Sunday, January 10th, 2010 at 23:56 | 0 comments
Categories: TODO, 技术

Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。 在 Windows 下,APC 要求有 c:\tmp 目录,并且该目录要对 Web 服务器进程可写。 1、安装 以PHP extension 形式安装 2、配置 apc.enabled        boolean apc.optimization   optimization 选项在脚本中可以改变 APC PHP.ini配置选项详解 [APC] ; Alternative PHP Cache 用于缓存和优化PHP中间代码 apc.cache_by_default = On ;SYS ; 是否默认对所有文件启用缓冲。 ; 若设为Off并与以加号开头的apc.filters指令一起用,则文件仅在匹配过滤器时才被缓存。 apc.enable_cli = Off ;SYS ; 是否为CLI版本启用APC功能,仅用于测试和调试目的才打开此指令。 apc.enabled = On ; 是否启用APC,如果APC被静态编译进PHP又想禁用它,这是唯一的办法。 apc.file_update_protection = 2 [...]

Friday, January 8th, 2010 at 16:48 | 0 comments
Categories: TODO, 技术
Tags: , ,

毫无疑问,如今PHP已经成为WEB开方当中最热门的技术之一。根据nexen.net的调查,互联网上三分之一的网站选择PHP来开发服务器端程序。在欧美和日本等国家,PHP开发市场呈现出一片欣欣向荣的景象,像Facebook、Yahoo!、Flickr和Sourceforge这样的知名PHP站点数不胜数。而近年来国内的各大网站也逐渐大量使用PHP。 依靠活跃、组织严密的开发社区,PHP语言本身一直在稳定地进步–一方面不断改善性能和稳定性,增加各种实用的开发工具;另一方面积极汲取其它编程语言的优点来充实语言特性。如今的PHP,即可以支持强大的面向对象开发(如Java),又保留了简单易学的语法(如C),同时,PHP还拥有极其多样化的各种实用的函数、扩展和类库,非常方便用于WEB开发。另外,随着面向对象开发的逐步普及,各种开源的PHP类库和开发框架层出不穷。 6月底,PHP官方正式发布了PHP5.3.0。这是一个不寻常的PHP版本,因为它修复了不少Bug(超过140个),而且带来了很多让PHP程序员们期待已久的新特性。其中有些特性原本是计划在PHP6中发布的,但因呼声很高,提前在PHP5.3中发布了。 让我们来了解一下PHP5.3中有哪些好东西吧。 一.PHP 5.3中的新特性 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性。有了命名空间的概念,在开发大型站点时,就比较容易设计出灵活的结构,同时避免不同包中的类名或变量名产生冲突。 在PHP5.3之前,惯例的划分Package的办法是通过目录名来分隔代码文件,代码中的类名则用下划线_来表示目录。例如 代码示例: <?php class Zend_Db_Table_Select {} // 表示当前这个类的文件位于Zend/Db/Table/Select目录下 ?> 这样的命名方式被PEAR、Zend Framework及各种PHP项目广泛采用。虽然该方法可以避免不同包或类库中的类名产生冲突,但在书写代码的时候显得较为麻烦和笨拙。 在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符为反斜杆\。 代码示例: <?php namespace Zend\Db\Table; class Select {} ?> 这样即使其它命名空间下存在名为Select的类,程序在调用时也不会产生冲突。代码的可读性也有所增加。 支持延迟静态绑定(Late Static Binding) 在PHP5中,我们可以在类中通过self关键字或者__CLASS__来判断或调用当前类。但有一个问题,如果我们是在子类中调用,得到的结果将是父类。因为在继承父类的时候,静态成员就已经被绑定了。 例如: 代码示例: <?php class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); } [...]

Saturday, December 5th, 2009 at 03:14 | 0 comments
Categories: TODO, 技术
Tags:

1. 截取GB2312中文字符串 <?php < ?php //截取中文字符串 function mysubstr($str, $start, $len) { $tmpstr = “”; $strlen = $start + $len; for($i = 0; $i < $strlen; $i++) { if(ord(substr($str, $i, 1)) > 0xa0) { $tmpstr .= substr($str, $i, 2); $i++; } else $tmpstr .= substr($str, $i, 1); } return $tmpstr; } ?> 2. 截取utf8编码的多字节字符串 <?php < [...]

Thursday, November 26th, 2009 at 11:00 | 0 comments
Categories: TODO, 技术
Tags: ,