﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-爱女孩的小火柴-文章分类-php5</title><link>http://www.blogjava.net/mayu/category/14921.html</link><description>生活的理想就是为了理想的生活:)</description><language>zh-cn</language><lastBuildDate>Wed, 13 Jun 2007 10:19:48 GMT</lastBuildDate><pubDate>Wed, 13 Jun 2007 10:19:48 GMT</pubDate><ttl>60</ttl><item><title>Php安全 </title><link>http://www.blogjava.net/mayu/articles/123918.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Wed, 13 Jun 2007 09:58:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/123918.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/123918.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/123918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/123918.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/123918.html</trackback:ping><description><![CDATA[<p>对于脚本安全这个话题好像永远没完没了，如果你经常到国外的各种各样的bugtraq上，你会发现有一半以上都和脚本相关,诸如SQL injection,XSS,Path Disclosure,Remote commands execution这样的字眼比比皆是，我们看了之后的用途难道仅仅是抓肉鸡？对于我们想做web安全的人来说，最好就是拿来学习，可是万物抓根源，我们要的不是鱼而是渔。在国内，各种各样的php程序1.0版,2.0版像雨后春笋一样的冒出来，可是，大家关注的都是一些著名的cms,论坛,blog程序，很少的人在对那些不出名的程序做安全检测，对于越来越多的php程序员和站长来说，除了依靠服务器的堡垒设置外，php程序本身的安全多少你总得懂点吧。 <br>有人说你们做php安全无非就是搞搞注入和跨站什么什么的，大错特错，如果这样的话，一个magic_quotes_gpc或者服务器里的一些安全设置就让我们全没活路了：（。我今天要说的不是注入，不是跨站，而是存在于php程序中的一些安全细节问题。OK!切入正题。 <br>注意一些函数的过滤 <br>有些函数在程序中是经常使用的,像include(),require(),fopen(),fwrite(),readfile(),unlink(),eval()以及它们的变体函数等等。这些函数都很实用，实用并不代表让你多省心，你还得为它们多费点心。 ：） <br>1.include(),require()和fopen(),include_once(),require_once()这些都可以远程调用文件，对于它们的危害，google搜一下你就会很明了，对于所包含调用的变量没过滤好，就可以任意包含文件从而去执行。举个例子，看print.php <br>... <br>if (empty ($bn) ) { //检查是变量$bn是否为空 <br>include ("$cfg_dir/site_${site}.php"); //把$cfg_dir这个路径里的site_${site}.php包含进来 <br>... <br>不管存不存在$cfg_dir目录，$site这个变量你可以很自然的去使用，因为他根本没检查$site变量啊。可以把变量$site指定远程文件去调用，也可以是本地的一个文件，你所指定的文件里写上php的语句，然后它就去包含执行这个含有php语句的文件了.就像这样 <br>列出文件目录 <br>甚至可以扩展到包含一些管理员文件，提升权限，典型的像以前phpwind,bo-blog的漏洞一样。除了依靠php.ini里的allow_url_fopen设为off禁止远程使用文件和open_base_dir禁止使用目录以外的文件外，你还得事先声明好只能包含哪些文件，这里就不多说废话了。 <br>2.fopen(),file(),readfile(),openfile(),等也是该特别留意的地方。函数本身并没什么,它们的作用是去打开文件，可是如果对变量过滤不彻底的话，就会泄露源代码。这样的函数文本论坛里会有很多。 <br>... <br>$articlearray=openfile("$dbpath/$fid/$tid.php"); //打开$dbpath/$fid这个路径的$tid.php文件 <br>$topic_detail=explode("|",$articlearray[0]); //用分割符|读出帖子的内容 <br>... <br>很眼熟吧，这是ofstar以前版本的read.php,$fid和$tid没有任何过滤，$tid指定为某个文件提交，就发生了原代码泄露。就像这样。 <br><a href="http://explame.com/ofstar/read.php?fid=123&amp;tid=../index" target=_blank><a href="http://explame.com/ofstar/read.php?fid=123&amp;tid=../index" target=_blank><font color=#000000>http://explame.com/ofstar/read.php?fid=123&amp;tid=../index</font></a></a> <br>$tid会被加上php的后缀，所以直接写index。这仅仅是个例子，接着看吧。 <br>3.fwrite()和它的变体函数这种漏洞想想都想得出，对于用户提交的字符没过滤的话，写入一段php后门又不是不可以。 <br>4.unlink()函数，前段时间，phpwind里任意删除文件就是利用这个函数，对于判断是否删除的变量没过滤，变量可以指定为任意文件，当然就可以删除任意文件的变量。 <br>5.eval(),preg_replace()函数，它们的作用是执行php代码，如果字符串没被经过任何过滤的话，会发生什么呢，我就常看见一些cms里面使用，想想，一句话的php木马不就是根据eval()原理制作的吗？ <br>6.对于system()这些系统函数，你会说在php.ini里禁止系统函数，对，这也是好办法，可是象一些程序里需要，那是不是就不用了呢？就像上次我看到的一套很漂亮的php相册一样。另外对于popen(),proc_open(),proc_close()函数你也得特别注意，尽管他们执行命令后并没有直接的输出，但你想这到底对黑客们有没有用呢。再这里php提供提供了两个函数，escapeshellarg(),escapeshellcmd(),这两个函数用来对抗系统函数的调用攻击，也就是过滤。 <br>对于危害，来举个例子，我们来看某论坛prod.php <br>07 $doubleApp = isset($argv[1]); //初始化变量$doubleApp <br>... <br>14 if( $doubleApp ) //if语句 <br>15 { <br>16 $appDir = $argv[1]; //初始化$appDir <br>17 system("mkdir $prodDir/$appDir"); //使用系统函数system来创建目录$prodDir/$appDir <br><br>本来是拿来创建$prodDir/$appDir目录的，再接着看上去，程序仅仅检测是否存在$argv[1]，缺少对$argv[1]的必要过滤，那么你就可以这样 <br>/prod.php?argv[1]=|ls%20-la或者/prod.php?argv[1]=|cat%20/etc/passwd <br>（分割符 | 在这里是UNIX的管道参数，可以执行多条命令。） <br>到这里，常见的漏洞类型应该知道点了吧。 <br><br><br>对于特殊字符的重视 <br>对于特殊字符，有句话叫All puts is invalid.外国人文章里这句话很常见的。所有输入都是有害的。你永远不要对用户所输入的东西省心，为了对付这些危害，程序员都在忙着过滤大把大把的字符，唯恐漏了什么。而有些程序员呢？好像从没注意过这些问题，从来都是敞开漏洞大门的。不说废话，还是先看看下面这些东西吧。 <br>1.其实程序的漏洞里最关键，最让开发者放心不下的就是带着$符号的美元符号，变量，对于找漏洞的人来说，抓着变量两个字就是一切。就像目录遍历这个bug，很多邮件程序都存在，开发者考虑的很周全，有的甚至加上了网络硬盘这个东西，好是好，就像 <br><a href="http://mail.com/file.php?id=1&amp;put=list&amp;tid=1&amp;file=./" target=_blank><a href="http://mail.com/file.php?id=1&amp;put=list&amp;tid=1&amp;file=./" target=_blank><font color=#000000>http://mail.com/file.php?id=1&amp;put=list&amp;tid=1&amp;file=./</font></a></a> <br>要是我们把file这个变量换成./../甚至更上层呢？目录就这样被遍历了。 <br>2.尖括号"&lt;&gt;"跨站你不会不知道吧，一些搜索栏里，文章，留言，像前段时间phpwind附件那里的跨站等等。当然，对于跨站问题，你要过滤的远远不止尖括号。不怕过滤时漏掉什么，而是怕你想不起要去过滤。 <br>3.斜杆和反斜杆：对于/和\的过滤，记得魔力论坛的附件下载处的原代码泄露吗？ <br>attachment.php?id=684&amp;u=3096&amp;extension=gif&amp;attach=.\..\..\..\..\..\..\includes\config.php&amp;filename=1.gif <br>对于过滤.. / \的问题，像windows主机不仅要过滤../还要过滤..\,windows主机对\会解析为/,这些细节跟SQL injection比起来，什么才叫深入呢？ <br>4.对于反引号(``),反引号在php中很强大，它可以执行系统命令，就像system()这些系统函数一样，如果用户的恶意语句被它所执行的话就会危害服务器，我想除了服务器设置的很好以外，对于它们，你还是老老实实的过滤好吧。 <br>5.对于换行符,NULL字符等等，像"\t,\x0B,\n,\r,\0这些，这些都是很有用的，像动网以前的上传漏洞就是因为上传中的NULL(\0)字符引起的，对于这些能随意截断程序流程的字符，你说我们在检测的时候应该有多细心呢？ <br>6.分号(;)和分割符(|) <br>分号截断程序流程，就像这个 <br>shell_exec("del ./yourpath/$file"); //使用系统函数shell_exec删除文件$file <br>变量$file没指定，那么直接写zizzy.php;del ./yourpath ,这样你的yourpath目录也就被del了。 <br>分割符(|)是UNIX里自带的管道函数，可以连接几条命令来执行。有时候加在过滤不严的系统函数中执行。 <br><br>逻辑错误 <br>验证不完全和一些逻辑错误在程序里也很容易找到，特别是现在的程序员，只顾深入的学习，而对于逻辑错误等等这样的安全意识都没有培养的意识，其实这是是靠自己去培养，而不是等着人来报告bug给你。对于逻辑错误的判断，我们只能说，多练练吧，经验才是最重要的。 <br>1.对于登陆验证的问题。举个例子：我们看某论坛的admin.php片断 <br>它这里username 和 password好像不对劲吧，存在管理员的username和password就直接通过验证，那就意味着没有用户名，没密码也行吧。我们提交 <br>GET /bbs/admin/index.php?page=general HTTP/1.1 <br>Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* <br>Accept-Language: zh-cn <br>Accept-Encoding: gzip, deflate <br>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon) <br>Host: 127.0.0.1 <br>Connection: Keep-Alive <br>Cookie: username=&#8217;or isnull(1/0) AND level=3/*; password=; <br><br>这是我们伪造的一个数据包(你问我咋伪造地？抓包再修改呗),我们使用GET来提交数据，原理也就是在cookie这里构造欺骗语句。 <br>接着，整个SQL语句就成这样 <br>SELECT * FROM users WHERE username=&#8217;&#8217;or isnull(1/0) AND level=3/*&#8217; AND password=&#8217;&#8217; <br>这里仅仅用一个&#8217;or&#8217;=&#8217;or&#8217;的原理，就把username和password的检测给绕开了，而level=3则是伪造的等级。从而就饶过了检测，进入了管理后台。 <br>对于后台的验证不能这么马虎，两行代码就算完事，你还得从SESSION(会话),Cookie这些地方来增强验证。 <br>2.上传漏洞 <br>有次我看到在一个程序config.php里对上传文件类型限制是这样的 <br>$IllegalExtentions = array(&#8217;exe&#8217;,&#8217;asp&#8217;,&#8217;php&#8217;,&#8217;php3&#8217;,&#8217;bat&#8217;,&#8217;cgi&#8217;,&#8217;pl&#8217;,&#8217;com&#8217;,&#8217;vbs&#8217;,&#8217;reg&#8217;,&#8217;pcd&#8217;,&#8217;pif&#8217;,&#8217;scr&#8217;,&#8217;bas&#8217;,&#8217;inf&#8217;,&#8217;vb&#8217;,&#8217;vbe&#8217;,&#8217;wsc&#8217;,&#8217;wsf&#8217;,&#8217;wsh&#8217;); //对于上传文件的限制，只允许上传exe,asp,php,php3,bat,cgi,pl,com,vbs,reg,pcd,pif,scr,bas,inf,vb,vbe,wsc,wsf,ws&#8217;这些文件。 <br><br>规定不许用户上传什么什么文件，其它都可以上传，这种逻辑好不好呢？如果我上传.inc, ,.php4 .phtml, .html, .pwml 这样的类型呢？为什么你不把这种逻辑思维改为规定用户除了这几种文件能传，其它的统统不允许上传。就像这样，数组改成逆向的思维。 <br>$IllegalExtentions = array(&#8217;rar&#8217;,&#8217;gif&#8217;,&#8217;jpg&#8217;,&#8217;bmp&#8217;,&#8217;pdf&#8217;）//只能上传rar,gif,jpg,bmp,pdf几种格式 <br>其实这个跟你们上传cer,asa是一个道理。 <br>3.典型的逻辑错误 <br>在一些cms（整站程序）中随便注册个用户，你会发现修改资料的地方不要求输入原来的密码，只通过判断用户id或者email，你把网页保存到本地，把id或email改成管理员的，action 改为修改提交地址，提交你就成了管理员。解决办法不太难，只要我们增加密码验证，增强那个mysql的update语句的过滤也就ok了。 <br>这些我们也没办法，多数程序员对于安全根本不去在意，本来一个人可以去做的事，为什么偏偏要分出搞web安全的和web开发两种人呢？ <br>长度问题 <br>别以为找漏洞的就是为了拿个管理员密码或者webshell,也有些不安分的人，也就是DDOSer(拒绝服务攻击者),他们的花样很多，但对于程序员来说，关键就在过滤。我所说的长度问题，不仅仅是个字符的长度，也包括时间的长度，你一定见过有人写个脚本，一下就注册成千上万的用户，或者纯粹的写垃圾数据把数据库拖死。这个时候，限制数据提交时间和验证码就起作用了。不过要真的遇到狠毒的人，一个变量的过滤问题就可以把网站搞瘫痪，这比用什么网络僵尸那些软件来得更快。 <br>不大不小的问题 <br>1.绝对路径的泄露 <br>这个问题可真是不大不小，很多程序都有，这也算安全的一部分。至少你玩注入loadfile()需要吧。当然，这时的php.ini中的display_errors也可以起作用了。 <br>2.对后台的验证 <br>不要说不信，我就曾看到一些程序这样，你去测试，注册个用户，提交管理员编辑用户的URL,比如admin_member.php?action=edit&amp;id=55&amp;level=4&amp;username=zizzy&amp;power=1这样相应的添加管理员的URL,你会发现几乎没验证，直接成功了。所以，对于后台的检测，也很有必要，就像刚出的Discuz的那个漏洞。 <br><br>过滤问题不知不觉就说了那么多，写了好多处该过滤的提醒，现在也该说说了如何进行过滤。 <br>1.在用户输入任何数据，也就是提交变量进数据库时，我们必须使用addslashes()进行过滤，像我们的注入问题，一个addslashes()也就搞定了。其实在涉及到变量取值时，intval()函数对字符串的过滤也是个不错的选择。 <br>2.在php.ini中开启magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引号变为斜杠。magic_quotes_runtime对于进出数据库的数据可以起到格式话的作用。其实，早在以前注入很疯狂时，这个参数就很流行了。 <br>3.在使用系统函数时，必须使用escapeshellarg(),escapeshellcmd()参数去过滤，这样你也就可以放心的使用系统函数。 <br>4.对于跨站，strip_tags(),htmlspecialchars()两个参数都不错，对于用户提交的的带有html和php的标记都将进行转换。比如尖括号"&lt;"就将转化为 "&lt;"这样无害的字符。 <br>5.对于相关函数的过滤，就像先前的include(),unlink,fopen()等等，只要你把你所要执行操作的变量指定好或者对相关字符过滤严密，我想这样也就无懈可击了。 <br><br>服务器安全设置 <br><br>谈服务器安全设置，我觉得很不实际的，我们大多数人都用虚拟主机，对于php.ini怎么设，那个只有网管自己看着办了。不过我还是说下， <br>1.设置&#8220;safe_mode&#8221;为&#8220;on&#8221; <br>这对于广大空间商来说是一个伟大的选项，它能极大地改进PHP的安全性。 <br>2.禁止&#8220;open_basedir&#8221; ，这个选项可以禁止指定目录之外的文件操作，还能有效地消除本地文件或者是远程文件被include()等函数的调用攻击。 <br>3.expose_php设为off ,这样php不会在http文件头中泄露信息. <br>4.设置&#8220;allow_url_fopen&#8221;为&#8220;off&#8221; 这个选项可以禁止远程文件功能，极力推荐 <br>5&#8220;log_errors&#8221;为&#8220;on&#8221; 错误日至得带上吧 <br>6..对于&#8220;display_errors，register_globals&#8221;两项要视情况而定了，display_errors太消极了，错误全关，想调试脚本都不行。至于register_globals(全局变量)把它开起来，关了会很麻烦，现在大多数程序没它支持就别想用了。 <br>这些是最必要的设置。关于php服务器更高的安全设置是门学问，也就不在本文探讨范围内了。 <br><br>这篇文章到这里就要结束了，也许你会说，你说的这些都是对开源的程序才有用，对那些zend加密的程序不就没办法可使了吗？其实，对安全来说，固其根本才是重要的吧，你再怎么加密难道逃得过黑盒测试？总有一天会被发现的吧。 <br>限于篇幅也就到这里了,我们对于php程序安全也有了初步的探索。为广大读者朋友考虑，举的例子也算是很容易去理解地，当然前提是你得会点php，要不然又是看天书了(哇，不要看到这里才问我啥是php?)。整篇文章并不是黑客教学，而是为那些想在php安全上发展的初学者和php程序员写的。如果以后你又听到谁谁又发现什么漏洞了，再怎么变也就是那些基本的东西而已。我希望本文能为你们开阔下思路，更好的发展下去。嗜酒成痴剑亦狂，重燃你的php安全之火，带着对php的执着上路吧。</p>
<h4>PHP.ini的安全设置<br>谈服务器安全设置，我觉得很不实际的，我们大多数人都用虚拟主机，对于php.ini怎么设，那个只有网管自己看着办了。不过我还是说下， <br>1.设置&#8220;safe_mode&#8221;为&#8220;on&#8221;&nbsp; <br>这对于广大空间商来说是一个伟大的选项，它能极大地改进PHP的安全性。<br>2.禁止&#8220;open_basedir&#8221; ，这个选项可以禁止指定目录之外的文件操作，还能有效地消除本地文件或者是远程文件被include()等函数的调用攻击。&nbsp; <br>3.expose_php设为off ,这样php不会在http文件头中泄露信息. <br>4.设置&#8220;allow_url_fopen&#8221;为&#8220;off&#8221; 这个选项可以禁止远程文件功能，极力推荐 <br>5&#8220;log_errors&#8221;为&#8220;on&#8221; 错误日至得带上吧 <br>6..对于&#8220;display_errors，register_globals&#8221;两项要视情况而定了，display_errors太消极了，错误全关，想调试脚本都不行。至于register_globals(全局变量)把它开起来，关了会很麻烦，现在大多数程序没它支持就别想用了。<br>这些是最必要的设置。关于php服务器更高的安全设置是门学问，也就不在本文探讨范围内了。</h4>
<img src ="http://www.blogjava.net/mayu/aggbug/123918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2007-06-13 17:58 <a href="http://www.blogjava.net/mayu/articles/123918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>php导出Excel文本</title><link>http://www.blogjava.net/mayu/articles/94279.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Tue, 16 Jan 2007 11:13:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/94279.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/94279.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/94279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/94279.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/94279.html</trackback:ping><description><![CDATA[&lt;?php<br />//header("Content-type:application/vnd.ms-excel");<br />//header("Content-Disposition:filename=test.xls");<br /><br />$file_type = "vnd.ms-excel";<br />$file_ending = "xls";<br /><br />header("Content-Type: application/$file_type");<br />header("Content-Disposition: attachment; filename=mydowns.$file_ending");<br />//header("Pragma: no-cache");<br />header("Expires: 0");<br /><br />echo "test11\t";<br />echo "test12\t";<br />echo "33\t";<br />echo "test14\t\n";<br />echo "test21\t";<br />echo "test22\t";<br />echo "33\t";<br />echo "test24\t\n";<br />echo "test31\t";<br />echo "test32\t";<br />echo "33\t";<br />echo "test34\t\n";<br />?&gt;<br />访问该php后，会提示下载，选择保存后，会保存一个名为mydowns.xls的文件，可以用excel打开该文件。<br /><img src ="http://www.blogjava.net/mayu/aggbug/94279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2007-01-16 19:13 <a href="http://www.blogjava.net/mayu/articles/94279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>php.ini中文解释</title><link>http://www.blogjava.net/mayu/articles/81707.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Fri, 17 Nov 2006 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/81707.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/81707.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/81707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/81707.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/81707.html</trackback:ping><description><![CDATA[
		<font size="2">[PHP] <br />; PHP还是一个不断发展的工具，其功能还在不断地删减 <br />; 而php.ini的设置更改可以反映出相当的变化， <br />; 在使用新的PHP版本前，研究一下php.ini会有好处的 <br />;;;;;;;;;;;;;;;;;;; <br />; 关于这个文件 ; <br />;;;;;;;;;;;;;;;;;;; <br />; 这个文件控制了PHP许多方面的观点.为了让PHP读取这个文件，它必须被命名为   <br />; 'php.ini'.PHP 将在这些地方依次查找该文件：当前工作目录；环境变量PHPRC <br />; 指明的路径；编译时指定的路径. <br />; 在windows下，编译时的路径是Windows安装目录. <br />; 在命令行模式下，php.ini的查找路径可以用 -c 参数替代. <br />; 该文件的语法非常简单.空白字符和用分号';'开始的行被简单地忽略（就象你可能 <br />; 猜到的一样）. 章节标题（例如 : [Foo]）也被简单地忽略，即使将来它们可能 <br />; 有某种的意义. <br />; <br />; 指示被指定使用如下语法： <br />; 指示标识符 = 值 <br />; directive = value <br />; 指示标识符 是 *大小写敏感的* - foo=bar 不同于 FOO = bar. <br />; <br />; 值可以是一个字符串，一个数字，一个 PHP 常量 (如： E_ALL or M_PI), INI 常量中的 <br />; 一个 (On, Off, True, False, Yes, No and None) ，或是一个表达式 <br />; (如: E_ALL &amp; ~E_NOTICE), 或是用引号括起来的字符串("foo"). <br />; <br />; INI 文件的表达式被限制于位运算符和括号. <br />; | bitwise OR <br />; &amp; bitwise AND <br />; ~ bitwise NOT <br />; ! boolean NOT <br />; <br />; 布尔标志可用 1, On, True or Yes 这些值置于开的状态. <br />; 它们可用 0, Off, False or No 这些值置于关的状态. <br />; <br />; 一个空字符串可以用在等号后不写任何东西表示，或者用 None 关键字: <br />; <br />; foo = ; 将foo置为空字符串 <br />; foo = none ; 将foo置为空字符串 <br />; foo = "none" ; 将foo置为字符串'none' <br />; <br />; 如果你值设置中使用常量，而这些常量属于动态调入的扩展库（不是 PHP 的扩展，就是 <br />; Zend 的扩展），你仅可以调入这些扩展的行*之后*使用这些常量. <br />; <br />; 所有在 php.ini-dist 文件里设定的值与内建的默认值相同（这是说，如果 php.ini <br />; 没被使用或者你删掉了这些行，默认值与之相同）. <br />;;;;;;;;;;;;;;;;;;;; <br />; 语言选项 ; <br />;;;;;;;;;;;;;;;;;;;; <br />engine = On <br />; 使 PHP scripting language engine（PHP 脚本语言引擎）在 Apache下有效. <br />short_open_tag = On <br />; 允许 &lt;? 标识（这种简单表示）. 仅有 &lt;?php and &lt;script&gt; tags 将被识别. <br />asp_tags = Off <br />; 允许ASP-style &lt;% %&gt; tags <br />precision = 14 <br />; 浮点类型数显示时的有效位数 <br />y2k_compliance = Off <br />; 是否打开 2000年适应 (可能在非Y2K适应的浏览器中导致问题) <br />output_buffering = Off <br />; 输出缓存允许你甚至在输出正文内容之后发送 header（标头，包括cookies）行 <br />; 其代价是输出层减慢一点点速度.你可以使用输出缓存在运行时打开输出缓存， <br />; 或者在这里将指示设为 On 而使得所有文件的输出缓存打开. <br />output_handler = ; 你可以重定向你的脚本的所有输出到一个函数， <br />; 那样做可能对处理或以日志记录它有用. <br />; 例如若你将这个output_handler 设为"ob_gzhandler", <br />; 则输出会被透明地为支持gzip或deflate编码的浏览器压缩. <br />; 设一个输出处理器自动地打开输出缓冲. <br />implicit_flush = Off <br />; 强制flush（刷新）让PHP 告诉输出层在每个输出块之后自动刷新自身数据. <br />; 这等效于在每个 print() 或 echo() 调用和每个 HTML 块后调用flush()函数. <br />; 打开这项设置会导致严重的运行时冲突，建议仅在debug过程中打开. <br />allow_call_time_pass_reference = On <br />; 是否让强迫函数调用时按引用传递参数.这一方法遭到抗议， <br />; 并可能在将来版本的PHP/Zend里不再支持. <br />; 受到鼓励的指定哪些参数按引用传递的方法是在函数声明里. <br />; 你被鼓励尝试关闭这一选项并确认你的脚本仍能正常工作，以保证在将来版本的语言里 <br />; 它们仍能工作.（你将在每次使用该特点时得到一个警告，而参数将按值而不是按引用 <br />; 传递）. <br />; Safe Mode 安全模式 <br />safe_mode = Off <br />safe_mode_exec_dir = <br />safe_mode_allowed_env_vars = PHP_ <br />; ？Setting certain environment variables <br />; ？may be a potential security breach. <br />; 该指示包含用逗号分隔的前缀列表.安全模式中，用户仅可以替换 <br />; 以在此列出的前缀开头的环境变量的值. <br />; 默认地，用户将仅能 设定以PHP_开头的环境变量，（如: PHP_FOO=BAR）. <br />; 注意: 如果这一指示为空，PHP 将让用户更改任意环境变量! <br />safe_mode_protected_env_vars = LD_LIBRARY_PATH <br />; 这条指示包含一个用逗号分隔的环境变量列表，那是最终用户将不能用putenv () 更改的. <br />; 这些变量甚至在safe_mode_allowed_env_vars 设置为允许的情况下得到保护. <br />disable_functions = <br />; 这条指示让你可以为了安全的原因让特定函数失效. <br />; 它接受一个用逗号分隔的函数名列表. <br />; 这条指示 *不受* 安全模式是否打开的影响. <br />; 语法高亮模式的色彩. <br />; 只要能被&lt;font color=???&gt;接受的东西就能工作. <br />highlight.string = #DD0000 <br />highlight.comment = #FF8000 <br />highlight.keyword = #007700 <br />highlight.bg = #FFFFFF <br />highlight.default = #0000BB <br />highlight.html = #000000 <br />; Misc 杂项 <br />expose_php = Off <br />; 决定 PHP 是否标示它装在服务器上的事实（例如：加在它 —PHP—给Web服务 <br />; 发送的信号上）. <br />; （我个人的意见，在出现什么power-by的header的时候，把这关掉.） <br />; 它不会有安全上的威胁, 但它使检查你的服务器上是否安装了PHP成为了可能. <br />;;;;;;;;;;;;;;;;;;; <br />; Resource Limits ; <br />;;;;;;;;;;;;;;;;;;; <br />max_execution_time = 30 ; 每个脚本的最大执行时间, 按秒计 <br />memory_limit = 8388608 ; 一个脚本最大可使用的内存总量 (这里是8MB) <br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; <br />; Error handling and logging ; <br />; 出错控制和登记 ; <br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; <br />; 错误报告是按位的.或者将数字加起来得到想要的错误报告等级. <br />; E_ALL - 所有的错误和警告 <br />; E_ERROR - 致命性运行时错 <br />; E_WARNING - 运行时警告（非致命性错）   <br />; E_PARSE - 编译时解析错误 <br />; E_NOTICE - 运行时提醒(这些经常是是你的代码的bug引起的， <br />;也可能是有意的行为造成的.(如：基于未初始化的变量自动初始化为一个 <br />;空字符串的事实而使用一个未初始化的变量) <br />; E_CORE_ERROR - 发生于PHP启动时初始化过程中的致命错误 <br />; E_CORE_WARNING - 发生于PHP启动时初始化过程中的警告(非致命性错) <br />; E_COMPILE_ERROR - 编译时致命性错 <br />; E_COMPILE_WARNING - 编译时警告(非致命性错) <br />; E_USER_ERROR - 用户产生的出错消息 <br />; E_USER_WARNING - 用户产生的警告消息 <br />; E_USER_NOTICE - 用户产生的提醒消息 <br />; 例子: <br />; error_reporting = E_ALL &amp; ~E_NOTICE ; 显示所有的错误，除了提醒 <br />; error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR ; 仅显示错误 <br />error_reporting = E_ALL &amp; ~E_NOTICE ; 显示所有的错误，除了提醒 <br />display_errors = On ; 显示出错误信息(作为输出的一部分) <br />; 在最终发布的web站点上，强烈建议你关掉这个特性，并使用 <br />; 错误日志代替（参看下面）. <br />; 在最终发布的web站点继续让 display_errors 有效可能 <br />; 暴露一些有关安全的信息，例如你的web服务上的文件路径、 <br />; 你的数据库规划或别的信息. <br />display_startup_errors = Off ; 甚至当display_erroes打开了，发生于PHP的启动的步骤中 <br />; 的错误也不会被显示. <br />; 强烈建议保持使 display_startup_errors 关闭， <br />; 除了在改错过程中. <br />log_errors = Off ; 在日志文件里记录错误（服务器指定的日志，stderr标准错误输出，或error_log(下面的）） <br />; 正如上面说明的那样，强烈建议你在最终发布的web站点以日志记录错误 <br />; 取代直接错误输出. <br />track_errors = Off ; 保存最近一个 错误/警告 消息于变量 $php_errormsg (boolean) <br />;error_prepend_string = "&lt;font color=ff0000&gt;" ; 于错误信息前输出的字符串   <br />;error_append_string = "&lt;/font&gt;" ; 于错误信息后输出的字符串 <br />;error_log = filename ; 记录错误日志于指定文件 <br />;error_log = syslog ; 记录错误日志于系统日志 syslog (NT 下的事件日志, Windows 95下无效) <br />warn_plus_overloading = Off ; 当将‘+’用于字符串时警告 <br />;;;;;;;;;;;;;;;;; <br />; Data Handling ; <br />;;;;;;;;;;;;;;;;; <br />variables_order = "EGPCS" ; 这条指示描述了PHP 记录 <br />; GET, POST, Cookie, Environment and Built-in 这些变量的顺序. <br />; （以 G, P, C, E &amp; S 代表，通常以 EGPCS 或 GPC 的方式引用）. <br />; 按从左到右记录，新值取代旧值. <br />register_globals = On ; 是否将这些 EGPCS 变量注册为全局变量. <br />; 若你不想让用户数据不在全局范围内混乱的话，你可能想关闭它. <br />; 这和 track_vars 连起来用更有意义 — 这样你可以通过 <br />; $HTTP_*_VARS[] 数组访问所有的GPC变量. <br />register_argc_argv = On ; 这条指示告诉 PHP 是否声明 argv和argc 变量 <br />; （注：这里argv为数组,argc为变量数） <br />; （其中包含用GET方法传来的数据）. <br />; 若你不想用这些变量，你应当关掉它以提高性能. <br />track_vars = On ; 使$HTTP_*_VARS[]数组有效，这里*在使用时用 <br />; ENV, POST, GET, COOKIE or SERVER替换 <br />post_max_size = 8M ; PHP将接受的POST数据最大大小. <br />gpc_order = "GPC" ; 这条指示被人反对.用 variables_order 代替. <br />; Magic quotes <br />magic_quotes_gpc = On ; 在输入的GET/POST/Cookie数据里使用魔术引用 <br />; （原文就这样，呵呵，所谓magic quotes 应该是指用转义符加在引用性的控制字符上，如 \'....） <br />magic_quotes_runtime= Off ; 对运行时产生的数据使用魔术引用， <br />; 例如：用SQL查询得到的数据，用exec()函数得到的数据，等等 <br />magic_quotes_sybase = Off ; 采用 Sybase形式的魔术引用（用 '' 脱出 ' 而不用 \'） <br />; 自动在 PHP 文档之前和之后添加文件 <br />auto_prepend_file = <br />auto_append_file = <br />; 象4.04b4一样，PHP 默认地总是在 “Content-type:” 头标输出一个字符的编码方式. <br />; 让输出字符集失效，只要设置为空. <br />; PHP 的内建默认值是 text/html <br />default_mimetype = "text/html" <br />;default_charset = "iso-8859-1" <br />;;;;;;;;;;;;;;;;;;;;;;;;; <br />; Paths and Directories ; <br />;;;;;;;;;;;;;;;;;;;;;;;;; <br />include_path = ; include 路径设置，UNIX: "/path1:/path2" Windows: "\path1;\path2" <br />doc_root = ; php 页面的根路径，仅在非空时有效 <br />user_dir = ; 告知 php 在使用 /~username 打开脚本时到哪个目录下去找，仅在非空时有效 <br />;upload_tmp_dir = ; 存放用HTTP协议上载的文件的临时目录（在没指定时使用系统默认的） <br />upload_max_filesize = 2097152 ; 文件上载默认地限制为2 Meg <br />extension_dir = c:\php\ ; 存放可加载的扩充库（模块）的目录 <br />enable_dl = On ; 是否使dl()有效. <br />; 在多线程的服务器上 dl()函数*不能*很好地工作， <br />; 例如IIS or Zeus，并在其上默认为禁止 <br />;;;;;;;;;;;;;;;; <br />; File Uploads ; <br />;;;;;;;;;;;;;;;; <br />file_uploads = On ; 是否允许HTTP方式文件上载 <br />;upload_tmp_dir = ; 用于HTTP上载的文件的临时目录（未指定则使用系统默认） <br />upload_max_filesize = 2M ; 上载文件的最大许可大小 <br />; Fopen wrappers ; <br />;;;;;;;;;;;;;;;;;; <br />allow_url_fopen = On ; 是否允许把URLs当作http:.. 或把文件当作ftp:... <br />;;;;;;;;;;;;;;;;;;;;;; <br />; 动态扩展 ; <br />; Dynamic Extensions ; <br />;;;;;;;;;;;;;;;;;;;;;; <br />; 若你希望一个扩展库自动加载，用下面的语法： <br />; extension=modulename.extension <br />; 例如，在windows上， <br />; extension=msql.dll <br />; or 在UNIX下, <br />; extension=msql.so <br />; 注意，这只应当是模块的名字，不需要目录信息放在里面. <br />; 用上面的 extension_dir 指示指定扩展库的位置. <br />;Windows 扩展 <br />;extension=php_nsmail.dll <br />extension=php_calendar.dll <br />;extension=php_dbase.dll <br />;extension=php_filepro.dll <br />extension=php_gd.dll <br />;extension=php_dbm.dll <br />;extension=php_mssql.dll <br />;extension=php_zlib.dll <br />;extension=php_filepro.dll <br />;extension=php_imap4r2.dll <br />;extension=php_ldap.dll <br />;extension=php_crypt.dll <br />;extension=php_msql2.dll <br />;extension=php_odbc.dll <br />; 注意， MySQL的支持现在是内建的，因此，不需要用它的dll <br />;;;;;;;;;;;;;;;;;;; <br />; 模块设定 ; <br />; Module Settings ; <br />;;;;;;;;;;;;;;;;;;; <br />[Syslog] <br />define_syslog_variables = Off ; 是否定义各种的系统日志变量 <br />; 如：$LOG_PID, $LOG_CRON, 等等. <br />; 关掉它是个提高效率的好主意. <br />; 运行时，你可以调用函数define_syslog_variables()，来定义这些变量 <br />[mail function] <br />SMTP = localhost ;仅用于win32系统 <br />sendmail_from = </font>
		<a href="mailto:me@localhost.com">
				<font size="2">me@localhost.com</font>
		</a>
		<font size="2">;仅用于win32系统 <br />;sendmail_path = ;仅用于unix, 也可支持参数（默认的是'sendmail -t -i'） <br />[Debugger] <br />debugger.host = localhost <br />debugger.port = 7869 <br />debugger.enabled = False <br />[Logging] <br />; 这些配置指示用于示例的日志记录机制. <br />; 看 examples/README.logging 以得到更多的解释 <br />;logging.method = db <br />;logging.directory = /path/to/log/directory <br />[Java] <br />;java.class.path = .\php_java.jar <br />;java.home = c:\jdk <br />;java.library = c:\jdk\jre\bin\hotspot\jvm.dll <br />;java.library.path = .\ <br />[SQL] <br />sql.safe_mode = Off <br />[ODBC] <br />;uodbc.default_db = Not yet implemented <br />;uodbc.default_user = Not yet implemented <br />;uodbc.default_pw = Not yet implemented <br />uodbc.allow_persistent = On ; 允许或禁止 持久连接 <br />uodbc.check_persistent = On ; 在重用前检查连接是否还可用 <br />uodbc.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制 <br />uodbc.max_links = -1 ; 连接的最大数目（持久和非持久）.-1 代表无限制 <br />uodbc.defaultlrl = 4096 ; 控制 LONG 类型的字段.返回变量的字节数，0 代表通过（？）0 means passthru <br />uodbc.defaultbinmode = 1 ; 控制 二进制数据.0 代表?????Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char <br />; 见有关 odbc_binmode 和 odbc_longreadlen 的文档以得到 uodbc.defaultlrl 和 uodbc.defaultbinmode 的解释. <br />[MySQL] <br />mysql.allow_persistent = On ; 允许或禁止 持久连接 <br />mysql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制 <br />mysql.max_links = -1 ; 连接的最大数目（持久和非持久）.-1 代表无限制 <br />mysql.default_port = ; mysql_connect() 使用的默认端口，如不设置，mysql_connect() <br />; 将使用变量 $MYSQL_TCP_PORT，或在/etc/services 下的mysql-tcp 条目(unix)， <br />; 或在编译是定义的 MYSQL_PORT(按这样的顺序) <br />; Win32环境，将仅检查MYSQL_PORT. <br />mysql.default_socket = ; 用于本地 MySql 连接的默认的套接字名.为空，使用 MYSQL 内建值 <br />mysql.default_host = ; mysql_connect() 默认使用的主机（安全模式下无效） <br />mysql.default_user = ; mysql_connect() 默认使用的用户名（安全模式下无效） <br />mysql.default_password = ; mysql_connect() 默认使用的密码（安全模式下无效） <br />; 注意，在这个文件下保存密码通常是一个*坏*主意 <br />; *任何*可以使用PHP访问的用户可以运行 <br />; 'echo cfg_get_var("mysql.default_password")'来显示那个密码! <br />; 而且当然地，任何有读该文件权力的用户也能看到那个密码. <br />[mSQL] <br />msql.allow_persistent = On ; 允许或禁止 持久连接 <br />msql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制 <br />msql.max_links = -1 ; 连接的最大数目（持久和非持久）.-1 代表无限制 <br />[PostgresSQL] <br />pgsql.allow_persistent = On ; 允许或禁止 持久连接 <br />pgsql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制 <br />pgsql.max_links = -1 ; 连接的最大数目（持久和非持久）.-1 代表无限制 <br />[Sybase] <br />sybase.allow_persistent = On ; 允许或禁止 持久连接 <br />sybase.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制   <br />sybase.max_links = -1 ; 连接的最大数目（持久和非持久）.-1 代表无限制 <br />;sybase.interface_file = "/usr/sybase/interfaces" <br />sybase.min_error_severity = 10 ; 显示的错误的最低严重性 <br />sybase.min_message_severity = 10 ; 显示的消息的最低重要性 <br />sybase.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式.若打开，这将导致 PHP 自动地 <br />; 把根据结果的 Sybase 类型赋予它们， <br />; 而不是把它们全当成字符串. <br />; 这个兼容模式不会永远留着， <br />; 因此，将你的代码进行需要的修改， <br />; 并将该项关闭. <br />[Sybase-CT] <br />sybct.allow_persistent = On ; 允许或禁止 持久连接 <br />sybct.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制 <br />sybct.max_links = -1 ; 连接的最大数目（持久和非持久）.-1 代表无限制 <br />sybct.min_server_severity = 10 ; 显示的错误的最低严重性 <br />sybct.min_client_severity = 10 ; 显示的消息的最低重要性 <br />[bcmath] <br />bcmath.scale = 0 ; 用于所有bcmath函数的10十进制数数字的个数number of decimal digits for all bcmath functions <br />[browscap] <br />;browscap = extra/browscap.ini <br />browscap = C:\WIN\SYSTEM\inetsrv\browscap.ini <br />[Informix] <br />ifx.default_host = ; ifx_connect() 默认使用的主机（安全模式下无效） <br />ifx.default_user = ; ifx_connect() 默认使用的用户名（安全模式下无效） <br />ifx.default_password = ; ifx_connect() 默认使用的密码（安全模式下无效） <br />ifx.allow_persistent = On ; 允许或禁止 持久连接 <br />ifx.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制 <br />ifx.max_links = -1 ; 连接的最大数目（持久和非持久）.-1 代表无限制 <br />ifx.textasvarchar = 0 ; 若打开，select 状态符返回一个 ‘text blob’字段的内容，而不是它的id <br />ifx.byteasvarchar = 0 ; 若打开，select 状态符返回一个 ‘byte blob’字段的内容，而不是它的id <br />ifx.charasvarchar = 0 ; 追踪从固定长度的字符列里剥离的空格. <br />; 可能对 Informix SE 用户有效. <br />ifx.blobinfile = 0 ; 若打开，text和byte blobs 的内容被导出到一个文件 <br />; 而不是保存到内存. <br />ifx.nullformat = 0 ; NULL（空）被作为空字段返回，除非，这里被设为1. <br />; 这种情况下（为1），NULL作为字串NULL返回. <br />[Session] <br />session.save_handler = files ; 用于保存/取回数据的控制方式 <br />session.save_path = C:\win\temp ; 在 save_handler 设为文件时传给控制器的参数， <br />; 这是数据文件将保存的路径. <br />session.use_cookies = 1 ; 是否使用cookies <br />session.name = PHPSESSID <br />; 用在cookie里的session的名字 <br />session.auto_start = 0 ; 在请求启动时初始化session <br />session.cookie_lifetime = 0 ; 为按秒记的cookie的保存时间， <br />; 或为0时，直到浏览器被重启 <br />session.cookie_path = / ; cookie的有效路径 <br />session.cookie_domain = ; cookie的有效域 <br />session.serialize_handler = php ; 用于连接数据的控制器 <br />; php是 PHP 的标准控制器. <br />session.gc_probability = 1 ; 按百分比的'garbage collection（碎片整理）'进程 <br />; 在每次 session 初始化的时候开始的可能性. <br />session.gc_maxlifetime = 1440 ; 在这里数字所指的秒数后，保存的数据将被视为 <br />; '碎片(garbage)'并由gc 进程清理掉. <br />session.referer_check = ; 检查 HTTP引用以使额外包含于URLs中的ids无效 <br />session.entropy_length = 0 ; 从文件中读取多少字节 <br />session.entropy_file = ; 指定这里建立 session id <br />; session.entropy_length = 16 <br />; session.entropy_file = /dev/urandom <br />session.cache_limiter = nocache ; 设为{nocache,private,public},以决定 HTTP 的 <br />; 缓存问题 <br />session.cache_expire = 180 ; 文档在 n 分钟后过时 <br />session.use_trans_sid = 1 ; 使用过渡性的 sid 支持，若编译时许可了 <br />; --enable-trans-sid <br />url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" <br />[MSSQL] <br />;extension=php_mssql.dll <br />mssql.allow_persistent = On ; 允许或禁止 持久连接 <br />mssql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制 <br />mssql.max_links = -1 ; 连接的最大数目（持久和非持久）.-1 代表无限制 <br />mssql.min_error_severity = 10 ; 显示的错误的最低严重性 <br />mssql.min_message_severity = 10 ; 显示的消息的最低重要性   <br />mssql.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式. <br />[Assertion] <br />; ？？？？？ <br />;assert.active = On ; ？assert(expr); active by default <br />;assert.warning = On ; issue a PHP warning for each failed assertion. <br />;assert.bail = Off ; don't bail out by default. <br />;assert.callback = 0 ; user-function to be called if an assertion fails. <br />;assert.quiet_eval = 0 ; eval the expression with current error_reporting(). set to true if you want error_reporting(0) around the eval(). <br />[Ingres II] <br />ii.allow_persistent = On ; 允许或禁止 持久连接 <br />ii.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制 <br />ii.max_links = -1 ; 连接的最大数目（持久和非持久）.-1 代表无限制 <br />ii.default_database = ; 默认 database (format : [node_id::]dbname[/srv_class] <br />ii.default_user = ; 默认 user <br />ii.default_password = ; 默认 password <br />[Verisign Payflow Pro] <br />pfpro.defaulthost = "test.signio.com" ; 默认的 Signio 服务器 <br />pfpro.defaultport = 443 ; 连接的默认端口 <br />pfpro.defaulttimeout = 30 ; 按秒计的默认超时时间 <br />; pfpro.proxyaddress = ; 默认的代理的 IP 地址（如果需要） <br />; pfpro.proxyport = ; 默认的代理的端口 <br />; pfpro.proxylogon = ; 默认的代理的登录（logon 用户名） <br />; pfpro.proxypassword = ; 默认的代理的密码 <br />[Sockets] <br />sockets.use_system_read = On ; 使用系统的read() 函数替代 php_read()封装 <br />; Local Variables: （局部变量） <br />; tab-width: 4 <br />; End:</font>
		<br />
		<!---->
<img src ="http://www.blogjava.net/mayu/aggbug/81707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-11-17 10:51 <a href="http://www.blogjava.net/mayu/articles/81707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP文件上传</title><link>http://www.blogjava.net/mayu/articles/75538.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Tue, 17 Oct 2006 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/75538.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/75538.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/75538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/75538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/75538.html</trackback:ping><description><![CDATA[
		<span lang="EN-US">
				<br />
				<font size="2">1. </font>
		</span>
		<font size="2">在<span lang="EN-US">form</span>表单中要将<span lang="EN-US">method</span>属性设为<span class="SpellE"><span lang="EN-US">post,enctype</span></span>属性设为<span lang="EN-US">multipart/form-data</span>；<span lang="EN-US"><?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></font>
		<p>
				<span lang="EN-US" style="FONT-SIZE: 9pt">2. </span>
				<span style="FONT-SIZE: 9pt">在<span lang="EN-US">form</span>表单中可以加一个<span lang="EN-US">hidden</span>类型的<span lang="EN-US">input</span>框<span lang="EN-US">,</span>其中名字为<span lang="EN-US"> MAX_FILE_SIZE</span>的隐藏值域，通过设置其<span lang="EN-US">VALUE</span>可以限制上载文件的大小。当然<span lang="EN-US">,</span>这个值不可能超过<span lang="EN-US">PHP</span>的配置文件<span lang="EN-US">(PHP3</span>为<span lang="EN-US">php3.ini,PHP4</span>为<span lang="EN-US">php.ini)</span>中的<span class="SpellE"><span lang="EN-US">upload_max_filesize</span></span><span lang="EN-US">,</span>注意这个<span lang="EN-US">input</span><span class="GramE">框一定</span>要放在所有<span lang="EN-US">file</span>类型的<span lang="EN-US">input</span>框前面<span lang="EN-US">,</span>否则也是无效的哦； <span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p>
				<span lang="EN-US" style="FONT-SIZE: 9pt">3. </span>
				<span style="FONT-SIZE: 9pt">在<span lang="EN-US">PHP</span>程序运行完后<span lang="EN-US">,</span>上传文件被放在了临时目录下。如果上传文件没有被改名或移动，那么在请求的最后该文件将自动被从临时文件夹中删除，所以我们最好立即将新的上传文件上传移到一个永久目录下或更改其文件名。 <span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p>
				<span lang="EN-US" style="FONT-SIZE: 9pt">
						<br />
				</span>
				<span style="FONT-SIZE: 9pt">首先我们需要一个上载文件的表单网页（<span lang="EN-US">upload.htm</span>）：<span lang="EN-US"><br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt;Upload Your File&lt;/TITLE&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY&gt;<br />&lt;FORM ACTION="receiver.php3"<br />ENCTYPE="multipart/form-data" METHOD=POST&gt;<br />&lt;INPUT TYPE="HIDDEN"<br />NAME="MAX_FILE_SIZE" VALUE="2000000"&gt;<br />&lt;INPUT TYPE="FILE"<br />NAME="<span class="SpellE">uploadfile</span>" SIZE="24" MAXLENGTH="80"&gt;<br />&lt;BR&gt;&lt;BR&gt;<br />&lt;INPUT TYPE="SUBMIT" VALUE="Upload File!"<br />NAME="<span class="SpellE">sendit</span>"&gt;<br />&lt;INPUT TYPE="SUBMIT" VALUE="Cancel"<br />NAME="<span class="SpellE">cancelit</span>"&gt;&lt;BR&gt;<br />&lt;/FORM&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;<o:p></o:p></span></span>
		</p>
		<p>
				<span style="FONT-SIZE: 9pt">处理上载文件的<span lang="EN-US">PHP</span>文件（<span lang="EN-US">receiver.php3</span>）<span lang="EN-US"><br />&lt;?<br />function <span class="SpellE">do_upload</span> ()<br />{<br />global $<span class="SpellE">uploadfile</span>, $<span class="SpellE">uploadfile_size</span>;<br />global $<span class="SpellE">local_file</span>, $<span class="SpellE">error_msg</span>;<br />if ( $<span class="SpellE">uploadfile</span> == "none" )<br />{<br />$<span class="SpellE">error_msg</span> = "</span>对不起，你没有选定任何文件上传！<span lang="EN-US">";<br />return;<br />}<br />if ( $<span class="SpellE">uploadfile_size</span> &gt; 2000000 )<br />{<br />$<span class="SpellE">error_msg</span> = "</span>对不起，你要上传的文件太大了！<span lang="EN-US">";<br />return;<br />}<br />$<span class="SpellE">the_time</span> = time ();<o:p></o:p></span></span>
		</p>
		<p>
				<span lang="EN-US" style="FONT-SIZE: 9pt">// </span>
				<span style="FONT-SIZE: 9pt">在这里指定你用来存放上传文件的目录，你需要对以下目录有写权限<span lang="EN-US"><br />// </span>同时，我们也可以给上传文件指定另外的目录，如：<span lang="EN-US">$<span class="SpellE">upload_dir</span> = "/local/uploads"; <o:p></o:p></span></span>
		</p>
		<p>
				<span lang="EN-US" style="FONT-SIZE: 9pt">$<span class="SpellE">upload_dir</span> = "d:/upload";<br />$<span class="SpellE">local_file</span> = "$<span class="SpellE">upload_dir/$the_time</span>";<br />if ( <span class="SpellE">file_exists</span> ( '$<span class="SpellE">local_file</span>' ) )<br />{<br />$<span class="SpellE">seq</span> = 1;<br />while ( <span class="SpellE">file_exists</span> ( "$<span class="SpellE">upload_dir/$the_time$seq</span>" ) ) { $<span class="SpellE">seq</span>++; }<br />$<span class="SpellE">local_file</span> = "$<span class="SpellE">upload_dir/$the_time$seq</span>";<br />};<br />rename ( $<span class="SpellE">uploadfile</span>, $<span class="SpellE">local_file</span> );<br /><span class="SpellE">display_page</span> ();<br />}<br />function <span class="SpellE">display_page</span> ()<br />{<br />// </span>
				<span style="FONT-SIZE: 9pt">这里是你的页面内容<span lang="EN-US"><br />}<br />?&gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt;php3 Receiving Script&lt;/TITLE&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY&gt;<br />&lt;?<br />if ( $<span class="SpellE">error_msg</span> ) { echo "&lt;B&gt;$<span class="SpellE">error_msg</span>&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;"; }<br />if ( $<span class="SpellE">sendit</span> )<br />{<br /><span class="SpellE">do_upload</span> ();<br />echo "</span>文件上载成功！<span lang="EN-US">";<br />}<br /><span class="SpellE">elseif</span> ( $<span class="SpellE">cancelit</span> )<br />{<br />header ( "Location: $<span class="SpellE">some_other_script</span>" );<br />echo "</span>文件上载失败<span lang="EN-US">!";<br />exit;<br />}<br />else<br />{<br /><span class="SpellE">some_other_func</span> ();<br />}<br />?&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt; </span></span>
		</p>
		<!---CENTER><IMG SRC="images/ft_logo.gif" BORDER="0" ALT=""></CENTE- -->
<img src ="http://www.blogjava.net/mayu/aggbug/75538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-10-17 09:56 <a href="http://www.blogjava.net/mayu/articles/75538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>php Session 函数库</title><link>http://www.blogjava.net/mayu/articles/75014.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Fri, 13 Oct 2006 07:48:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/75014.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/75014.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/75014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/75014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/75014.html</trackback:ping><description><![CDATA[
		<table width="100%" border="0">
				<tbody>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_start.php" alt="function.php?session_start">session_start</a>:</td>
								<td valign="top">初始 session。</td>
						</tr>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_destroy.php" alt="function.php?session_destroy">session_destroy</a>:</td>
								<td valign="top">结束 session。</td>
						</tr>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_name.php" alt="function.php?session_name">session_name</a>:</td>
								<td valign="top">存取目前 session 名称。</td>
						</tr>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_module_name.php" alt="function.php?session_module_name">session_module_name</a>:</td>
								<td valign="top">存取目前 session 模块。</td>
						</tr>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_save_path.php" alt="function.php?session_save_path">session_save_path</a>:</td>
								<td valign="top">存取目前 session 路径。</td>
						</tr>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_id.php" alt="function.php?session_id">session_id</a>:</td>
								<td valign="top">存取目前 session 代号。</td>
						</tr>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_register.php" alt="function.php?session_register">session_register</a>:</td>
								<td valign="top">注册新的变量。</td>
						</tr>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_unregister.php" alt="function.php?session_unregister">session_unregister</a>:</td>
								<td valign="top">删除已注册变量。</td>
						</tr>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_is_registered.php" alt="function.php?session_is_registered">session_is_registered</a>:</td>
								<td valign="top">检查变量是否注册。</td>
						</tr>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_decode.php" alt="function.php?session_decode">session_decode</a>:</td>
								<td valign="top">Session 资料解码。</td>
						</tr>
						<tr>
								<td valign="top" align="right">
										<a href="http://www.itlearner.com/code/php/function.php-session_encode.php" alt="function.php?session_encode">session_encode</a>:</td>
								<td valign="top">Session 资料编码。</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/mayu/aggbug/75014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-10-13 15:48 <a href="http://www.blogjava.net/mayu/articles/75014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP中使用crypt()实现用户身份验证</title><link>http://www.blogjava.net/mayu/articles/72517.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Thu, 28 Sep 2006 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/72517.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/72517.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/72517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/72517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/72517.html</trackback:ping><description><![CDATA[
		<p>在开发PHP应用中如果不想自己开发新的加密算法，还可以利用PHP提供的crypt()函数来完成单向加密功能。</p>
		<p>　　了解crypt()</p>
		<p>　　只要有一点使用非Windows平台经验的读者都可能对crypt()相当熟悉，这一函数完成被称作单向加密的功能，它可以加密一些明码，但不能反过来将密码重新转换为原来的明码。crypt()函数定义如下。</p>
		<p>　　string crypt (string input_string [, string salt])</p>
		<p>　　其中，input_string参数是需要加密的明文字符串，第二个可选的salt是一个位字串，能够影响加密的暗码，进一步排除被破解的可能性。缺省情况下，PHP使用一个2个字符的DES干扰串，如果系统使用的是MD5(参考下一节内容)，PHP则会使用一个12个字符的干扰串。可以通过执行下面的命令发现系统将要使用的干扰串的长度。</p>
		<p>　　print "My system salt size is: ". CRYPT_SALT_LENGTH;</p>
		<p>　　crypt()支持4种加密算法，表19.1显示了其支持的算法和相应的salt参数的长度。</p>
		<p>　　表crypt()支持四种加密算法算法 Salt长度 <br />CRYPT_STD_DES 2-character (Default) <br />CRYPT_EXT_DES 9-character <br />CRYPT_MD5 12-character beginning with $1$ <br />CRYPT_BLOWFISH 16-character beginning with $2$ <br />　　从表面上看，crypt()的函数似乎没有什么用处，但该函数的确被广泛用来保证系统密码的完整性。因为，单向加密的口令即使落入第三方的手里，由于不能被还原为明文，也没有什么大用处。</p>
		<p>　　用crypt()实现用户身份验证</p>
		<p>　　上一部分简单介绍了crypt()函数的功能，下面利用其来实现用户的身份验证，其所要实现的目标同19.2.3节所介绍的一致。</p>
		<p>1 ＜!--check_user_crypt.php:使用crypt() 函数验证用户----------------＞<br />2 ＜?php<br />3 $user_name=$_POST["user_name"];<br />4 require_once("sys_conf.inc"); //系统配置文件，包含数据库配置信息<br />5<br />6 //连接数据库<br />7 $link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);<br />8 mysql_select_db($DBNAME); //选择数据库my_chat<br />9<br />10 //查询是否存在登录用户信息<br />11 $str="select name,password from user where name ='$user_name'";<br />12 $result=mysql_query($str,$link_id); //执行查询<br />13 @$rows=mysql_num_rows($result); //取得查询结果的记录笔数<br />14 $user_name=$_SESSION["user_name"];<br />15 $password=$_POST["password"];<br />16 $salt = substr($password, 0, 2);<br />17 $password_en=crypt($password,$salt); //使用crypt()对用户密码进行加密<br />18<br />19 //对于老用户<br />20 if($rows!=0)<br />21 {<br />22 list($name,$pwd)=mysql_fetch_row($result);<br />23<br />24 //如果密码输入正确<br />25 if($pwd==$password_en)<br />26 {<br />27 $str="update user set is_online =1 where name ='$user_name' and password='$password_en'";<br />28 $result=mysql_query($str, $link_id);//执行查询<br />29 require("main.php"); //转到聊天页面<br />30 }<br />31 //密码输入错误<br />32 else<br />33 {<br />34 require("relogin.php");<br />35 }<br />36<br />37 }<br />38 //对于新用户，将其信息写入数据库<br />39 else<br />40 {<br />41 $str="insert into user (name,password,is_online) values('$user_ name','$password_en',1)";<br />42 $result=mysql_query($str, $link_id); //执行查询<br />43 require("main.php"); //转到聊天页面<br />44 }<br />45 //关闭数据库<br />46 mysql_close($link_id);<br />47 ?＞</p>
		<p>　　示例与上一节所介绍的使用XOR加密算法来保护用户信息非常类似，其核心部分在于第16、17行使用crypt()函数获取加密后的密码，而通过在第25行比较数据库中的密码和加密后的密码是否相等来检查用户是否合法。</p>
		<p>　　下面，通过一个实例来看一下加密后的密码会变成什么样子。</p>
		<p>　　例如，用户名为rock，密码为123456，则加密后的密码为:</p>
		<p>　　12tir.zIbWQ3c</p>
		<p>　　上面就实现了一个简单的用户身份验证系统。在使用crypt()保护重要的机密信息时，需要注意的是，在缺省状态下使用crypt()并不是最安全的，只能用在对安全性要求较低的系统中。<br /></p>
<img src ="http://www.blogjava.net/mayu/aggbug/72517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-28 11:46 <a href="http://www.blogjava.net/mayu/articles/72517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>php获取数字随机数</title><link>http://www.blogjava.net/mayu/articles/72495.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Thu, 28 Sep 2006 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/72495.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/72495.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/72495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/72495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/72495.html</trackback:ping><description><![CDATA[
		<div style="MARGIN-LEFT: 5pt">
				<span style="COLOR: #999">
						<font size="+0"> </font>
				</span>
				<span style="COLOR: #000000">
						<font size="+0">
								<span style="COLOR: #ff9900">#-------------------------------------------</span>
						</font>
				</span>
		</div>
		<div style="MARGIN-LEFT: 5pt">
				<span style="COLOR: #000000">
						<font size="+0">
								<span style="COLOR: #ff9900">
										<span style="COLOR: #999"> </span># 获得最小和最大值之间随机数，位数不足补零<br /><span style="COLOR: #999"> </span>#-------------------------------------------<br /><span style="COLOR: #999"> </span></span>
								<span style="COLOR: #006600">Function </span>
								<span style="COLOR: #0000cc">getRandNumber </span>
								<span style="COLOR: #006600">(</span>
								<span style="COLOR: #0000cc">$fMin</span>
								<span style="COLOR: #006600">, </span>
								<span style="COLOR: #0000cc">$fMax</span>
						</font>
						<font size="+0">
								<span style="COLOR: #006600">) { <br /><span style="COLOR: #999">  </span></span>
								<span style="COLOR: #0000cc">srand</span>
								<span style="COLOR: #006600">((double)</span>
								<span style="COLOR: #0000cc">microtime</span>
								<span style="COLOR: #006600">()*</span>
								<span style="COLOR: #0000cc">1000000</span>
						</font>
						<font size="+0">
								<span style="COLOR: #006600">);<br /><span style="COLOR: #999">  </span></span>
								<span style="COLOR: #0000cc">$fLen </span>
								<span style="COLOR: #006600">= </span>
								<span style="COLOR: #cc0000">"%0"</span>
								<span style="COLOR: #006600">.</span>
								<span style="COLOR: #0000cc">strlen</span>
								<span style="COLOR: #006600">(</span>
								<span style="COLOR: #0000cc">$fMax</span>
								<span style="COLOR: #006600">).</span>
								<span style="COLOR: #cc0000">"d"</span>
						</font>
						<font size="+0">
								<span style="COLOR: #006600">;<br /><span style="COLOR: #999">  </span>Return </span>
								<span style="COLOR: #0000cc">sprintf</span>
								<span style="COLOR: #006600">(</span>
								<span style="COLOR: #0000cc">$fLen</span>
								<span style="COLOR: #006600">, </span>
								<span style="COLOR: #0000cc">rand</span>
								<span style="COLOR: #006600">(</span>
								<span style="COLOR: #0000cc">$fMin</span>
								<span style="COLOR: #006600">,</span>
								<span style="COLOR: #0000cc">$fMax</span>
						</font>
						<font size="+0">
								<span style="COLOR: #006600">));<br /><span style="COLOR: #999"> </span>}</span>
						</font>
				</span>
				<br />
		</div>
<img src ="http://www.blogjava.net/mayu/aggbug/72495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-28 10:39 <a href="http://www.blogjava.net/mayu/articles/72495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP5的异常处理</title><link>http://www.blogjava.net/mayu/articles/70712.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Wed, 20 Sep 2006 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/70712.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/70712.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/70712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/70712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/70712.html</trackback:ping><description><![CDATA[
		<p>
				<b>例子 20-1. 抛出一个异常</b>
		</p>
		<table cellpadding="5" bgcolor="#e0e0e0" border="0">
				<tbody>
						<tr>
								<td>
										<div class="phpcode">
												<code>
														<span class="html">
																<span class="default">&lt;?php<br /></span>
																<span class="keyword">try {<br />   </span>
																<span class="default">$error </span>
																<span class="keyword">= </span>
																<span class="string">'Always throw this error'</span>
																<span class="keyword">;<br />   throw new </span>
																<span class="default">Exception</span>
																<span class="keyword">(</span>
																<span class="default">$error</span>
																<span class="keyword">);<br /><br />   </span>
																<span class="comment">// 从这里开始，tra 代码块内的代码将不会被执行<br />   </span>
																<span class="keyword">echo </span>
																<span class="string">'Never executed'</span>
																<span class="keyword">;<br /><br />} catch (</span>
																<span class="default">Exception $e</span>
																<span class="keyword">) {<br />   echo </span>
																<span class="string">'Caught exception: '</span>
																<span class="keyword">,  </span>
																<span class="default">$e</span>
																<span class="keyword">-&gt;</span>
																<span class="default">getMessage</span>
																<span class="keyword">(), </span>
																<span class="string">"\n"</span>
																<span class="keyword">;<br />}<br /><br /></span>
																<span class="comment">// 继续执行<br /></span>
																<span class="keyword">echo </span>
																<span class="string">'Hello World'</span>
																<span class="keyword">;<br /></span>
																<span class="default">?&gt;</span>
														</span>
												</code>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/mayu/aggbug/70712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-20 10:20 <a href="http://www.blogjava.net/mayu/articles/70712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP字符替换</title><link>http://www.blogjava.net/mayu/articles/69624.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Thu, 14 Sep 2006 05:43:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/69624.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/69624.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/69624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/69624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/69624.html</trackback:ping><description><![CDATA[替换的意义在于将一个字符串的一部分进行改变，使之成为别外一个新的字符串，以满足新的要求。PHP里通常用str_replace("要替换的内容", "要取代原内容的字符串", "原字符串")进行替换。 PHP: [Copy to clipboard] echo str_replace("iwind", "kiki", "i love iwind, iwind said"); // 将输出 "i love kiki, kiki said" 即将 原字符串中的所有"iwind"都替换成了"kiki". str_replace是大小写敏感的，所以对你不能设想用 str_replace("IWIND", "kiki",...)替换原字符串中的"iwind". str_replace还可以实现多对一，多对多的替换，但无法实现一对多的替换： <img src ="http://www.blogjava.net/mayu/aggbug/69624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-14 13:43 <a href="http://www.blogjava.net/mayu/articles/69624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP拆分字符串</title><link>http://www.blogjava.net/mayu/articles/69621.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Thu, 14 Sep 2006 05:41:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/69621.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/69621.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/69621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/69621.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/69621.html</trackback:ping><description><![CDATA[$Date_1="2007-07-12";
$Date_2="2007-06-27";
/*
首先用explode这个函数来拆分字符串
explode("这引号里面是条件来的哦，改成:就会用:来拆分字符串的,可以应用到很多方面去的",后面要拆分的字符串)
*/
$Date_explode_1=explode("-",$Date_1);
$Date_explode_2=explode("-",$Date_2);
echo $Date_explode_1[0]
<img src ="http://www.blogjava.net/mayu/aggbug/69621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-14 13:41 <a href="http://www.blogjava.net/mayu/articles/69621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于php处理多选框checkbox的方法</title><link>http://www.blogjava.net/mayu/articles/69618.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Thu, 14 Sep 2006 05:39:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/69618.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/69618.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/69618.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/69618.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/69618.html</trackback:ping><description><![CDATA[PHP要求同名表单元素用数组形式命名，并赋予value。否则他不能分解。<br />例： 1. <input type="checkbox" value="1" name="chk[]" /> 2. <input type="checkbox" value="2" name="chk[]" /> 3. <input type="checkbox" value="3" name="chk[]" /> 提交后，用$_POST[’chk’]访问。<br />数组中的元素为选中的复选框的值 PHP代码: <br />1. <?php  
2.	foreach( $_POST["chk"] as $i=??>$a <br />3. { echo $i."==&gt;".$a."<br />"; } <br />4. //或者使用$_POST["chk"][0]单独使用 <br />5. ?&gt; 结果: 0=&gt;1 1=&gt;2 2=&gt;3 <img src ="http://www.blogjava.net/mayu/aggbug/69618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-14 13:39 <a href="http://www.blogjava.net/mayu/articles/69618.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP5连接MYSQL数据库</title><link>http://www.blogjava.net/mayu/articles/68197.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Thu, 07 Sep 2006 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/68197.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/68197.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/68197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/68197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/68197.html</trackback:ping><description><![CDATA[
		<pre>mysql可通过两种方式通过PHP与web相连，一种通过php的mysql相关函数，另一种通过php的ODBC相关函数 <br /><br />相关函数如下： <br /><br />MYSQL函数 <br /><br />mysql_affected_rows: 得到 MySQL 最后操作影响的列数目。 <br />mysql_close: 关闭 MySQL 伺服器连线。 <br />mysql_connect: 开启 MySQL 伺服器连线。 <br />mysql_create_db: 建立一个 MySQL 新资料库。 <br />mysql_data_seek: 移动内部传回指标。 <br />mysql_db_query: 送查询字串 (query) 到 MySQL 资料库。 <br />mysql_drop_db: 移除资料库。 <br />mysql_errno: 传回错误讯息代码。 <br />mysql_error: 传回错误讯息。 <br />mysql_fetch_array: 传回阵列资料。 <br />mysql_fetch_field: 取得栏位资讯。 <br />mysql_fetch_lengths: 传回单列各栏资料最大长度。 <br />mysql_fetch_object: 传回物件资料。 <br />mysql_fetch_row: 传回单列的各栏位。 <br />mysql_field_name: 传回指定栏位的名称。 <br />mysql_field_seek: 设定指标到传回值的某栏位。 <br />mysql_field_table: 获得目前栏位的资料表 (table) 名称。 <br />mysql_field_type: 获得目前栏位的型态。 <br />mysql_field_flags: 获得目前栏位的旗标。 <br />mysql_field_len: 获得目前栏位的长度。 <br />mysql_free_result: 释放传回占用记忆体。 <br />mysql_insert_id: 传回最后一次使用 INSERT 指令的 ID。 <br />mysql_list_fields: 列出指定资料表的栏位 (field)。 <br />mysql_list_dbs: 列出 MySQL 伺服器可用的资料库 (database)。 <br />mysql_list_tables: 列出指定资料库的资料表 (table)。 <br />mysql_num_fields: 取得传回栏位的数目。 <br />mysql_num_rows: 取得传回列的数目。 <br />mysql_pconnect: 开启 MySQL 伺服器长期连线。 <br />mysql_query: 送出一个 query 字串。 <br />mysql_result: 取得查询 (query) 的结果。 <br />mysql_select_db: 选择一个资料库。 <br />mysql_tablename: 取得资料表名称。 <br /></pre>
<img src ="http://www.blogjava.net/mayu/aggbug/68197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-07 10:36 <a href="http://www.blogjava.net/mayu/articles/68197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>