Below you will find pages that utilize the taxonomy term “Php”
October 17, 2017
php的Pdo扩展实现类似mysql_ping的方法
"\u003cp\u003e在php里Pdo是没有mysql_ping和mysqli_ping函数的,可以使用以下方法来代替它\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eclass NPDO {\n private $pdo;\n private $params;\n\n public function __construct() {\n $this-\u0026gt;params = func_get_args();\n $this-\u0026gt;init();\n }\n\n public function __call($name, array $args) {\n return call_user_func_array(array($this-\u0026gt;pdo, $name), $args);\n }\n\n // The ping() will try to reconnect once if connection lost.\n public function ping() {\n try {\n $this-\u0026gt;pdo-\u0026gt;query(\u0026#39;SELECT …\u003c/code\u003e\u003c/pre\u003e"
November 18, 2016
Laravel框架数据库CURD操作、连贯操作使用方法
"\u003cp\u003eLaravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、Selects\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e检索表中的所有行\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$users = DB::table(\u0026#39;users\u0026#39;)-\u0026gt;get();\nforeach ($users as $user)\n{\nvar_dump($user-\u0026gt;name);\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e从表检索单个行\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$user = DB::table(\u0026#39;users\u0026#39;)-\u0026gt;where(\u0026#39;name\u0026#39;, \u0026#39;John\u0026#39;)-\u0026gt;first();\nvar_dump($user-\u0026gt;name);\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e检索单个列的行\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$name = DB::table(\u0026#39;users\u0026#39;)-\u0026gt;where(\u0026#39;name\u0026#39;, \u0026#39;John\u0026#39;)-\u0026gt;pluck(\u0026#39;name\u0026#39;);\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e检索一个列值列表\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$roles = …\u003c/code\u003e\u003c/pre\u003e"
November 13, 2016
PHP中的max_input_vars指令
"\u003cp\u003e今天接到客服部工作人员反馈的一个问题,客户使用产品系统是允许用户添加产品属性的,而每个属性是由多个表单域组成 ,这样当每添加一个属性就等于添加了n个表单域,这个客户添加的非常的多,发现在提交保存的时候总是失败,提示其中一个表单元素的索引值不存在,经测试是发现服务端接收的一些表单域丢失了一部分。起初分析的是服务器接收的数据超出了php设置的max_post_size(其实当时已经设置了8M,足够使用了),修改了测试发现此问题仍然存在。后来将用户原来的一些添加的表单元素进行删除,再重新添加同样数据库表单域可以成功,但一旦超出一定数量的表单域就会发生丢失的情况,这个时候首先怀疑的是apache是否有类似限制接收隐藏域的指令,找了没有找到,紧接着在php中批到一个max_input_vars这个指令,意思就是说php中允许接收的最大表单域数据,到目前为止基本上是确定这个原因引起的了,奖其修改为2000,重启Apache,发现一切正常。\u003c/p\u003e\n\u003cp\u003e总结:提起php中的max_input_vars 估计很少人知道这个这个指令,因为他的使用场景实在是太少了,在php.ini中这个指令的定义是指服务端最大可以接 …\u003c/p\u003e"
April 18, 2016
Mac上使用Brew 进行PHP多版本管理
"\u003cp\u003e\u003ca href=\"http://yansu.org/2014/09/26/use-old-version-of-brew-php.html\"\u003ehttp://yansu.org/2014/09/26/use-old-version-of-brew-php.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"section\"\u003e版本切换方式\u003c/h2\u003e\n\u003cp\u003e通过brew安装的php可以通过 \u003ccode\u003ebrew link\u003c/code\u003e 和 \u003ccode\u003ebrew unlink\u003c/code\u003e 来切换不同版本。\u003c/p\u003e\n\u003cp\u003e例如\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebrew list\nbrew unlink php56\nbrew link php55\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e大版本可以用 \u003ccode\u003ebrew list\u003c/code\u003e 来查,如果是小版本的话只能去 \u003ccode\u003e/usr/local/Cellar/php55\u003c/code\u003e 看了。这个时候使用 \u003ccode\u003ephp-version\u003c/code\u003e 可以更方便一点。\u003c/p\u003e\n\u003cp\u003e我测试的此方法不行,只能使用php-verson 进行切换。\u003c/p\u003e\n\u003ch2 id=\"php-version\"\u003e安装 \u003ccode\u003ephp-version\u003c/code\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/wilmoore/php-version\"\u003ephp-version\u003c/a\u003e 是一个帮助管理从brew安装的php版本切换的工具。\u003c/p\u003e\n\u003cp\u003e安装非常简单\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebrew install php-version\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e然后执行\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;span class=\u0026#34;nb\u0026#34;\u0026gt;source\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026#34;k\u0026#34;\u0026gt;$(\u0026lt;/span\u0026gt;brew --prefix …\u003c/code\u003e\u003c/pre\u003e"
March 12, 2016
windows平台下的PHP的线程安全版本与非线程安全版本的区别
"\u003cp\u003eWindows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分(Linux/Unit平台没有这个概念的东西的),这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。\u003c/p\u003e\n\u003cp\u003ePHP有2中运行方式:\u003cstrong\u003eISAPI\u003c/strong\u003e和\u003cstrong\u003eFastCGI\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003eISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;\u003c/p\u003e\n\u003cp\u003e而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。\u003c/p\u003e\n\u003cp\u003e对于apache服务器来说一般选择isapi方式,而对于nginx服务器则选择FastCGI方式。\u003c/p\u003e\n\u003cp\u003e1.\u003cstrong\u003eNon Thread Safe\u003c/strong\u003e版本php适用在使用CGI以及fastCGI的web服务器上,如nginx,lighttpd以及IIS的CGI模式下\u003c/p\u003e\n\u003cp\u003e2. …\u003c/p\u003e"
March 12, 2016
PHP底层工作原理
"\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2016/03/51de416caaddc.png\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2016/03/51de416caaddc.png\" alt=\"51de416caaddc\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e从图上可以看出,php从下到上是一个4层体系\u003c/p\u003e\n\u003cp\u003e①Zend引擎\u003c/p\u003e\n\u003cp\u003eZend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、 实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕zend 实现。\u003c/p\u003e\n\u003cp\u003e②Extensions\u003c/p\u003e\n\u003cp\u003e围绕着zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过 extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的php中间层、富文本解析 就是extension的典型应用)。\u003c/p\u003e\n\u003cp\u003e③Sapi\u003c/p\u003e\n\u003cp\u003eSapi全称是Server Application Programming Interface,也就是服务端应用编程接口,sapi通过一系列钩子函数,使得php可以和外围交互数据,这是php非常优雅和成功的一个设计,通过 sapi成功的将php本身和上层应用解耦隔离,php可以不 …\u003c/p\u003e"
February 15, 2016
深入解析php中的foreach问题
"\u003cp\u003e篇文章是对php中的foreach问题进行了详细的分析介绍,需要的朋友参考下\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e前言:\u003c/strong\u003e php4中引入了foreach结构,这是一种遍历数组的简单方式。相比传统的for循环,foreach能够更加便捷的获取键值对。在php5之前,foreach仅能用于数组;php5之后,利用foreach还能遍历对象(详见:遍历对象)。本文中仅讨论遍历数组的情况。foreach虽然简单,不过它可能会出现一些意外的行为,特别是代码涉及引用的情况下。\u003c/p\u003e\n\u003cp\u003e下面列举了几种case,有助于我们进一步认清foreach的本质。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e问题1:\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$arr = array(1,2,3);\nforeach($arr as $k =\u0026gt; \u0026amp;$v) {\n$v = $v * 2;\n}\n// now $arr is array(2, 4, 6)\nforeach($arr as $k =\u0026gt; $v) {\necho \u0026#34;$k\u0026#34;, \u0026#34; =\u0026gt; \u0026#34;, \u0026#34;$v\u0026#34;;\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e先从简单的开始,如果我们尝试运行上述代码,就会发现最后输出为0=\u0026gt;2 1=\u0026gt;4 2=\u0026gt;4 。 …\u003c/p\u003e"
July 24, 2015
安装apache+php(fastcgi)
"\u003cp\u003e最近有下二次开发的程序,由于源程序使用了zend压缩,提示需要安装 Zend Guard Loader 扩展。而安装zend guard 7后,发现在phpinfo()里检测不到,后来才发现原来zend guard只能使用nfs非安全线程的php,没有办法,重新下载NFS版本的php版本。以下为安装要点:\u003c/p\u003e\n\u003cp\u003e我用的是WampServer集成环境,于是就想到了把 Apache 换成 FastCGI 模式来跑 PHP5.3 nts 版,这样就可以使用Zend Guard Loader 扩展了。\u003c/p\u003e\n\u003cp\u003e1、下载 \u003ca href=\"http://windows.php.net/downloads/releases/php-5.3.28-nts-Win32-VC9-x86.zip\"\u003ePHP5.3.28\u003c/a\u003e ,解压到 F:/php5.3.28nts ,配置好 php.ini,也顺便把 Zend Guard Loader 扩展配置好。\u003c/p\u003e\n\u003cp\u003e2、下载 \u003ca href=\"http://archive.apache.org/dist/httpd/binaries/win32/\"\u003emod_fcgid-2.3.6-win32-x86.zip\u003c/a\u003e 或 \u003ca href=\"http://www.apachelounge.com/download/\"\u003ehttp://www.apachelounge.com/download/\u003c/a\u003e 解压 manual、modules 目录中的文件到 f:\\wamp\\bin\\apache\\apache2.2.22 对应目录里去。\u003c/p\u003e\n\u003cp\u003e3、打开 Apache …\u003c/p\u003e"
June 17, 2015
linux下安装php7+mysql5.7+nginx
"\u003cp\u003e\u003cstrong\u003e环境:\u003c/strong\u003e\n\u003ca href=\"https://www.centos.org/\"\u003eCentOS7.1 X64\u003c/a\u003e \u003ca href=\"http://dev.mysql.com/downloads/mysql/\"\u003eMySQL5.7.10\u003c/a\u003e \u003ca href=\"http://php.net/downloads.php#v7.0.4\"\u003ePHP7.0.4\u003c/a\u003e \u003ca href=\"http://tengine.taobao.org/\"\u003eTengine/2.1.2 (nginx/1.6.2)\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e参考: \u003ca href=\"http://blog.haohtml.com/archives/15340\"\u003ehttp://blog.haohtml.com/archives/15340\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一。安装常用扩展库\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers libevent …\u003c/code\u003e\u003c/pre\u003e"
November 4, 2013
PHP 多台服务器 session 用Memcached存储Session
"\u003cp\u003e\u003cstrong\u003ephp实现多服务器共享session的方法:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e多服务器共享session的方法:\u003c/p\u003e\n\u003cp\u003e1.通过NFS文件共享的方式,多台WEB服务器共享保存session文件的磁盘\n2.保存在数据库中,这种方式的扩展性很强,可以随意增加WEB而不受影响\n3.可以将session数据保存在memcached中,memcached是基于内存存储数据的,性能很高,用户并发量很大的时候尤其合适,参考PHP实现多服务器session共享之memcache共享\n4.文件方式保存session时,可以采用php的扩展eaccelerator来存储sesion\u003c/p\u003e\n\u003cp\u003ephp中的Session默认是用文件的方式存储的,如果用多台WEB服务器,Session共享可能就会成为一个大的问题,可以用NFS共享的方式来存储,但是对于并发请求更多的站点来说,用NFS也会出现问题,下面就说说用Memcached来保存Session的问题。\u003c/p\u003e\n\u003cp\u003evi memcached_session.php,输入如下的代码\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ip = \u0026#39;192.168.1.111\u0026#39;;\n$port = 11211; …\u003c/code\u003e\u003c/pre\u003e"
October 7, 2013
php框架–php框架的连贯查询实现原理
"\u003cp\u003e如果你是一名使用过多种框架的php程序员,你一定见过这样的查询语句:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$result = $mysqlDb-\u0026gt;limit(’0,10′)-\u0026gt;order(‘id desc’)-\u0026gt;findall();\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e上面的查询语句,连续使用-\u0026gt;操作符进行操作,并最终返回一个查询结果,那么这是如何实现的呢。\u003c/p\u003e\n\u003cp\u003e我们来简单分析一下:\u003c/p\u003e\n\u003cp\u003e-\u0026gt;操作符用来访问对象,上面的语句一共使用了3次-\u0026gt;操作符,而最后一次返回的是查询结果,这说明,前2次-\u0026gt;访问后,返回的应该是一个对象,因为在php中,如果你对一个非对象使用-\u0026gt;操作符是不可能的。这告诉我们,$mysql实例中的limit和order方法都返回一个对其所在类自身的引用即 return $this,了解了这一点,那么我们就可以实现连贯查询了。请看站长写的示例代码:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e/*\n *类功能:实现数据库的连贯查询操作\n */\n class mysql_query{\n var $tbl=’user’;//要操作的表名\n var $limit=”;//存储limit语句的变量\n var $order=”;//存储order …\u003c/code\u003e\u003c/pre\u003e"
July 8, 2012
php下用iconv函数转换字符编码的问题
"\u003cp\u003e昨天在调试 WAP 网站时发现,在增加了 GB2312 到 UTF-8 转化以后,有些页面显示不正常了——有些页面只有一半的内容,另一半被截掉了。因为被截掉的部分包含了\u003c/p\u003e\n\u003cp\u003e的后半个标签\u003c/p\u003e\n\u003cp\u003e,因此整个页面都显示不出来,而报告错误。经过猜测、尝试,最后终于把问题集中在了 iconv 函数上。在经过高人指点以后,发现这个函数的第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。但是我尝试了//TRANSLIT 和 //IGNORE 这两个后缀,效果还是不对。于是我想问题可能不是出在这里。\u003c/p\u003e\n\u003cp\u003e从 GB2312 到 UTF-8 转化应该不会有不能转化的字符,因为 UTF-8 的字符集完全包含了 GB2312 中的字符,所以我想大概是前面要转化的字符集指定错了,于是我尝试着把 GB2312 改成 GBK\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ary=addslashes(iconv(\u0026#34;GB2312\u0026#34;, …\u003c/code\u003e\u003c/pre\u003e"
February 5, 2012
在安装php的make时候,出现错误”chmod: cannot access `ext/phar/phar.phar’: No such file or directory”的解决办法
"\u003cp\u003e在对php进行configure的时候,只需要在./configure的后面加上–without-pear 即可.\u003c/p\u003e"
February 5, 2012
编译php出错:error while loading shared libraries: libmysqlclient.so.18: cannot open shared object f
"\u003cp\u003e近日在编译php,make的时候出错:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e/root/dev/php-5.3.6/sapi/cli/php: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory\nmake: *** [ext/phar/phar.php] Error 127\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e===================================================\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e网上找到的解决办法是:\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e照做后仍然报错,原因是该方法适用于32位系统,64位系统应使用下面的这行\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e另外:在编译的时候,不写mysql的路径,而使用mysqlnd代替,也可解决该问题的出现。\u003c/p\u003e"
December 12, 2011
Centos64位系统下”configure: error: libjpeg.(a|so) not found”的解决办法
"\u003cp\u003e刚刚发布了Centos6.1新版本.就下载了64位的版本进行测试.\u003c/p\u003e\n\u003cp\u003e按照原来的lnmp安装教程.在安装php的过程中.执行到./configure 这一步的时候.竟然提示”configure: error: libjpeg.(a|so) not found”这项错误.明明已经安装过了libjpeg 和libjpeg-devel了.可这里仍然提示找不到库文件.很明显是路径的问题.默认会在/usr/lib/目录里查找相应的文件.但用whereis libjpeg发现.libjpeg被安装在了/usr/lib64/目录里.\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e[root@bogon php-5.2.17]# whereis libjpeg\nlibjpeg: /usr/lib/libjpeg.so /usr/lib64/libjpeg.so\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e1.如果提示”configure: error: libjpeg.(a|so) not found”错误\u003c/p\u003e\n\u003cp\u003e所以这里我们需要复制一份libjpeg.so到/usr/lib/目录里才可以.再次执行./configure命令即可.\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ecp -frp /usr/lib64/libjpeg.* …\u003c/code\u003e\u003c/pre\u003e"
November 10, 2011
php里函数名或者方法名前加 & 符号表示的意思
"\u003ch1 id=\"先阅读手册\"\u003e先阅读手册\u003c/h1\u003e\n\u003cp\u003e从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符**\u0026amp;**\u003c/p\u003e\n\u003cp\u003e例子 17-13. 由函数返回一个引用\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;?php\nfunction \u0026amp;returns_reference()\n{\nreturn $someref;\n}\n\n$newref =\u0026amp; returns_reference();\n?\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e有关引用的更多信息, 请查看引用的解释。\u003c/p\u003e\n\u003cp\u003e在来看一段很多开源代码喜欢用的单例注册模式\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;?php\nclass a{}\nclass b{}\nfunction \u0026amp; aa($name)\n{\n static $class = array();\n if(!$class[$name])\n {\n $class[$name] = new $name();\n }\n return $class[$name];\n}\n$a = \u0026amp; aa(\u0026#39;a\u0026#39;);\n$b = \u0026amp; aa(\u0026#39;b\u0026#39;);\n\n$a2 = \u0026amp; aa(\u0026#39;a\u0026#39;);\n$b2 = …\u003c/code\u003e\u003c/pre\u003e"
November 6, 2011
php5.3不支持ZendOptimizer的解决办法(Zend Guard Loader)
"\u003cp\u003e[ \u003cstrong\u003e2013-04-04]好像ZendGuard-5_5_0版本找不到这个dll文件的\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ePHP 5.3 下,Zend Optimizer 已经被全新的 \u003cstrong\u003eZend Guard Loader\u003c/strong\u003e 取代\u003c/p\u003e\n\u003cp\u003e已经Zend Optimer的代替品为 Opcache,请参考: \u003ca href=\"http://blog.haohtml.com/archives/14071\"\u003ehttp://blog.haohtml.com/archives/14071\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e————————————————\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下载 Zend Guard Loader 压缩包。(官方下载地址: \u003ca href=\"http://www.zend.com/en/products/guard/downloads\"\u003ehttp://www.zend.com/en/products/guard/downloads\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e解压并提取 ZendGuardLoader.so(Linux)或 ZendLoader.dll(Windows),对应你的PHP版本。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e在你的 php.ini 文件添加下面一行,用来加载 Zend Guard Loader:\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e**Linux 和 Mac OS X: **zend_extension = 完整路径/ZendGuardLoader.so\n\u003cstrong\u003eWindows(非线程安全):\u003c/strong\u003e zend_extension = 完整路 …\u003c/p\u003e"
September 4, 2011
常用PHP安全设置加固
"\u003cp\u003e1.隐藏php版本\n2.禁用危险的php函数\n3.命令注入攻击\n4.SQL注入攻击\n5.xss攻击\n6.会话劫持攻击\n7.关闭注册全局变量\n8.上传文件\n9.远程包含、本地包含\n10.Php.ini包含补丁文件,我们可以根据需要,通过它包含或者nginx的模块\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.隐藏php版本\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eexpose_php=off\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e2.禁用危险的php函数\u003c/strong\u003e\npopen,pentl_exec,passthru,exec,system,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,show_source,escapeshellcmd,escapeshellarg,curl_exec,curl_multi_exec,parse_ini_file,assert\n至于eval函数,我们用suhosin把这些全部都加进eval的黑 …\u003c/p\u003e"
August 30, 2011
Call to undefined function curl_init()错误解决
"\u003cp\u003e提示不支持这个函数,于是在php.ini文件里启用了扩展,把前面的;去掉,重启apache,竟然不起作用.后来查找了一下,原来还需要两个dll(libeay32.dll、ssleay32.dll)文件支持,将dll复制到c:/windows/system32目录里.然后重启apache即可.\u003c/p\u003e\n\u003cp\u003e特在此记录一下.\u003c/p\u003e"
June 25, 2011
Failed to initialize storage module解决方法
"\u003cp\u003e今天更新了一下自己的cms,然后后台就提示登陆不了,报错如下:Failed to initialize storage module。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e解决方法有两种如下:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e1。在报错的文件里的session start();之前加入如下代码:ini_set(‘session.save_handler’, ‘files’); 。这种方法适合租用空间的用户使用。\u003c/p\u003e\n\u003cp\u003e2。在php.ini文件里,显式指定session的save_path(比如 c:/temp)然后重启web服务。如果服务器的管理权限属于你,那还是这样改比较方便。\u003c/p\u003e\n\u003cp\u003e原因分析:php5一个安全模式的bug,默认session的save_path是系统的临时目录,这样会要校验权限。\u003c/p\u003e\n\u003cp\u003ePHP中使用SESSION后出现Failed to initialize storage module错误的解决方法:\n在session start之前加入以下这句话\nini_set(‘session.save_handler’, ‘files’);\u003c/p\u003e"
June 6, 2011
配置PHP.INI监测服务器的脚本耗时
"\u003cp\u003e配置php.ini中的\nauto_prepend_file\nauto_append_file\n加入自动解析页面来获取执行时间\u003c/p\u003e\n\u003cp\u003e; Automatically add files before or after any PHP document.\nauto_prepend_file = monitor_prog.php\nauto_append_file = monitor_prog.php\u003c/p\u003e\n\u003cp\u003e把monitor_prog.php放到包含目录下。\u003c/p\u003e\n\u003cp\u003emonitor_prog.php\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e// print_r($_SERVER);\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eif ( ! function_exists ( ‘ getmicrotime_t ‘ ) ) {\u003c/p\u003e\n\u003cp\u003efunction getmicrotime_t(){\u003c/p\u003e\n\u003cp\u003elist ( $usec , $sec ) = explode ( ” ” , microtime ());\u003c/p\u003e\n\u003cp\u003ereturn $usec ;\u003c/p\u003e\n\u003cp\u003e// return ((float)$usec + (float)$sec);\u003c/p\u003e\n\u003cp\u003e} // end func\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e$time1 = date ( ‘ …\u003c/p\u003e"
May 28, 2011
configure: error: mcrypt.h not found. Please reinstall libmcrypt
"\u003cp\u003e今日参考以前的文章安装lnmp的时候,发现这次在安装php的时候竟然提示”configure: error: mcrypt.h not found. Please reinstall libmcrypt”,意思是,没有查找到mcrytp.h,需要安装libcrytp,以前安装了n次都没有问题的,在网上找了一个解决办法.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ewget \u003ca href=\"ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz\"\u003eftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003etar -zxvf libmcrypt-2.5.7.tar.gz\ncd libmcrypt-2.5.7\nmkdir -p /usr/local/libmcrytp\n./configure prefix=/usr/local/libmcrytp/\nmake\nmake install\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e然后再安装PHP\u003c/p\u003e"
April 19, 2011
4.1 静态方法和属性-深入PHP面向对象.模式与实践
"\u003cp\u003e摘自: \u003ca href=\"http://www.verycd.com/topics/2830432/\"\u003e深入PHP面向对象.模式与实践\u003c/a\u003e 第四章 高级特性\n\u003cstrong\u003e4.1 静态方法和属性\u003c/strong\u003e\n第2章的所有例子使用的都是对象.我们把类当作生成对象的模板,把对象作为活动组件,对象的方法可以被调用,对象的属性可以被访问.之前的例子也暗示了,面向对象编程中的实际操都是通过类的实例(而不是类本身)完成的.毕竟类仅仅是对象的模板.\u003c/p\u003e\n\u003cp\u003e事实并非如此简单.我们不仅可以通过对象访问方法和属性,还可以通过类来访问它们.这样的方法和属性属性是”静态的”(static),必须用static关键字来声明.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eclass StaticExample{\nstatic public $sNum = 0;\nstatic public function sayHello) {\nprint “hello”;\n}\n}\u003c/p\u003e\u003c/blockquote\u003e\n\u003ch1 id=\"注解static关键字是在php5中引入的在php4程序中不能使用\"\u003e==========================================\n注解:static关键字是在php5中引入的,在php4程序中不能使用.\u003c/h1\u003e\n\u003cp\u003e静态方法是以类作为作用域的函数.静态方法不能访问这个类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性.如果修改了一个静态属性,那么这个类的所有实例都能 …\u003c/p\u003e"
April 1, 2011
深入理解ob_flush和flush的区别
"\u003cp\u003eob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑…\u003c/p\u003e\n\u003cp\u003e其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情..\u003c/p\u003e\n\u003cp\u003eob_*系列函数, 是操作PHP本身的输出缓冲区.所以, ob_flush是刷新PHP自身的缓冲区.\u003c/p\u003e\n\u003cp\u003e而flush, 严格来讲, 这个只有在PHP做为apache的Module(handler或者filter)安装的时候, 才有实际作用. 它是刷新WebServer(可以认为特指apache)的缓冲区.\u003c/p\u003e\n\u003cp\u003e在apache module的sapi下, flush会通过调用sapi_module的flush成员函数指针, 间接的调用apache的api: ap_rflush刷新apache的输出缓冲区, 当然手册中也说了, 有一些apache的其他模块, 可能会改变这个动作的结果..\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。\u003c/p\u003e\n\u003cp\u003e甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape浏览器会在接受到换 …\u003c/p\u003e\u003c/blockquote\u003e"
April 1, 2011
php中ob_start函数 积累
"\u003cp\u003e确实自己写不出来,只能看看别人的经验总结。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ePHP的ob_start();用法\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e用PHP的ob_start();控制您的浏览器cache\u003c/p\u003e\n\u003cp\u003eOutput Control 函数可以让你自由控制脚本中数据的输出。它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况。输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用。\n我们先举一个简单的例子,让大家对Output Control有一个大致的印象:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eExample 1.\u003c/p\u003e\n\u003cp\u003e程序代码:\u003c/p\u003e\n\u003cp\u003eob_start(); //打开缓冲区\necho “Hellon”; //输出\nheader(“location:”); //把浏览器重定向到\nob_end_flush();//输出全部内容到浏览器\n?\u0026gt;\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e所有对header()函数有了解的人都知道,这个函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错。如果我们去掉第一行的ob_start(),再执行此程序,我们会发现 …\u003c/p\u003e"
March 31, 2011
php Safe_mode影响参数
"\u003cp\u003esafe_mode是唯一PHP_INI_SYSTEM属性,必须通过php.ini或httpd.conf来设置。要启用safe_mode,只需修改php.ini: safe_mode = On 或者修改httpd.conf,定义目录:\u003c/p\u003e\n\u003cp\u003eOptions FollowSymLinks php_admin_value safe_mode 1重启apache后safe_mode就生效了。启动safe_mode,会对许多PHP函数进行限制,特别是和系统相关的文件打开、命令执行等函数。\u003c/p\u003e\n\u003cp\u003e所有操作文件的函数将只能操作与脚本UID相同的文件\u003c/p\u003e\n\u003cp\u003e虽然safe_mode不是万能的(低版本的PHP可以绕过),但还是强烈建议打开安全模式,在一定程度上能够避免一些未知的攻击。不过启用 safe_mode会有很多限制,可能对应用带来影响,所以还需要调整代码和配置才能和谐。被安全模式限制或屏蔽的函数可以参考PHP手册。\u003c/p\u003e\n\u003cp\u003e函数名\u003c/p\u003e\n\u003cp\u003e限制\u003c/p\u003e\n\u003cp\u003edbmopen()\u003c/p\u003e\n\u003cp\u003e检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。\u003c/p\u003e\n\u003cp\u003edbase_open()\u003c/p\u003e\n\u003cp\u003e检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。 …\u003c/p\u003e"
March 31, 2011
在windows下玩apache-php不能不知的几个小设置
"\u003cp\u003e1、PHPIniDir “D:\\PHP5″\u003c/p\u003e\n\u003cp\u003e这样不用每次都把php.ini拷贝到C:\\Windows下\u003c/p\u003e\n\u003cp\u003e2、set Path=D:\\PHP5;D:\\PHP5\\ext;%Path%\u003c/p\u003e\n\u003cp\u003e这样不用每次把那些dll拷贝到C:\\Windows\\system32下\u003c/p\u003e"
March 23, 2011
freebsd+php+memcache、memcached安装和使用
"\u003cp\u003e来源: \u003ca href=\"http://www.lifecrunch.biz/archives/55\"\u003ehttp://www.lifecrunch.biz/archives/55\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"memcache-介绍\"\u003eMemcache 介绍\u003c/h2\u003e\n\u003cp\u003ememcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图 像、视频、文件以及数据库检索的结果等。Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。起初作 者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时 访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!基于memcache作者对分布式 cache的理解和解决方案。 memcache完全可以用到其他地方 比如分布式数据库, 分布式计算等领域。\u003c/p\u003e\n\u003cp\u003eMemcache官方网站: …\u003c/p\u003e"
January 19, 2011
用PHP命令行控制脚本[CLI]
"\u003cp\u003eCLI :Command-Line Script(CLI – Command-Line Interface) //翻译;命令行接口\u003c/p\u003e\n\u003cp\u003e字串5\u003c/p\u003e\n\u003cp\u003ePHP CLI(Command Line Interface). \u003ca href=\"http://www.php.net/\"\u003ehttp://www.php.net/\u003c/a\u003e 预设支援CLI 了,什么是CLI,也就是Command Line Interface,简单的说,就是让你可以在系统上当shell 来跑。 如果还不懂,简单的说,就像你写perl 程式一样:\n#!/usr/local/bin/php\necho “Hello World!”;\n?\u0026gt;\u003c/p\u003e\n\u003cp\u003e字串3\n———————————————————官方[PHP 手册]叙述:\u003c/p\u003e\n\u003cp\u003e从版本 4.3.0 开始,PHP 提供了一种新类型的 SAPI(Server Application Programming Interface,服务端应用编程端口)支持,名为 CLI,意为 Command Line Interface,即命令行接口。顾名思义,该 SAPI 模块主要用作 PHP 的开发外壳应用。CLI SAPI 和其它 SAPI 模块相比有很多的不同之处,我们将在本章 …\u003c/p\u003e"
December 20, 2010
php中is_file和file_exists效率的比较
"\u003cp\u003e下面是测试代码,分别循环10000次:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e$start_time = get_microtime();\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003efor($i=0;$i\u0026lt;10000;$i++)\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e{\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eif(is_file(‘url.txt’)) {\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e//do nothing;\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e}\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e}\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eecho ‘is_file耗时–\u0026gt;’.(get_microtime() – $start_time).'\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e’;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e$start_time = get_microtime();\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003efor($i=0;$i\u0026lt;10000;$i++)\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e{\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eif(file_exists(‘url.txt’)) {\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e//do nothing;\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e}\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e}\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eecho ‘file_exits–\u0026gt;’.(get_microtime() – $start_time).'\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e’;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003efunction get_microtime()//时间\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e{\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003elist($usec, $sec) = explode(‘ ‘, microtime()); …\u003c/p\u003e\u003c/blockquote\u003e"
December 20, 2010
50个非常有用的PHP工具
"\u003ch3 id=\"php是使用最为广泛的开源服务器端脚本语言之一当然php并不是速度最快的但它却是最常用的脚本语言这里有50个有益的php工具可以大大提高你的编程工作\"\u003ePHP是使用最为广泛的开源服务器端脚本语言之一,当然PHP并\u003ca href=\"http://izumi.plan99.net/blog/index.php/2008/01/17/ruby-vs-php-performance/\"\u003e不是速度最快\u003c/a\u003e的,但它却是\u003ca href=\"http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html\"\u003e最常用的脚本语言\u003c/a\u003e。这里有50个有益的PHP工具,可以大大提高你的编程工作:\u003c/h3\u003e\n\u003ch3 id=\"调试工具\"\u003e调试工具\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://code.google.com/p/webgrind/\"\u003eWebgrind\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://xdebug.org/index.php\"\u003eXdebug\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://gubed.mccabe.nu/\"\u003eGubed PHP Debugger\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.php-debugger.com/dbg/\"\u003eDBG\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.php-debug.com/www/\"\u003ePHP_Debug\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://sourceforge.net/projects/php-dyn/\"\u003ePHP_Dyn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.bluestatic.org/software/macgdbp/\"\u003eMacGDBp\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"测试和优化工具\"\u003e测试和优化工具\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://www.phpunit.de/\"\u003ePHPUnit\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.simpletest.org/\"\u003eSimpleTest\u003c/a\u003e\n\u003ca href=\"http://www.simpletest.org/\"\u003e\u003cimg src=\"http://www.simpletest.org/images/simpletest-logo.png\" alt=\"Simpletest\"\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://selenium-rc.openqa.org/\"\u003eSelenium\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://matrix.squiz.net/developer/tools/php_cs\"\u003ePHP_CodeSniffer\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://dbug.ospinto.com/\"\u003edBug\u003c/a\u003e\n\u003ca href=\"http://dbug.ospinto.com/\"\u003e\n\u003cimg src=\"http://www.javaeye.com/upload/attachment/70647/69c5a918-6d6b-36fc-a619-1f3e0175fdf4.jpg\" alt=\"\"\u003e\n\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.coderholic.com/php-profile-class/\"\u003ePHP Profile Class\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"文档工具\"\u003e文档工具\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://phpdoc.org/\"\u003ephpDocumentor\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://phpdox.net/\"\u003ePHP DOX\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"安全工具\"\u003e安全工具\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://www.phpcaptcha.org/\"\u003eSecurimage\u003c/a\u003e :验证码工具。\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://trac.anl.gov/scavenger/wiki/WikiStart\"\u003eScavenger\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://php-ids.org/\"\u003ePHP-IDS\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.evaria.com/2007/pixy-the-php-security-scanner/\"\u003ePixy\u003c/a\u003e :代码检查工具。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"图形处理\"\u003e图形处理\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://www.maani.us/charts4/\"\u003ePHP/SWF Charts\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://pchart.sourceforge.net/index.php\"\u003epChart – a chart-drawing PHP library\u003c/a\u003e\n\u003ca href=\"http://simplepie.org/\"\u003e\n\u003cimg src=\"http://www.javaeye.com/upload/attachment/70649/60c3f0c2-7ac6-3c82-90d7-6584e631eb24.jpg\" alt=\"\"\u003e\n\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://wideimage.sourceforge.net/wiki/MainPage\"\u003eWideImage\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.magickwand.org/\"\u003eMagickWand For PHP\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"代码优化\"\u003e代码优化\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://pear.php.net/package/PHP_Beautifier\"\u003ePHP_Beautifier\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.waterproof.fr/products/phpCodeBeautifier/\"\u003ePHPCodeBeautifier\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://qbnz.com/highlighter/\"\u003eGeSHi – Generic Syntax Highlighter\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"版本控制系统\"\u003e版本控制系统\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://phing.info/trac/\"\u003ePhing …\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e"
November 18, 2010
PHP autoload 机制
"\u003cp\u003e\u003cstrong\u003e1\u003c/strong\u003e**、简介******\u003c/p\u003e\n\u003cp\u003ePHP5中引入了类的自动装载(autoload)机制。autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e例子:\u003c/strong\u003e****\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e/* autoload.php */\nfunction __autoload($classname) {\nrequire_once ($classname . “class.php”);\n}\n$person = new Person(”Altair”, 6);\nvar_dump ($person);\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e通常PHP5在使用一个类时,如果发现这个类没有加载,就会自动运行__autoload()函数,在这个函数中我们可以加载需要使用的类。\u003c/p\u003e\n\u003cp\u003eautoload至少要做三件事情,\u003cstrong\u003e第一件事是根据类名确定类文件名\u003c/strong\u003e,\u003cstrong\u003e第二件事是确定类文件所在的磁盘路径\u003c/strong\u003e(在我们的例子是最简单的情况,类与调用它们的 PHP程序文件在同一个文件夹下),\u003cstrong\u003e第三件事是将类从磁盘文件中加载到系统中\u003c/strong\u003e。第三步最简单,只需要使用include/require即可。要实现第一 步,第二步的 …\u003c/p\u003e"
November 17, 2010
牛人写的. 高级PHP应用程序漏洞审核技术
"\u003cp\u003e一个安全界的牛人写的. 很不错..\n\u003cstrong\u003e[目录]\u003c/strong\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e前言\u003c/li\u003e\n\u003cli\u003e传统的代码审计技术\u003c/li\u003e\n\u003cli\u003ePHP版本与应用代码审计\u003c/li\u003e\n\u003cli\u003e其他的因素与应用代码审计\u003c/li\u003e\n\u003cli\u003e扩展我们的字典\n5.1 变量本身的key\n5.2 变量覆盖\n5.2.1 遍历初始化变量\n5.2.2 parse_str()变量覆盖漏洞\n5.2.3 import_request_variables()变量覆盖漏洞\n5.2.4 PHP5 Globals\n5.3 magic_quotes_gpc与代码安全\n5.3.1 什么是magic_quotes_gpc\n5.3.2 哪些地方没有魔术引号的保护\n5.3.3 变量的编码与解码\n5.3.4 二次攻击\n5.3.5 魔术引号带来的新的安全问题\n5.3.6 变量key与魔术引号\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e5.4 代码注射\n5.4.1 PHP中可能导致代码注射的函数\n5.4.2 变量函数与双引号\n5.5 PHP自身函数漏洞及缺陷\n5.5.1 PHP函数的溢出漏洞\n5.5.2 PHP函数的其他漏洞\n5.5.3 session_destroy()删除文件漏洞\n5.5.4 随机函数\n5.6 特殊字符\n5.6.1 截断\n5.6.1.1 include …\u003c/p\u003e"
November 8, 2010
PHP autoload机制详解
"\u003cp\u003e\u003cstrong\u003e(1) autoload机制概述\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利。这也是OO设计的基本思想之一。在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可。下面是一个实际的例子:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e/* Person.class.php */\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eclass Person {\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003evar $name, $age;\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003efunction __construct ($name, $age)\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e{\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e$this-\u0026gt;name = $name;\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e$this-\u0026gt;age = $age;\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e}\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e}\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e?\u0026gt;\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e/* no_autoload.php */\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003erequire_once (”Person.class.php”);\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e$person = new Person(”Altair”, 6);\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003evar_dump ($person);\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e?\u0026gt;\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e在这个例子 …\u003c/p\u003e"
October 15, 2010
Linux中创建静态库和动态库
"\u003cp\u003e\u003cstrong\u003e函数库分为静态库和动态库两种。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。\u003c/p\u003e\n\u003cp\u003e动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。\u003c/p\u003e\n\u003cp\u003e程序1: hello.h\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#ifndef HELLO_H\u003c/p\u003e\n\u003cp\u003e#define HELLO_H\u003c/p\u003e\n\u003cp\u003evoid hello(const char *name);\u003c/p\u003e\n\u003cp\u003e#endif //HELLO_H\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e程序2: hello.c\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#include\u003c/p\u003e\n\u003cp\u003evoid hello(const char *name)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003eprintf(“Hello %s!\\n”, name);\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e程序3: main.c\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#include “hello.h”\u003c/p\u003e\n\u003cp\u003eint main()\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003ehello(“everyone”);\u003c/p\u003e\n\u003cp\u003ereturn 0;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e无论动态库还是静态库都需要用到.o文件来生成,先编译生成.o文件。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e# gcc -c hello.c\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e1:创建静态库\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将创建的静态库名为myhello,则静态库文件名就是libmyhello.a。 …\u003c/p\u003e"
September 23, 2010
Suhosin介绍-用Suhosin加强PHP脚本语言安全性
"\u003cp\u003ePHP是一种非常流行之网站脚本语言,但是它本身所固有之安全性是非常薄弱。本文讲述了PHP增强计划(Hardened-PHP project)和新之Suhosi计划,Suhosin提供了增强之PHP之安全配置。\u003c/p\u003e\n\u003cp\u003ePHP是带有争论地但又是最流行之一种网站脚本语言。它之所以流行,是因为它低廉之价格,然而,这低廉之价格导致用PHP写之网站应用程序越来越多之同时也越来越多之展现出PHP本身在安全上之脆弱,这种安全特性显示出PHP是极不可靠,不过同时对这个脚本语言本身而言它又是非常灵活之,使用它就能很容易之实现代码,不过这些代码都是臃肿之且不安全之,虽然是这样它还是一直都拥有很多之使用者。你可以根据实际情况来假设,一次又一次,各种应用软件都体现了这种脆弱性:容易受到SQL注入、跨站脚本、任意执行指令等等之攻击。\u003c/p\u003e\n\u003cp\u003e因为象safe_mode和open_basedir这样内置之PHP安全措施将被忽略,PHP增强计划创建之PHP更具有安全性,同时也对PHP进行校验检查。最初,这些是由增强之PHP补丁完成之,这些补丁需要修补并重新编译PHP自身。最近,PHP增强计划发布了一个名为Suhosin之新工程。 …\u003c/p\u003e"
September 23, 2010
ImageMagick及PHP的imagick扩展的安装及配置
"\u003cp\u003e在看在 ”\n\u003ca href=\"http://blog.haohtml.com/index.php/archives/5791\"\u003e基于CentOS 5.5 搭建nginx +php +php-fpm+mysql高性能php平台\u003c/a\u003e“的1.7的时候,发现以下两个包,\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ewget \u003ca href=\"http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz\"\u003ehttp://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz\u003c/a\u003e\nwget \u003ca href=\"http://pecl.php.net/get/imagick-2.3.0.tgz\"\u003ehttp://pecl.php.net/get/imagick-2.3.0.tgz\u003c/a\u003e\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e不太清楚两个包的区别是什么的,在网上查了一下,注意区别如下:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://pecl.php.net/package/imagick\"\u003eimagick\u003c/a\u003e 是一个 \u003ca href=\"http://www.php.net/\"\u003ePHP\u003c/a\u003e 的扩展,用 \u003ca href=\"http://www.imagemagick.org/\"\u003eImageMagick\u003c/a\u003e 提供的API来进行图片的创建与修改,不过这些操作已经包装到扩展imagick中去了,最终调用的是ImageMagick提供的API.\u003c/p\u003e\n\u003cp\u003eImageMagick是一套软件系列,主要用于图片的创建、编辑以及转换等,详细的解释见ImageMagick的官方网站 \u003ca href=\"http://www.imagemagick.org/\"\u003ehttp://www.imagemagick.org/\u003c/a\u003e,ImageMagick与GD的性能要高很多,如果是在处理大量的图片时更加能体现ImageMagick的性能。\u003c/p\u003e\n\u003cp\u003e英文原文介绍如下:\u003c/p\u003e\n\u003cp\u003eimagick is a native …\u003c/p\u003e"
September 3, 2010
php中抽象类和接口的概念和区别(二)
"\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e一个子类如果implements一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可,这是抽象类的一个优点\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e如果一个接口中定义的方法名改变了,那么所有实现此接口的子类显然将无法通过编译,因为它们所实现的方法名已经不存在了,这是接口的一个缺点;而抽象类就不存在这个问题,只是为子类添加了一个新的方法(接口中旧的方法)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e看前面两点,似乎抽象类要比接口有着更多的优点,但它却有着一个难以弥补的缺点:就是一个子类只能有一个父类。A extends B . 这样A就拥有了B的所有方法和功能,但当A还想拥有C的功能的时候。就不能通过 A extends C 来实现, 而需要走一些弯路。目前系统架构的趋势就是由针对抽象(借口,抽象类)而不是具体编程,并且将功能尽可能的细分。 这就需要通过实现多个接口的方式来实现,显然,抽象类无法提供这样的功能。从系统重构的角度来说,一个具体类抽象出接口是十分方便的。只需要写一个接口,里面定义具体类的所有方法,然后在为这个具体类implement这个接口就可以了。而抽象类就要复杂的多,比如说 B extends …\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e"
September 3, 2010
php中抽象类和接口的概念和区别(一)
"\u003cp\u003einterface a {\n//接口内不可以定义属性\n//所有方法必须为抽象方法(既不实现,只定义)\u003c/p\u003e\n\u003cp\u003epublic function method1($param);\nprotected function method2($param);\n}\u003c/p\u003e\n\u003cp\u003e//接口不可被实现,例如\n$instance = new a; //错误\u003c/p\u003e\n\u003cp\u003e//接口实现类必须实现接口的所有方法,且方法参数也必须相同\n//例如\nclass b implaments a{\n//错误,封装应与接口相同\nprotected function method1($param)\n{\n//somecode here…\n}\u003c/p\u003e\n\u003cp\u003e//错误,参数应与接口定义相同\nprotected function method2()\n{\u003c/p\u003e\n\u003cp\u003e}\n}\u003c/p\u003e\n\u003cp\u003e接口功能是实现类似C++中的多重继承的,但其语法更为明了\u003c/p\u003e"
September 3, 2010
PHP的接口与抽象类
"\u003cp\u003e\u003cstrong\u003ePHP\u003c/strong\u003e的接口:为了实现特定功能而预留的类似类的一种类型。接口的主要目的:提供给类类似于模板的框架,以方便类的构建。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e在PHP****中定义接口\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在\u003cstrong\u003ePHP\u003c/strong\u003e中定义接口的形式如下:\u003c/p\u003e\n\u003cp\u003eInterface interfaceName\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003eConst 1;\u003c/p\u003e\n\u003cp\u003e……\u003c/p\u003e\n\u003cp\u003eConst 2;\u003c/p\u003e\n\u003cp\u003eFunction methodName1();\u003c/p\u003e\n\u003cp\u003e……\u003c/p\u003e\n\u003cp\u003eFunction methodName2();\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ePHP****中单一接口的实现\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e实现接口的语法如下:\u003c/p\u003e\n\u003cp\u003eClass class_name implements interface_name\u003c/p\u003e\n\u003cp\u003e例如:\u003c/p\u003e\n\u003cp\u003eid = $id;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003efunction getID()\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003ereturn $this-\u0026gt;id;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003efunction setName($name)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;name = $name;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003efunction getName()\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003ereturn $this-\u0026gt;name;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003efunction otherFunc() //这是一个接口中不存在的方法\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003eecho “Test”;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e?\u0026gt;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ePHP****中多重接口的实现\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在** \u003ca href=\"http://www.phpdo.net/\" title=\"php\"\u003ePHP …\u003c/a\u003e\u003c/p\u003e"
August 26, 2010
linux下php多线程的妙用
"\u003cp\u003e开始用php写后台服务一段时间了.也是在这样的驱动下,不断的学习php语法,体验这一原来一直以为神秘且敬而远之的神奇语言的魅力.最初看php多线程的资料是为了提高程序的处理能力,充分发挥linux多任务的优势.不曾想多线程没用成反到是带来了一系列的意外收获.让之后的许多问题迎刃而解,不敢独享特一一道来.\n本文所讲的东西是源自php的pcntl_fork函数.因为这个函数依赖操作系统fork的实现,所以本文所讲的东西只适用于linux/unix.ok,那么先看看这个函数的用法吧. \u003ca href=\"http://cn.php.net/manual/en/function.pcntl-fork.php\"\u003ephp手册\u003c/a\u003e 上是这么说的:\u003c/p\u003e\n\u003cp\u003e$pid = pcntl_fork();\u003c/p\u003e\n\u003cp\u003eif ($pid == -1) {\u003c/p\u003e\n\u003cp\u003edie(‘could not fork’);\u003c/p\u003e\n\u003cp\u003e} else if ($pid) {\u003c/p\u003e\n\u003cp\u003e// we are the parent\u003c/p\u003e\n\u003cp\u003epcntl_wait($status); //Protect against Zombie children\u003c/p\u003e\n\u003cp\u003e} else {\u003c/p\u003e\n\u003cp\u003e// we are the child\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e?\u0026gt;\u003c/p\u003e\n\u003cp\u003e通过pcntl_fork创建一个子进程,如果返回值是-1的话,那么说明子进程创建失败.创建成功的进 …\u003c/p\u003e"
August 17, 2010
$HTTP_RAW_POST_DATA 和 $_POST的区别
"\u003cp\u003e这是手册里写的\u003c/p\u003e\n\u003cp\u003e总是产生变量包含有原始的 POST 数据。否则,此变量仅在碰到未识别 MIME 类型的数据时产生。不过,访问原始 POST 数据的更好方法是 php://input。$HTTP_RAW_POST_DATA 对于 enctype=”multipart/form-data” 表单数据不可用。\u003c/p\u003e\n\u003cp\u003e问题: $HTTP_RAW_POST_DATA == $_POST 吗?\u003c/p\u003e\n\u003cp\u003e照手册所写 ,答案应该就为否。\n假如不一样的话,他们的区别是什么呢?\u003c/p\u003e\n\u003cp\u003e我知道答案了,如下:\u003c/p\u003e\n\u003cp\u003eThe RAW / uninterpreted HTTP POst information can be accessed with:\n$GLOBALS[‘HTTP_RAW_POST_DATA’]\u003c/p\u003e\n\u003cp\u003eThis is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).\u003c/p\u003e\n\u003cp\u003e也就是说,基本上$GLOBALS[‘HTTP_RAW_POST_DATA’] 和 $_POST是一样的。但是如 …\u003c/p\u003e"
August 17, 2010
PHP输入流php://input
"\u003cp\u003e在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组。所以,这里主要探讨php输入流php://input\u003c/p\u003e\n\u003cp\u003e对于\u003ca href=\"http://php.net/manual/en/wrappers.php.php\"\u003ephp://input\u003c/a\u003e介绍,PHP官方手册文档有一段话对它进行了很明确地概述。\u003c/p\u003e\n\u003cp\u003e“php://input allows you to read raw POST data. It is a less memory intensive alternative to \u003ca href=\"http://www.php.net/manual/en/reserved.variables.httprawpostdata.php\"\u003e$HTTP_RAW_POST_DATA\u003c/a\u003e and does not need any special php.ini directives. php://input is not available with \u003cem\u003eenctype=”multipart/form-data”\u003c/em\u003e.\n翻译过来,是这样:\n“php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置。php://input不能用于enctype=multipart/form-data”\u003c/p\u003e\n\u003cp\u003e我们应该怎 …\u003c/p\u003e"
July 27, 2010
PHP Warning: date() [function.date]: It is not safe是什么问题
"\u003cp\u003e\u003cstrong\u003e在用PHP5.3以上的PHP版本时,只要是涉及时间的会报一个”\u003c/strong\u003e PHP Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are \u003cem\u003erequired\u003c/em\u003e to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘UTC’ for ‘8.0/no DST’ instead in **“这样的错。如何解决呢?**\u003cstrong\u003e实际上,从 PHP 5.1.0 ,当对使用date()等函数时,如果timezone设置不正确,在每一次调用时间函数时,都会产生\u003ccode\u003eE_NOTICE\u003c/code\u003e 或者 \u003ccode\u003eE_WARNING\u003c/code\u003e …\u003c/strong\u003e\u003c/p\u003e"
June 11, 2010
php 静态类和方法
"\u003cp\u003e\u003ccode\u003e\u0026lt;?php\u0026lt;br /\u0026gt; /*\u0026lt;br /\u0026gt; //静态属性 或静态方法不需要所在类被实例化就可以使用\u0026lt;br /\u0026gt; //使用方法:类名::静态方法名(静态属性名)\u0026lt;br /\u0026gt; //例子:static.php\u0026lt;br /\u0026gt; */\u0026lt;br /\u0026gt; class Math\u0026lt;br /\u0026gt; {\u0026lt;br /\u0026gt; public static $PI=3.14; //定义静态属性\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e//public $PI=3.14; //静态方法不能调用非静态的属性\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e`//定义一个静态方法,求两个数中的最大值\u003c/p\u003e\u003c/p\u003e\n\u003cp\u003epublic static function getMax($num1,$num2){ //static 关键字\u003c/p\u003e\n\u003cp\u003ereturn $num1 \u003e $num2 ? $num1 : $num2;\u003cbr /\u003e\n}\u003c/p\u003e\n\u003cp\u003e// 定义一个静态方法,求圆面积\u003c/p\u003e\n\u003cp\u003epublic static function getCircleArea($radius){\u003cbr /\u003e\n//return Math::$PI * $radius * $radius;//也行\u003c/p\u003e\n\u003cp\u003ereturn …\u003c/p\u003e\u003c/p\u003e"
June 11, 2010
PHP生成静态页面类
"\u003cp\u003eclass Shtml\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003evar $Templet;\u003c/p\u003e\n\u003cp\u003evar $DataSource;\u003c/p\u003e\n\u003cp\u003evar $Dir;\u003c/p\u003e\n\u003cp\u003evar $fileName;\u003c/p\u003e\n\u003cp\u003evar $mod;\u003c/p\u003e\n\u003cp\u003evar $handle;\u003c/p\u003e\n\u003cp\u003efunction Shtml($fileName=””)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;fileName=$fileName;\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;mod=”wb”;\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;handle=false;\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;Templet = “”;\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;DataSource = array();\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;Dir = “”;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e/// \u0026lt;描述\u0026gt;\u003c/p\u003e\n\u003cp\u003e/// 绑定数据源,参数为一数组。\u003c/p\u003e\n\u003cp\u003e///\u003c/p\u003e\n\u003cp\u003efunction BindData($arr)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;DataSource = $arr;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e/// \u0026lt;描述\u0026gt;\u003c/p\u003e\n\u003cp\u003e/// 设置文件存放路径。\u003c/p\u003e\n\u003cp\u003e///\u003c/p\u003e\n\u003cp\u003efunction SetDir($dir)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;Dir = $dir;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003efunction SetFileName($fileName)\u003c/p\u003e\n\u003cp\u003e{ …\u003c/p\u003e"
June 11, 2010
php设计模式介绍之注册模式
"\u003cp\u003e\u003cstrong\u003e《PHP 设计模式介绍》第五章 注册模式\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我们通常认为避免使用全局变量是一种好的选择,因此,对象经常被作为参数从一段代码传递到另一段。但是传递实例的一个问题就是对象有时候不知道将要 传递给谁——?经过一个函数后才被传递到真正需要这个对象的函数。\u003c/p\u003e\n\u003cp\u003e为了编写,阅读,修改代码的方便,最好能够减少不同对象的数量,并且能够将大量广泛使用的对象统一表示为一个单一,常用的对象。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e问题\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003e你如何通过单一的全局的对象来获取对其它对象的引用?\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e解决方案\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003e“注册模式”就像“对象的电话簿”——储存并且能够取回对对象引用的登记簿。(注:PHP中的“联合数组”也起到了类似“电话簿”的功能。事实上, “注册模式”就是围绕PHP中强大的数组完成的。)“注册模式”的一些特性经常被包含在“单一模式”中(参见第四章),使得“注册模式”成为你整个应用信 息的决定性来源。\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e注释:“注册模式”类主要参考了Martin Fowlerdescribes用java语言实现的Patterns of Enterprise Application Architecture(企业应用程序体系结构模型)。Marcus Baker谢了一篇详细 …\u003c/em\u003e\u003c/p\u003e"
May 14, 2010
PHP使用接口实现多重继承
"\u003cp\u003ePHP类虽然是单继承的,但是可以通过其它特殊的方式实现多重继承,比如使用接口实现,只要把类的特征抽象为接口,并通过实现接口的方式让对象有多重身 份,通过这样就可以模拟多重继承了。\u003c/p\u003e\n\u003cp\u003e下面就是一个用接口模拟多重继承的例子,源代码如下:\u003c/p\u003e\n\u003col start=\"2\"\u003e\n\u003cli\u003e\n\u003cp\u003einterface UserInterface{ // 定义User的接口\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003efunction getname();\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003einterface TeacherInterface{ //teacher 相关接口\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003efunction getLengthOfService();\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eclass User implements UserInterface { // 实现UserInterface接口\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eprivate$name = “tom”;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003epublicfunction getName(){\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ereturn$this-\u0026gt;name;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eclass Teacher implements TeacherInterface { // 实现TeacherInterface …\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e"
May 14, 2010
在smarty中增加类似foreach的功能自动加载数据
"\u003cp\u003e在smarty中使用自定义插件来加载数据(见:), 在使用的时候还是感觉不够方便,灵机一动就想写成类似foreach那种标签:\u003c/p\u003e\n\u003cp\u003e第一步:在Smarty_Compiler.class.php的_compile_tag函数中增加:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.csdn.net/yycai/archive/2009/12/28/5092770.aspx#\"\u003eview\u003cbr\u003e\n\u003cbr\u003e\nplain\u003c/a\u003e \u003ca href=\"http://blog.csdn.net/yycai/archive/2009/12/28/5092770.aspx#\"\u003ecopy\u003cbr\u003e\n\u003cbr\u003e\nto clipboard\u003c/a\u003e \u003ca href=\"http://blog.csdn.net/yycai/archive/2009/12/28/5092770.aspx#\"\u003eprint\u003c/a\u003e \u003ca href=\"http://blog.csdn.net/yycai/archive/2009/12/28/5092770.aspx#\"\u003e?\u003c/a\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e//加载\u003c/p\u003e\n\u003cp\u003e数据的开始标签\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ecase‘load’:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e$this-\u0026gt;_push_tag(‘load’);\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ereturn$this-\u0026gt;_complie_load_start($tag_args);\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ebreak;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e//加载数据的结束标签\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ecase‘/load’:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e$this-\u0026gt;_pop_tag(‘load’);\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ereturn“”;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ebreak;\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e第二步:增加一个方法:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.csdn.net/yycai/archive/2009/12/28/5092770.aspx#\"\u003eview\u003cbr\u003e\n\u003cbr\u003e\nplain\u003c/a\u003e \u003ca href=\"http://blog.csdn.net/yycai/archive/2009/12/28/5092770.aspx#\"\u003ecopy\u003cbr\u003e\n\u003cbr\u003e\nto clipboard\u003c/a\u003e \u003ca href=\"http://blog.csdn.net/yycai/archive/2009/12/28/5092770.aspx#\"\u003eprint\u003c/a\u003e \u003ca href=\"http://blog.csdn.net/yycai/archive/2009/12/28/5092770.aspx#\"\u003e?\u003c/a\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e/**\u003c/li\u003e\n\u003cli\u003e* 加载数据\u003c/li\u003e\n\u003cli\u003e* @param $tag_args\u003c/li\u003e\n\u003cli\u003e*/\u003c/li\u003e\n\u003cli\u003efunction _complie_load_start($tag_args)\u003c/li\u003e\n\u003cli\u003e{\u003c/li\u003e\n\u003cli\u003e$key = …\u003c/li\u003e\u003c/ol\u003e"
May 14, 2010
Smarty高级特性 – 用户自定义函数使用 SMARTY:: register_function;
"\u003cp\u003eSmarty高级 特性 – 用户自定义函数 使用 SMARTY:: register_function;\u003c/p\u003e\n\u003cp\u003e前言:\n很久不用smarty了,因为大多数项目都是比较轻量型的。前段时间 笔者接了个还算可以的项目,下面有几个程序员 ,与一个美工组为项目团队。为了做快速的布署应用 ,也为了小组成员能形成一个统一的view层的控制,选择了smarty。发现smarty果然还是那么的强大,那么的很黄很暴力。\n作者:无喱头\u003c/p\u003e\n\u003cp\u003e故事背景:\n小张是个很漂亮的美工MM,与无喱头搭档已经很多年。请不要误解,无喱头是有老婆女儿的,他们之前没有任何的暧昧关系,仅仅是同事,或者是上下级。\n在两人的多年合作过程中,在很多地方,已经形成了一种默契。在很多时候,喱头提供封装好的php函数,然后通过一些技术 上的修改,可以直接使用小张在模板里引入php函数,这样可以很方便的把模板切成很多小块,便于维护。并且由于可以自定义一些关键字,小张可能很快的取出 想要的一些数据 。\n比如:\n{phpsoho “sort=article\u0026amp;order=ID …\u003c/p\u003e"
April 28, 2010
一个朋友去新浪乐居面试时的面试题(PHP)
"\u003cp\u003e以下是他回忆当时的笔试题\u003c/p\u003e\n\u003cp\u003e一、\u003c/p\u003e\n\u003cp\u003e1、有如下HTML:\u003c/p\u003e\n\u003cp\u003e1)用js取得________方法取得该对象;\u003c/p\u003e\n\u003cp\u003e2)用________属性取得属性title的属性值;\u003c/p\u003e\n\u003cp\u003e3)用________方法取得属性sina_title的属性值;\u003c/p\u003e\n\u003cp\u003e2、php中对数组序列化和反序列化的函数分别是______和_______;\u003c/p\u003e\n\u003cp\u003e3、rawurlencode和urlencode函数的区别是__________________;\u003c/p\u003e\n\u003cp\u003e4、php中过滤HTML的函数是_______,转义的函数是____________;\u003c/p\u003e\n\u003cp\u003e5、写出用正则把HTML中的js脚本过滤掉;\u003c/p\u003e\n\u003cp\u003e6、SQL中LEFT JOIN的含义是______________;\u003c/p\u003e\n\u003cp\u003e如果有一个表tl_user存储学生ID和名字name,另外一个表tl_score存储学生ID、科目subject和成绩score(有的学生没有考试成绩),写出sql语句打印出学生名字和各科总成绩;\u003c/p\u003e\n\u003cp\u003e7、写出三个调用系统命令的函数;\u003c/p\u003e\n\u003cp\u003e8、josn处理数组的函数是;\u003c/p\u003e\n\u003cp\u003e9、php中判断变量是否被设置是函数是_______;判断是否为空的是___________; …\u003c/p\u003e"
April 28, 2010
PHP图片处理剪切类
"\u003cp\u003e\u0026lt; ?php\u003c/p\u003e\n\u003cp\u003e/**\u003c/p\u003e\n\u003cp\u003e* 基本图片处理,用于完成图片缩入,水印添加\u003c/p\u003e\n\u003cp\u003e* 当水印图超过目标图片尺寸时,水印图能自动适应目标图片而缩小\u003c/p\u003e\n\u003cp\u003e* 水印图可以设置跟背景的合并度\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e* Copyright(c) 2005 by ustb99. All rights reserved\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e* To contact the author write to {@link mailto:[email protected]}\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e@author 偶然\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e@version $Id: thumb.class.php,v 1.9 2006/09/30 09:31:56 zengjian Exp $\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e@package system\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e*/\u003c/p\u003e\n\u003cp\u003e/**\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThumbHandler\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e@access public\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e*/\u003c/p\u003e\n\u003cp\u003e/*\u003c/p\u003e\n\u003cp\u003e使用方法:\u003c/p\u003e\n\u003cp\u003e自动裁切:\u003c/p\u003e\n\u003cp\u003e程序会按照图片的尺寸从中部裁切最大的正方形,并按目标尺寸进行缩略\u003c/p\u003e\n\u003cp\u003e$t-\u0026gt;setSrcImg(“img/test.jpg”);\u003c/p\u003e\n\u003cp\u003e$t-\u0026gt;setCutType(1);//这一句就OK …\u003c/p\u003e"
April 28, 2010
PHP生成word文档格式试卷的代码
"\u003cp\u003ePHP生 成word文档的代码,这个是用来生产试卷的简单PHP代码\u003c/p\u003e\n\u003cp\u003e以下为引用的内容:试卷生成 difficulty.”\u003c/p\u003e\n\u003cp\u003e”;\n$cout.=” “.$row-\u0026gt;content.”\u003c/p\u003e\n\u003cp\u003e”;\n}//while\u003c/p\u003e\n\u003cp\u003e?\u0026gt;\n’;\n}\u003c/p\u003e\n\u003cp\u003efunction save($path)\n{\u003c/p\u003e\n\u003cp\u003eprint “”;\n$data = ob_get_contents();\u003c/p\u003e\n\u003cp\u003eob_end_clean();\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;wirtefile ($path,$data);\n}\u003c/p\u003e\n\u003cp\u003efunction wirtefile ($fn,$data)\n{\u003c/p\u003e\n\u003cp\u003e$fp=fopen($fn,”wb”);\nfwrite($fp,$data);\nfclose($fp);\n}\n}\n/*——-word class End——-*/\n$word=new word;\n$word-\u0026gt;start();\necho $cout;\n$wordname=”word/”.time().”.doc”;\n$word-\u0026gt;save($wordname);// 保存word并且结束.\n?\u0026gt;\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"%E2%80%9D%3C?php\"\u003e” target=_blank …\u003c/a\u003e\u003c/p\u003e"
April 22, 2010
PHP生成内置图片Word文档的方法(一)
"\u003cp\u003e一般,有2种方法可以导出doc文档,一种是 使用com,并且作为php的一个扩展库安装到服务器上,然后创建一个com,调用它的方法。安装过office的服务器可以调用一个叫 word.application的com,可以生成word文档,不过这种方式我不推荐,因为执行效率比较低(我测试了一下,在执行代码的时候,服务器 会真的去打开一个word客户端)。理想的com应该是没有界面的,在后台进行数据转换,这样效果会比较好,但是这些扩展一般需要收费。\u003c/p\u003e\n\u003cp\u003e第2种方法,就是用PHP将我们的doc文档内容直接写入一个后缀为doc的文件中即可。使用这种方法不需要依赖第三方扩展,而且执行效率较高。\u003c/p\u003e\n\u003cp\u003eword本身的功能还是很强大的,它可以打开html格式的文件,并且能够保留格式,即使后缀为doc,它也能识别正常打开。这就为我们提供了方便。但是 有一个问题,html格式的文件中的图片只有一个地址,真正的图片是保存在其他地方的,也就是说,如果将HTML格式写入doc中,那么doc中将不能包 含图片。那我们如何创建包含图片的doc文档呢?我们可以使用和html很接近的mht格式。\u003c/p\u003e\n\u003cp\u003emht格式和html很类似,只 …\u003c/p\u003e"
April 19, 2010
魔法引用函数 magic_quotes_gpc和magic_quotes_runtime的区别和用法
"\u003cp\u003ePHP基础002: 魔法引用函数magic_quotes_gpc和magic_quotes_runtime的区别和用法\u003c/p\u003e\n\u003cp\u003ePHP提供两个方便我们引用数据的魔法引用函数magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在 php.ini设置为ON的时候,就会为我们引用的数据碰到单引号’和双引号”以及反斜线 \\ 是自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行,可是我们在php不同的版本或者不同的服务器配置下,有的 magic_quotes_gpc和magic_quotes_runtime设置为on,有的又是off,所以我们写的程序必须符合on和off两种情 况。那么magic_quotes_gpc和magic_quotes_runtime两个函数有什么区别呢?看下面的说明:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003emagic_quotes_gpc\u003c/strong\u003e\n作用范围是:WEB客户服务端;\n作用时间:请求开始是,例如当脚本运行时.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003emagic_quotes_runtime\u003c/strong\u003e\n作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;\n作用时间:每次当脚本访问运行状态中产生 …\u003c/p\u003e"
April 19, 2010
windows下apache+php平台,虚拟主机安全设置
"\u003cp\u003e先按这里的文档对服务器系统安全做设置: \u003ca href=\"http://blog.haohtml.com/index.php/archives/3438\"\u003ehttp://blog.haohtml.com/index.php/archives/3438\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e对于php.ini的设置有:\n1.修改为安全\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003esafe_mode = true\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e2.禁用一些系统函数\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003edisable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e3.禁用com组件调用\u003c/p\u003e\n\u003cp\u003e将 ;com.allow_dcom = true 修改为 com.allow_dcom = false 启用并禁用\n4.指定上传文件的临时目录\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eupload_tmp_dir = “d:\\php\\upload_tmp”\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e5.启用特别字符转义功能\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003emagic_quotes_gpc = On\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e6.关闭 …\u003c/p\u003e"
April 19, 2010
同服务器多网站的安全设置(windows server+apache+php)
"\u003cp\u003e在windows环境下,如果用IIS做webserver,可以配合ntfs为每个网站设置不同的用户权限,从而让一个网站的程序只能访问自己目 录下的内容.\u003c/p\u003e\n\u003cp\u003e而在windows的apache环 境下,由于apache默认是最高的system权限,因此非常危险,若不做安全设置,随便传一个php shell到任何一个网站上,就能控制整台服务器。\u003c/p\u003e\n\u003cp\u003e要实现这个目标,需要做以下设置:\u003c/p\u003e\n\u003cp\u003e1、在vhost中设置 open_basedir,设置后,php程序将只能打开规定目录下的内容(此指令不受安全模式是否打开的限制)。如下。同时最好把php.ini的 upload_tmp_dir 目录也添加进去,否则可能无法正常上传文件。\u003c/p\u003e\n\u003cp\u003eServerAdmin \u003ca href=\"mailto:[email protected]\"\[email protected]\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eDocumentRoot D:/abc\u003c/p\u003e\n\u003cp\u003eServerName \u003ca href=\"http://www.abc.com/\"\u003ewww.abc.com\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eErrorLog logs/abc.com-error_log\u003c/p\u003e\n\u003cp\u003eCustomLog logs/abc.com-access_log common\u003c/p\u003e\n\u003cp\u003ephp_admin_value open_basedir “D:/abc;D:/php/temp” …\u003c/p\u003e"
April 13, 2010
smarty缓存使用技巧
"\u003cp\u003e\u003cstrong\u003e一、使用缓存\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e要开启smarty的缓存,只需将caching设为true,并指定cache_dir即可.\u003c/p\u003e\n\u003cp\u003e使用cache_lefetime指定 缓存生存时间,单位为秒\u003c/p\u003e\n\u003cp\u003e要对相同页面生成多个不同的缓存,在display或fetch中加入第二参数cache_id, 如$smarty-\u0026gt;display(‘index.tpl’,$my_cache_id);此特性可用于对不同的$_GET进行不同的缓存\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e二、清除缓存\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eclear_all_cache();//清除所有缓存\u003c/p\u003e\n\u003cp\u003eclear_cache(‘index.tpl’);// 清除index.tpl的缓存\u003c/p\u003e\n\u003cp\u003eclear_cache(‘index.tpl’,cache_id);//清除指定id的缓存\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e三、使用自定义缓存方式\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e设置cache_handler_func使用自定义的函数处理缓存\u003c/p\u003e\n\u003cp\u003e如:\u003c/p\u003e\n\u003cp\u003e$smarty-\u0026gt;cache_handler_func = “myCache”;\u003c/p\u003e\n\u003cp\u003efunction myCache($action, \u0026amp;$smarty_obj, \u0026amp;$cache_content, $tpl_file=null, …\u003c/p\u003e"
April 1, 2010
采用curl库在PHP程序之间传递数组[原创]
"\u003cp\u003e[文章作者:张宴 本文版本:v1.1 最后修改:2007.08.23 转载请注明出处: \u003ca href=\"http://blog.s135.com/\"\u003ehttp://blog.s135.com\u003c/a\u003e]\u003c/p\u003e\n\u003cp\u003e最近在工作中遇到一个问题:a.php程序需要将接收到的数据同时写到“线上运行的正式数据库”和“进行开发调试的测试数据库”。而测试数据库可能经常 会面临对表结构、字段、配置信息做调整等问题,很不稳定,发生错误的概率很高,如果用a.php程序同时写“正式数据库”和“测试数据库”,势必影响到线 上运行的正式服务。\u003c/p\u003e\n\u003cp\u003e于是,我想到用PHP curl扩展库将生成的$data数组post传递一份给b.php程序,然后a.php程序继续往下执行写“正式数据库”的代码。a.php程序 将$data数组传递给b.php程序就完事了,至于b.php如何处理,就不关a.php的事了,b.php程序即使写“测试数据库”失败,也不会对 a.php程序造成影响。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2010/04/curl.gif\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2010/04/curl.gif\" alt=\"curl\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e按照这种思路,我写了a.php和b.php的代码:\u003c/p\u003e\n\u003cp\u003ea.php程序源代码:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.s135.com/#\"\u003eview plain\u003c/a\u003e \u003ca href=\"http://blog.s135.com/#\"\u003eprint\u003c/a\u003e \u003ca href=\"http://blog.s135.com/#\"\u003e?\u003c/a\u003e\u003c/p\u003e\n\u003col start=\"2\"\u003e\n\u003cli\u003e$data[“username”]=“张宴”;\u003c/li\u003e\n\u003cli\u003e$data[“password”]=“不知 道”; …\u003c/li\u003e\u003c/ol\u003e"
April 1, 2010
同一域名对应多个IP时,PHP获取远程网页内容的函数 [原创]
"\u003cp\u003e[文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接: \u003ca href=\"http://blog.s135.com/post/389/\"\u003ehttp://blog.s135.com/post/389/\u003c/a\u003e]\u003c/p\u003e\n\u003cp\u003ePHP获取远程网页内容有多种方式,例如用自带的file_get_contents、fopen等函数。\u003c/p\u003e\n\u003cp\u003e引用\u003c/p\u003e\n\u003cp\u003eecho file_get_contents(“ \u003ca href=\"http://blog.s135.com/abc.php%22%29;%C2%A0%C2%A0\"\u003ehttp://blog.s135.com/abc.php”);\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e?\u0026gt;\u003c/p\u003e\n\u003cp\u003e但是,在DNS轮询等负载均衡中,同一域名,可能对应多台服务器,多个IP。假设 blog.s135.com被DNS解析到72.249.146.213、72.249.146.214、72.249.146.215三个IP,用户每 次访问blog.s135.com,系统会根据负载均衡的相应算法访问其中的一台服务器。\u003c/p\u003e\n\u003cp\u003e上周做一个视频项目时,就碰到这样一类需 求:需要依次访问每台服务器上的一个PHP接口程序(假设为abc.php),查询这台服务器的传输状态。\u003c/p\u003e\n\u003cp\u003e这时就不能直接用 file_get_contents访问 \u003ca href=\"http://blog.s135.com/abc.php\"\u003ehttp://blog.s135.com/abc.php\u003c/a\u003e 了,因为它可能一直重复访问某一台服务器。\u003c/p\u003e\n\u003cp\u003e …\u003c/p\u003e"
March 27, 2010
PHP安全配置详解
"\u003cp\u003ePHP勿庸置疑是非常强大的服务器端脚本语言,但是强大的功能总是伴随着重大的危险, 在这章里,你将学习到使用PHP的安全模式来阻止一些PHP潜在的危险因素。\n【 安全模式 】\u003c/p\u003e\n\u003cp\u003ePHP的安全模式提供一个基本安全的共享环境,在一个有多个用户帐户存在的PHP开放的Web服务器上。当一个Web服务器上运行的PHP打开了安全模 式,那么一些函数将被完全的禁止,并且会限制一些可用的功能。\u003c/p\u003e\n\u003cp\u003e[ 使用安全模式来强制限制 ]\n在安全模式下,一些尝试访问文 件系统的函数功能将被限制。运行Web服务器用户ID,如果想要操作某个文件,则必须拥有该文件读取或者写入的访问权限,实现这个限制功能对于PHP来说 是没有问题的。\u003c/p\u003e\n\u003cp\u003e在 安全模式开启的时候,尝试读取或者写入一个本地文件的时候,PHP将检查当前访问用户是否是该目标文件的所有者。如 果不是所有者,则该操作会被禁止。(写 入权限:在较低级别的文件访问权限下,可能会允许读取或者写入系统操作系统的文件,通过PHP的安全模式实现了防止你操作 另外一个用户文件的操作。当然, 一个Web服务器可能能够访问一个具有全局写入权限的任意文件。)\u003c/p\u003e\n\u003cp\u003e当安全模式打开的时候,以下函数列 …\u003c/p\u003e"
March 26, 2010
PHP中echo和print的区别
"\u003cp\u003ePHP 和 HTML 最简单的交互是通过 print 和 echo 语句来实现的,在实际使用中, print 和 echo 两者的功能几 乎是完全一样。可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别:在 echo 函数中,可以同时输出 多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。\u003c/p\u003e\n\u003cp\u003eecho 和 print 都不是函数,而是语言结构,\u003cstrong\u003e所以圆括号都不是必需的\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003eecho命令和print命令相同,没有区别 ;\necho函数和print函数有区别;\nprint()有返 回值,当其执行失败(比如断线)时返回flase;\nprintf()和sprintf()类似,均为格式化输出,不同的是前者输出到 标准输出,后者输出到变量。\u003c/p\u003e\n\u003cp\u003e他们的区别在于:\n(1) echo可以输出多个字符串,像下面这样:\necho ‘a’,’b’,’c’;\n如果你非要加上圆括号,注意写成echo (‘a’,’b’,’c’);是错误的,应该写成:\necho …\u003c/p\u003e"
March 26, 2010
启用Xdebug使用WinCacheGrind分析脚本执行时间
"\u003cp\u003e使用Xdebug调试和优化PHP程序系列教程之WinCacheGrind,教你如何利用Xdebug 配合WinCacheGrind工具来检测PHP代码的效率以及分析PHP代码。\u003c/p\u003e\n\u003cp\u003e另外还有一个结果分析展示工具webgrind。可参考: \u003ca href=\"http://blog.sina.com.cn/s/blog_635833b3010127q5.html\"\u003ehttp://blog.sina.com.cn/s/blog_635833b3010127q5.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e有时候代码没有明显的编写错误,没有显示任何错误信息(如 error、warning、notice等),但是这不表明代码就是正确无误的。有时候可能某段代码执行时间过长,占用内存过多以致于影响整个系统的效 率,我们没有办法直接看出来是哪部份代码出了问题。这时候我们希望把代码的每个阶段的运行情况都监控起来,写到日志文件中去,运行一段时间后再进行分析, 找到问题所在。\u003c/p\u003e\n\u003cp\u003e回忆一下,之前我们编辑php.ini文件\n加入\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e[Xdebug]\u0026lt;br /\u0026gt; xdebug.profiler_enable=on\u0026lt;br /\u0026gt; xdebug.trace_output_dir=\u0026quot;I:\\Projects\\xdebug\u0026quot;\u0026lt;br …\u003c/code\u003e\u003c/p\u003e"
March 26, 2010
PHP中如何使用header发送头部信息
"\u003cp\u003e在照彭武兴先生的《PHP BIBLE》中所述,header可以送出Status标头,如\u003c/p\u003e\n\u003cp\u003e就可以让用户浏览器出现文件找不到的404错误,但是我试了这样是不行的。\u003c/p\u003e\n\u003cp\u003e后 来我到w3.org上查了http的相关资料,终于试出来了如何Header出状态代码(Status),与大家分享。\u003c/p\u003e\n\u003cp\u003e其实应该是这样 的:\u003c/p\u003e\n\u003cp\u003e第一部分为 HTTP协议的版本(HTTP-Version)\u003c/p\u003e\n\u003cp\u003e第二部分为状态代码(Status)\u003c/p\u003e\n\u003cp\u003e第三部分为原因短语 (Reason-Phrase)\u003c/p\u003e\n\u003cp\u003e三部分中间用一个空格分开,且中间不能有回车,第一部分和第二部分是必需的,第三部分则是给人看的,可 写可不写甚至乱写。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e还有,这一句的输出必须在Html文件的第一行。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e下面我给出各代码所代表的意思(是从 w3.org上查到的,够权威了):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e1xx: Informational – Request received, continuing process\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2xx: Success – The action was successfully received, understood,and accepted\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e3xx: Redirection …\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e"
January 8, 2010
解除phpMyAdmin 导入大型MySQL数据库文件大小限制
"\u003cp\u003e今天在WPMZ环境下安装了DEDECMS,朋友将以前网站的数据进行导入时出现了一些问题,提示超出导入大小限制。默认MYSQL只能导入最大2MB的数据,于是我在网上找到了修改的方法,事实证明以下方法是可行的。(修改好后必须重启PHP,可)\n**\nphpMyAdmin 导入大型数据库文件大小限制配置…**\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e修改 php.ini 文件中下列3项的值:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003eupload_max_filesize, memory_limit 和 post_max_size\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eupload_max_filesize,上传文件大小\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ememory_limit 设置内存\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003epost_max_size 提交数据的最大值\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e为你想改的大小值.\u003c/p\u003e\n\u003col start=\"2\"\u003e\n\u003cli\u003e在 phpMyAdmin 的配置文件中修改或加入这个设置:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e这个文件一般是在phpMyAdmin目录下的config.inc.php文件\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e$cfg[‘ExecTimeLimit’] = 0; // maximum execution time in seconds (0 for no limit)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e默认为300秒钟,改为0表示不受限制\u003c/p\u003e"
December 31, 2009
smarty局部缓存
"\u003cp\u003eSmarty提供了强大的 缓存功能。但有时我们并不希望整篇文档都被缓存,而是有选择的缓存某一部分内容或某一部分内容不被缓存。例如你在页面上端使用一个带有广告条位置的模板, 广告条可以包含任何HTML、图象、FLASH等混合信息. 因此这里不能使用一个静态的链接,同时我们也不希望该广告条被缓存. 这就需要在 insert 函数指定,同时需要一个函数取广告条的内容信息。smarty也提供了这种缓存控制能力。\u003c/p\u003e\n\u003cp\u003e我们可以使用$smarty-\u0026gt;register_block($params,\u0026amp;$smarty)使整篇页面中的某一块不被缓存。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eindex.tpl:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eXML/HTML代码\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u0026lt;divalign=‘center’\u0026gt;\u003c/li\u003e\n\u003cli\u003ePage created: {“0″|date_format:”%D %H:%M:%S”}\u003c/li\u003e\n\u003cli\u003e\u0026lt;{dynamic}\u0026gt;\u003c/li\u003e\n\u003cli\u003eNow is: {“0″|date_format:”%D %H:%M:%S”}\u003c/li\u003e\n\u003cli\u003e… do other stuff …\u003c/li\u003e\n\u003cli\u003e\u0026lt;{/dynamic}\u0026gt;\u003c/li\u003e\n\u003cli\u003ediv\u0026gt;\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003eindex.php:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eXML/HTML …\u003c/p\u003e"
October 12, 2009
jQuery+PHP实现FCKEditor内容分页
"\u003cp\u003e如题,用jQuery+PHP实现FCKEditor内容分页,如下:\u003c/p\u003e\n\u003cp\u003ePHP分页函数:\n/*\u003cstrong\u003e****\u003cem\u003e*\\\u003c/em\u003e*FCKEditor分页处理***\u003c/strong\u003e****/\nfunction pageBreak($content)\n{\n//把文章内容按照\u003c/p\u003e\n\u003cp\u003e分割成数组\n$content = $content;\n$pattern = “/\u003c/p\u003e\n\u003cp\u003e\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;/”;\n$strSplit = preg_split($pattern, $content, -1, PREG_SPLIT_NO_EMPTY); //将文章内容分割成数组\n$count = count($strSplit); //分割后的数组单元数目\n$outStr = “”; //返回的字串\n$i = 1;\u003c/p\u003e\n\u003cp\u003eif ($count \u0026gt; 1 ) {\n$outStr = “\n”;\nforeach($strSplit as $value) {\nif ($i \u0026lt;= 1) {\n$outStr .= “\u003c/p\u003e\n\u003cp\u003e$value\u003c/p\u003e\n\u003cp\u003e”;\n} else {\n$outStr .= “\u003c/p\u003e\n\u003cp\u003e$value\u003c/p\u003e\n\u003cp\u003e”;\n} …\u003c/p\u003e"
September 14, 2009
ServU和ServU-Plus结合对ftp用户进行数据库(Mysql)验证
"\u003cp\u003e基本步骤:\n1.\u003c/p\u003e\n\u003cp\u003e下载Mysql for windows的版本,目前最新的为mysql-4.0.20d-win。下载并安装启动。\u003c/p\u003e\n\u003col start=\"2\"\u003e\n\u003cli\u003e\n\u003cp\u003e 在mysql.com网站下载对应的mysql-odbc驱动程序,安装在windows 2000/NT/advance server操作系统.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e 在操作系统中,点击控制面板->管理工具->数据源(ODBC),添加对MySQL ODBC的支持。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e 使用servU-Plus插件程序,ServUPlus是Serv-U的一个插件,其主要功能就是捕捉Serv-U的事件,然后做适当的功能增强、扩展。解压后出现目录结构如下:\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e[]根目录\u003c/p\u003e\n\u003cp\u003eReadme.txt 自述文件\u003c/p\u003e\n\u003cp\u003eMySQL_SQL.txt MySQL的数据结构\u003c/p\u003e\n\u003cp\u003eMSSQL_SQL.txt MSSQL的数据结构\u003c/p\u003e\n\u003cp\u003eUpdate.txt 升级说明\u003c/p\u003e\n\u003cp\u003e[\\ServU]目录\u003c/p\u003e\n\u003cp\u003edbexpmysql.dll 访问MySQL的DLL(可选)\u003c/p\u003e\n\u003cp\u003edbexpmss.dll 访问MSSQL的DLL(可选) …\u003c/p\u003e"
May 26, 2009
php计算两个数组交集和差集
"\u003cp\u003earray_intersect\n(PHP 4 \u0026gt;= 4.0.1, PHP 5)\u003c/p\u003e\n\u003cp\u003earray_intersect — 计算数组的交集说明\narray array_intersect ( array array1, array array2 [, array …])\narray_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。\u003c/p\u003e\n\u003cp\u003e例子 1. array_intersect() 例子\u003c/p\u003e\n\u003cp\u003e“green”, “red”, “blue”);\n$array2 = array (“b” =\u0026gt; “green”, “yellow”, “red”);\n$result = array_intersect ($array1, $array2);\n?\u0026gt;\u003c/p\u003e\n\u003cp\u003e这使得 $result 成为:\u003c/p\u003e\n\u003cp\u003eArray\n(\n [a] =\u0026gt; green\n [0] =\u0026gt; red\n)\n注: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。 …\u003c/p\u003e"
May 25, 2009
php中的$_SERVER or $_ENV
"\u003cp\u003e服务器变量:$_SERVER\n注: 在 PHP 4.1.0 及以后版本使用。之前的版本,使用 $HTTP_SERVER_VARS。\u003c/p\u003e\n\u003cp\u003e$_SERVER 是一个包含诸如头信息(header)、路径(path)和脚本位置(script locations)的数组。数组的实体由 web 服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。这意味着,大量的这些变量在 CGI 1.1 规范中说明,所以应该仔细研究一下。\u003c/p\u003e\n\u003cp\u003e环境变量:$_ENV\n注: 在 PHP 4.1.0 及以后版本使用。之前的版本,使用 $HTTP_ENV_VARS。\u003c/p\u003e\n\u003cp\u003e在解析器运行时,这些变量从环境变量转变为 PHP 全局变量名称空间(namespace)。它们中的许多都是由 PHP 所运行的系统决定。完整的列表是不可能的。请查看系统的文档以确定其特定的环境变量。\u003c/p\u003e\n\u003cp\u003e其它环境变量(包括 CGI 变量),无论 PHP 是以服务器模块或是以 CGI 处理方式运行,都在这里列出了。\u003c/p\u003e\n\u003cp\u003e这是一个“superglobal”,或者可以描述为自动全局变量。这只不过意味这它在所有的脚本中 …\u003c/p\u003e"
March 16, 2009
FreeBSD+Nginx+Mysql+PHP安装记
"\u003cp\u003e折腾了一个晚上,基本上都是用packages安装,php用ports安装,由于PHP只用了FastCGI模式,所以phpmyadmin提示缺少模块而无法安装,最后下载的源码安装。整个过程中,竟然发现最耗费时间的PHP的那些模块!\n其实安装完成后再回过头来看,步骤熟练后,加上编译时间,半个小时足够!\u003c/p\u003e\n\u003cp\u003e先做个规划,操作步骤分三块,分别用三个帖子来写,分别是:软件的安装,软件的设置,启动调试及遇到错误说明。\u003c/p\u003e\n\u003cp\u003e主要思路:用php-fpm来管理FastCGI。在网上的大多数资料都是用lighttp来安装管理,但是据说php-fpm比那个要强,所以就赶了一回时髦,用了一下php-fpm。\u003c/p\u003e\n\u003cp\u003e先列一下安装的东西,其实由安装的软件列表,就可以看出用做的过程,今天晚了,明天写步骤:\nQUOTE:\nautoconf-2.62 Automatically configure source code on many Un*x platforms\nautoconf-wrapper-20071109 Wrapper script for GNU autoconf …\u003c/p\u003e"
March 16, 2009
freebsd+mysql+nginx+php组合安装
"\u003cp\u003e\u003cstrong\u003e安装mysql\u003c/strong\u003e\n#cd/usr/ports/databases/mysql51-server\n#make WITH_CHARSET=gbk WITH_XCHARSET=all WITH_PROC_SCOPE_PTH=yes BUILD_OPTIMIZED=yes BUILD_STATIC=yes SKIP_DNS_CHECK=yes WITHOUT_INNODB=yes install clean\n#cp /usr/local/share/mysql/my-small.cnf /etc/my.cnf\n#rehash\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e初始化表\u003c/strong\u003e\n#/usr/local/bin/mysql_install_db –user=mysql#一定要运行此步,否将下面设定权限将会出现错误,因为这句命令会将生在/usr/local/mysql下面将生var及以下目录,是下面的前提条件.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e安装php\u003c/strong\u003e\n# cd /usr/ports/lang/php5\n# make config\n[X] CLI Build CLI version\n[X] CGI Build CGI version\n[ ] APACHE Build …\u003c/p\u003e"
March 2, 2009
ZF框架中的MVC
"\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2009/03/8f5c2e59-c194-407e-93e4-949ca16aa67a.bmp\"\u003e\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/8f5c2e59-c194-407e-93e4-949ca16aa67a.bmp\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e"
November 21, 2008
php中$_request与$_post、$_get的区别
"\u003cp\u003ephp中有$_request与$_post、$_get用于接受表单数据,当时他们有何种区别,什么时候用那种最好。\u003c/p\u003e\n\u003cp\u003e一、$_request与$_post、$_get的区别和特点\u003c/p\u003e\n\u003cp\u003e$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较慢。通过post和get方法提交的所有数据都可以通过$_REQUEST数组获得\u003c/p\u003e\n\u003cp\u003e二、$_post、$_get的区别和特点\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eget是从服务器上获取数据,post是向服务器传送数据。\u003c/li\u003e\n\u003cli\u003eget是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。\u003c/li\u003e\n\u003cli\u003e对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。\u003c/li\u003e\n\u003cli\u003eget传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量 …\u003c/li\u003e\u003c/ol\u003e"
November 20, 2008
动态网页制作技巧PHP:详细彻底学习Smarty
"\u003cp\u003e页面请求变量\n以下是访问页面请求变量诸如get,post,cookies,server,enviroment和session变量的例子. 例如{$smarty.server.SERVER_NAME}取得服务器变量,{$smarty.env.PATH}取得系统环境变量path, {$smarty.request.username}取得get/post/cookies/server/env的复合变量。\u003c/p\u003e\n\u003cp\u003e{$smarty.now}变量用于访问当前时间戳.\n可以用 date_format调节器格式化输出. 例如{$smarty.nowdate_format:”%Y-%m-%d %H:%M:%S”}\u003c/p\u003e\n\u003cp\u003e{$smarty.const}\n你可以直接访问PHP常量. 例如{$smarty.const._MY_CONST_VAL}\u003c/p\u003e\n\u003cp\u003e{$smarty.capture}\n可以通过 {capture}..{/capture}结构 截取的输出可以使用{$smarty} 变量访问.\u003c/p\u003e\n\u003cp\u003e{$smarty.config}\n{$smarty}变量 可以访问已经加载的config变量. …\u003c/p\u003e"
November 13, 2008
require和include基本的区别
"\u003cp\u003e手册里是这么解释的:\u003c/p\u003e\n\u003cp\u003erequire() 和 include() 除了怎样处理失败之外在各方面都完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在丢失文件时停止处理页面,那就别犹豫了,用 require() 吧。include() 就不是这样,脚本会继续运行。同时也要确认设置了合适的include_path。\u003c/p\u003e\n\u003cp\u003e就是说再解析程序时即读取require的文件,而不是解析后,\u003c/p\u003e\n\u003cp\u003e如果不能读取到被require的文件,就不能进行下一步动作。\n所以,不被正确包含就会导致程序的文件,用require比较好。\u003c/p\u003e\n\u003cp\u003e可能效率上也略微高点。\n—————————————————————\u003c/p\u003e\n\u003cp\u003erequire() 无论如何都会包含文件,而 include() 可以有选择地包含:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ea.php 一定会被包含,而 b.php 一定不会被包含。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在PHP中include和require到底有什么区别呢?看这里的例子就知道了\u003c/p\u003e\n\u003cp\u003e:include.php3的运行结果是:\n 这是inc1.inc文件中的一个变量的值! …\u003c/p\u003e"
November 13, 2008
PHP的命名空间
"\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e摘要:命名变量,函数和类是挺困难的,除了要考虑到变量的名称要易于理解,还要担心是否这个名称在其它某个地方已经使用过. 在一小段脚本中,第二个问题是基本问题. 当你考虑重用你的代码, 在这之后的项目代码必须避免使用你用过的命名. 通常来说,可重用的代码总是包含在函数或类中, 需要处理许多可能发生的命名冲突. 但函数和类之间也可能发生命名冲突. 你可以尝试避免出现这种情况,通过在所有类前添加前缀的方法,或者你可以使用namespace语句.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e标签: \u003ca href=\"http://www.51cto.com/php/search.php?keyword=PHP%C3%FC%C3%FB%BF%D5%BC%E4\"\u003ePHP命名空间\u003c/a\u003e \u003ca href=\"http://www.51cto.com/php/search.php?keyword=PHP\"\u003ePHP\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e命名变量,函数和类是挺困难的,除了要考虑到变量的名称要易于理解,还要担心是否这个名称在其它某个地方已经使用过. 在一小段脚本中,第二个问题是基本问题. 当你考虑重用你的代码, 在这之后的项目代码必须避免使用你用过的命名. 通常来说,可重用的代码总是包含在函数或类中, 需要处理许多可能发生的命名冲突. 但函数和类之间也可能发生命名冲突. 你可以尝试避免出现这种情况,通过在所有类前添加前缀的方法,或者你可以使用namespace语句.\u003c/p\u003e\n\u003cp\u003eNamespace关键字给一块代码命名. 在这个代码块外部,脚本必须用操作 …\u003c/p\u003e"
November 13, 2008
把表记录生成数组
"\u003cp\u003e以下是来自phpcms2008程序global.func.php文件部分函数,仅供参考:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003efunction cache_read($file, $path = ”, $iscachevar = 0)\n{\n if(!$path) $path = CACHE_PATH;\n $cachefile = $path.$file;\n if($iscachevar)\n {\n global $TEMP;\n $key = ‘cache_’.substr($file, 0, -4);\n return isset($TEMP[$key]) ? $TEMP[$key] : $TEMP[$key] = @include $cachefile;\n }\n return @include $cachefile;\n}\n\nfunction cache_write($file, $array, $path = ”)\n{\n if(!is_array($array)) return false;\n $array = “”;\n $cachefile = ($path ? $path : CACHE_PATH).$file; …\u003c/code\u003e\u003c/pre\u003e"
November 12, 2008
PHP命名空间的分隔符是“\”
"\u003cp\u003ePHP最终开始支持namespace(命名空间)。 \u003cem\u003e但是经过开发者\u003ca href=\"http://wiki.php.net/_media/rfc/php.ns.txt?id=rfc%3Anamespaceseparator\u0026amp;cache=cache\"\u003e几个小时的讨论后\u003c/a\u003e,他们决定\u003ca href=\"http://news.php.net/php.internals/41374\"\u003e采用 “\\”\u003c/a\u003e 作为分隔符,而不是更流行的“ :: ”。\u003ca href=\"http://loveandtheft.org/2008/10/26/set-sail-for-fail-php-namespaces/\"\u003eFredrik Holmström\u003c/a\u003e指出了这种分隔方法可能会产生的问题,如打字出错(但不会出现错误提示),IDE兼容性问题,字符数字等等,\u003ca href=\"http://wiki.php.net/rfc/namespaceseparator\"\u003e好处\u003c/a\u003e则是容易输入和分析。”\u003c/em\u003e\u003c/p\u003e"
November 11, 2008
用PHP调用Oracle存储过程
"\u003cp\u003e PHP程序访问数据库,完全可以使用存储过程,有人认为使用存储过程便于维护,不过仁者见仁,智者见智,在这个问题上,偶认为使用存储过程意味着必须要DBA和开发人员更紧密配合,如果其中一方更变,则显然难以维护。\u003c/p\u003e\n\u003cp\u003e 但是使用存储过程至少有两个最明显的优点:速度和效率。使用存储过程的速度显然更快。\n 在效率上,如果应用一次需要做一系列SQL操作,则需要往返于PHP与ORACLE,不如把该应用直接放到数据库方以减少往返次数,增加效率。\n但是在INTERNET应用上,速度是极度重要的,所以很有必要使用存储过程。\n偶也是使用PHP调用存储过程不久,做了下面这个列子。\u003c/p\u003e\n\u003cp\u003e代码:-\u003c/p\u003e\n\u003cp\u003e//建立一个TEST表\nCREATE TABLE TEST (\n ID NUMBER(16) NOT NULL,\n NAME VARCHAR2(30) NOT NULL,\n PRIMARY KEY (ID)\n);\u003c/p\u003e\n\u003cp\u003e//插入一条数据\nINSERT INTO TEST VALUES (5, ‘PHP_BOOK’);\u003c/p\u003e\n\u003cp\u003e//建立一个存储过程\nCREATE OR …\u003c/p\u003e"
November 11, 2008
apache 中控制虚拟主机的php功能
"\u003cp\u003e使用情况分以下两种:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一,在httpd.conf中配置了全局使用php脚本,则使用下面的方法\u003c/strong\u003e\n在虚拟主机的设置小节中添加php_flag engine on/off 字串7\u003c/p\u003e\n\u003cp\u003e如: 字串9\nServerName xxxxxx.com\nphp_flag engine off\nserveralias \u003ca href=\"https://www.xxxxxx.com\"\u003ewww.xxxxxx.com\u003c/a\u003e\nServerAdmin \u003ca href=\"mailto:[email protected]\"\[email protected]\u003c/a\u003e\nDocumentRoot “/home/xxxxxx/htdocs”\nhaohtml.com\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e二.没有在httpd.conf中配置执行php脚本功能\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在虚拟主机配置中这样改:\u003c/p\u003e\n\u003cp\u003e 把 AddType application/x-httpd-php .php 这句话放到需要运行php的虚拟主机的配置中\u003c/p\u003e\n\u003cp\u003e #这个虚拟主机不能运行php\u003c/p\u003e\n\u003cp\u003e ServerAdmin \u003ca href=\"mailto:[email protected]\"\[email protected]\u003c/a\u003e\n DocumentRoot d:/www.haohtml.com/\n ServerName \u003ca href=\"http://www.haohtml.com/\"\u003ewww.haohtml.com\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e # …\u003c/p\u003e"
October 26, 2008
php构造函数和析构函数
"\u003cp\u003e构造函数\nvoid __construct ([ mixed $args [, $… ]] )\nPHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。\u003c/p\u003e\n\u003cp\u003eNote: 如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。\u003c/p\u003e\n\u003cp\u003eExample#1 使用新标准的构造函数\u003c/p\u003e\n\u003cp\u003eclass BaseClass {\u003c/p\u003e\n\u003cp\u003efunction __construct() {\nprint “In BaseClass constructor\\n”;\n}\n}\u003c/p\u003e\n\u003cp\u003eclass SubClass extends BaseClass {\nfunction __construct() {\nparent::__construct();\nprint “In SubClass constructor\\n”;\n}\n}\u003c/p\u003e\n\u003cp\u003e$obj = new BaseClass();\n$obj = new SubClass();\n?\u0026gt;\n为了实现向后兼容性, …\u003c/p\u003e"
October 26, 2008
php范围解析操作符(::)
"\u003cp\u003e范围解析操作符(::)\n范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法。\u003c/p\u003e\n\u003cp\u003e当在类的外部访问这些静态成员、方法和常量时,必须使用类的名字。\u003c/p\u003e\n\u003cp\u003e把 Paamayim Nekudotayim 选作该操作符的名字似乎有些奇怪。然而,这是 Zend 开发小组在写 Zend Engine 0.5 (被用于 PHP 3 中)时所作出的决定。事实上这个词在希伯莱文就是双冒号的意思。\u003c/p\u003e\n\u003cp\u003eExample#1 在类的外部使用 :: 操作符\u003c/p\u003e\n\u003cp\u003eself 和 parent 这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。\u003c/p\u003e\n\u003cp\u003eExample#2 :: from inside the class definition\u003c/p\u003e\n\u003cp\u003e当一个子类覆盖其父类中的方法时,PHP 不会再执行父类中已被覆盖的方法,直到子类中调用这些方法为止。这种机制也作用于 构造函数和析构函数、重载 及 魔术 函数。\u003c/p\u003e\n\u003cp\u003eExample#3 调用父类的方法\u003c/p\u003e\n\u003cp\u003emyFunc();\u003c/p\u003e\n\u003cp\u003e?\u0026gt;\u003c/p\u003e\n\u003cp\u003eStatic Keyword …\u003c/p\u003e"
October 26, 2008
php中访问控制
"\u003cp\u003e访问控制\n对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问。\u003c/p\u003e\n\u003cp\u003e对类成员的访问控制\n类成员都必须使用关键字public、protected 或 private 进行定义\u003c/p\u003e\n\u003cp\u003eExample#1 声明类成员\u003c/p\u003e\n\u003cp\u003epublic;\u003c/p\u003e\n\u003cp\u003eecho $this-\u0026gt;protected;\necho $this-\u0026gt;private;\n}\n}\u003c/p\u003e\n\u003cp\u003e$obj = new MyClass();\necho $obj-\u0026gt;public; // 这行能被正常执行\necho $obj-\u0026gt;protected; // 这行会产生一个致命错误\necho $obj-\u0026gt;private; // 这行也会产生一个致命错误\n$obj-\u0026gt;printHello(); // 输出 Public、Protected 和 Private\u003c/p\u003e\n\u003cp\u003e/** …\u003c/p\u003e"
October 22, 2008
PHP V5.2 中的新增功能,第 5 部分: 跟踪文件上传进度
"\u003cp\u003e级别: 中级\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://haohtml.com/wp/wp-admin/#author\"\u003eTracy Peterson\u003c/a\u003e (\u003ca href=\"mailto:[email protected]?subject=%E8%B7%9F%E8%B8%AA%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E8%BF%9B%E5%BA%A6\u0026amp;[email protected]\"\[email protected]\u003c/a\u003e), 自由撰稿人, Consultant\u003c/p\u003e\n\u003cp\u003e2007 年 6 月 08 日\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ePHP V5.2 为开发人员添加了 hook 以利用实时跟踪文件上传进度的功能。本文是 “\u003ca href=\"http://www.ibm.com/developerworks/cn/opensource/os-php-v52/\"\u003ePHP V5.2 中的新增功能\u003c/a\u003e” 系列文章(共五部分)的第 5 部分,将向您展示如何监视文件上传并相应地编写代码,以及如何创建 PHP 进度条。\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e Web 2.0 是 Internet 上最炙手可热的时髦字眼,投资者纷纷把资金投入到涉及这项技术的投资项目中。数以百万计的 Web 站点和应用程序覆盖的描述性术语有很多。使用 Web 2.0,我们将描述一类 Web 站点,这些站点都提供了了解 Internet 上数以百万计用户心声的途径。与众不同之处在于它们全都为用户提供了交流和分享与共同利益相关的观点和数据的场所,这些站点可以快速生成大量内容。\u003c/p\u003e\n\u003cp\u003e 每个用户都将提供某种内容 —— 评论咖啡店、上班路线等。\u003ca href=\"http://www.youtube.com/\"\u003eYouTube\u003c/a\u003e 在这点上是一个优秀示例,为人们提供一个空间可以上传视频并使其他用户可以观看这些视频并提供反 …\u003c/p\u003e"
October 22, 2008
MVC模式的PHP实现
"\u003cp\u003e作者:Harry Fuecks 翻译:Easy Chen\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMVC模式在网站架构中十分常见。它允许我们建立一个三层结构的应用程式,从代码中分离出有用的层,帮助设计师和开发者协同工作以及提高我们维护和扩展既有程式的能力。\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e视图(View)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e“视图”主要指我们送到Web浏览器的最终结果??比如我们的脚本生成的HTML。当说到视图时,很多人想到的是模版,但是把模板方案叫做视图的正确性是值得怀疑的。\u003c/p\u003e\n\u003cp\u003e对视图来说,最重要的事情可能是它应该是“自我意识(self aware)”的,视图被渲染(render)时,视图的元素能意识到自己在更大框架中的角色。\u003c/p\u003e\n\u003cp\u003e以XML为例,可以说XML在被解析时,DOM API有着这样的认知??一个DOM树里的节点知道它在哪里和它包含了什么。 (当一个XML文档中的节点用SAX解析时只有当解析到该节点时它才有意义。)\u003c/p\u003e\n\u003cp\u003e绝大多数模板方案使用简单的过程语言和这样的模板标签:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;p\u0026gt;{some_text}\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;{some_more_text}\u0026lt;/p\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e它们在文档中没有意义,它们代表的意义只是PHP将用其他的东西来替换 …\u003c/p\u003e"
October 15, 2008
PHP 危险函数解释
"\u003cp\u003e*** 在编译 PHP 时,如无特殊需要,一定禁止编译生成 CLI 命令行模式的 PHP 解析支持。\n可在编译时使用 –disable-cli。一旦编译生成 CLI 模式的 PHP,则可能会被入侵者\n利用该程序建立一个 WEBShell 后门进程或通过 PHP 执行任意代码!\u003c/p\u003e\n\u003cp\u003ephpinfo()\n功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。\n危险等级:中\u003c/p\u003e\n\u003cp\u003epassthru()\n功能描述:允许执行一个外部程序并回显输出,类似于 exec()。\n危险等级:高\u003c/p\u003e\n\u003cp\u003eexec()\n功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。\n危险等级:高\u003c/p\u003e\n\u003cp\u003esystem()\n功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。\n危险等级:高\u003c/p\u003e\n\u003cp\u003echroot()\n功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式\nPHP 时才能工作,且该函数不适用于 Windows” onclick=”tagshow(event)” class=”t_tag”\u0026gt;Windows 系统。\n危险等级:高\u003c/p\u003e\n\u003cp\u003escandir()\n功能描 …\u003c/p\u003e"
October 6, 2008
[精典] FreeBSD下安装MySQL+Apache+PHP新手指南
"\u003cp\u003e作者: heiyeluren\nQQ群: 5415735 (Linux/BSD安装维护群)\n日期: 2004/8/18\n— 特别感谢QQ群好友阿南,本文在他的耐心指导下才产生 —\u003c/p\u003e\n\u003cp\u003e看到朋友们在Unix/Linux上装mysql有点麻烦,我也好不容易装完了,所以就来讲件,也许能帮帮大家的忙. 我使用的操作系统是FreeBSD5.2.1,如果别的操作系统安装方法也许不一样,请酌情处理.\n安装FreeBSD就不讲了,只要稍微定制一下就可以了,过程我就不说了,我用的FreeBSD版本是5.2.1,应该是现在比较新的版本,以后就不知道了 🙂 .\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一. 安装MySQL\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我使用的的Mysql是4.0.20,源代码版,你也可以使用RPM包或者二进制版,安装方法可能不一样,请参考其它文章.\n先下载Mysql2.0.20的源代码版,地址: \u003ca href=\"http://dev.mysql.com/downloads/mysql/4.0.html\"\u003ehttp://dev.mysql.com/downloads/mysql/4.0.html\u003c/a\u003e\n把它下到/usr/local/src目录下,如果没有该目录,就自己建一个.下载回来的包名字叫 mysql-4.0.20.tar.gz,然后我们把它解压出来:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e# tar -zxvf …\u003c/strong\u003e\u003c/p\u003e"
October 2, 2008
[精典教程]freebsd下安装mysql,apache,php,phpmyadmin记录
"\u003cp\u003e第一次在FREEBSD下配置环境,感觉好爽,安装的时候也参考了别人的介绍,在此表示感谢。\u003c/p\u003e\n\u003cp\u003e为了方便以后的操作,现在记录写下来。\u003c/p\u003e\n\u003cp\u003e**安装MYSQL时要注意:\n** mysql默认数据库放在/var分区里,如果你的数据库很大,那么你需要在前面分区的时候把/var分区分到足够大,\n如果你想改变它的安装目录,例如安装到:/usr/db.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e#cd /usr/ports/databases/mysql51-server\n\u003c/strong\u003e \u003cstrong\u003e#make WITH_CHARSET=utf8\u003c/strong\u003e \u003cstrong\u003eWITH_XCHARSET=all\u003c/strong\u003e \u003cstrong\u003eWITH_PROC_SCOPE_PTH=yes SKIP_DNS_CHECK=yes BUILD_OPTIMIZED=yes install clean\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e#cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf\u003c/strong\u003e\n\u003cstrong\u003e#/usr/local/bin/mysql_install_db\n#chown -R mysql:mysql /var/db/mysql\n#/usr/local/bin/mysqld_safe \u0026amp; //启动mysql …\u003c/strong\u003e\u003c/p\u003e\u003c/blockquote\u003e"