<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>php程序员技术博客,关注PHP</title>
	<atom:link href="http://php.dayanmei.com/feed" rel="self" type="application/rss+xml" />
	<link>http://php.dayanmei.com</link>
	<description>专注于PHP技术</description>
	<lastBuildDate>Mon, 26 Dec 2011 15:58:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>scp备份公匙</title>
		<link>http://php.dayanmei.com/scp%e5%a4%87%e4%bb%bd%e5%85%ac%e5%8c%99.htm</link>
		<comments>http://php.dayanmei.com/scp%e5%a4%87%e4%bb%bd%e5%85%ac%e5%8c%99.htm#comments</comments>
		<pubDate>Mon, 26 Dec 2011 15:58:08 +0000</pubDate>
		<dc:creator>老李</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[scp备份]]></category>

		<guid isPermaLink="false">http://php.dayanmei.com/?p=221</guid>
		<description><![CDATA[1、scp在建立连接中是需要密码认证的，所以我们第一步就是添加ssh公匙。
ssh终端运行
ssh-keygen -t rsa
　　结果如下
　　Generating public/private rsa key pair.
　　Enter file in which to save the key (/home/.username/ssh/id_rsa):#回车
　　Enter passphrase (empty for no passphrase):#回车
　　Enter same passphrase again:#回车
　　Your identification has been saved in /home/.username /.ssh/id_rsa.
　　Your public key has been saved in /home/.username /.ssh/id_rsa.pub.
　　The key fingerprint is:
　　38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost
　　Generating RSA keys:
　　Key generation complete.
　　会在用户目录~/.ssh/产生两个文件，id_rsa，id_rsa.pub
2.是把本地(10.1.1.1)主机上的id_rsa.pub文件拷贝到远程linux(10.1.1.2)主机的root用户主目录下的.ssh目录下,并且改名为authorized_keys
　　即：
scp /root/.ssh/id_rsa.pub root@10.1.1.2:/root/.ssh/authorized_keys
　　这样在本地linux(10.1.1.1)主机上使用scp命令复制文件到远程linux主机(10.1.1.2)上将不提示输入密码了，直接复制了。反之亦然！
（为了安全建议将authorized_keys属性变更为600）
3.创建一个sh文件 vi backup.sh
#!/bin/bash
cd /var/www/html/backup
#定义备份名字 bbs和home 设定每月备份一次 备份完就删除
BbsBakName=Bbs_$(date +&#8221;%Y%m%d&#8221;).tar.gz
#打包Ningyuan文件
tar [...]]]></description>
			<content:encoded><![CDATA[<p>1、scp在建立连接中是需要密码认证的，所以我们第一步就是添加ssh公匙。<br />
ssh终端运行</p>
<p>ssh-keygen -t rsa<br />
　　结果如下<br />
　　Generating public/private rsa key pair.<br />
　　Enter file in which to save the key (/home/.username/ssh/id_rsa):#回车<br />
　　Enter passphrase (empty for no passphrase):#回车<br />
　　Enter same passphrase again:#回车<br />
　　Your identification has been saved in /home/.username /.ssh/id_rsa.<br />
　　Your public key has been saved in /home/.username /.ssh/id_rsa.pub.<br />
　　The key fingerprint is:<br />
　　38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost<br />
　　Generating RSA keys:<br />
　　Key generation complete.<br />
　　会在用户目录~/.ssh/产生两个文件，id_rsa，id_rsa.pub<br />
2.是把本地(10.1.1.1)主机上的id_rsa.pub文件拷贝到远程linux(10.1.1.2)主机的root用户主目录下的.ssh目录下,并且改名为authorized_keys<br />
　　即：</p>
<p>scp /root/.ssh/id_rsa.pub root@10.1.1.2:/root/.ssh/authorized_keys<br />
　　这样在本地linux(10.1.1.1)主机上使用scp命令复制文件到远程linux主机(10.1.1.2)上将不提示输入密码了，直接复制了。反之亦然！<br />
（为了安全建议将authorized_keys属性变更为600）</p>
<p>3.创建一个sh文件 vi backup.sh<br />
#!/bin/bash<br />
cd /var/www/html/backup</p>
<p>#定义备份名字 bbs和home 设定每月备份一次 备份完就删除<br />
BbsBakName=Bbs_$(date +&#8221;%Y%m%d&#8221;).tar.gz</p>
<p>#打包Ningyuan文件<br />
tar zcf /var/www/html/backup/$BbsBakName /var/www/html/domain.me<br />
#拷贝到远程服务器<br />
scp -P 22 /var/www/html/backup/$BbsBakName root@127.0.0.1:/var/www/html/backup/<br />
#删除文件<br />
rm -rf /var/www/html/backup/$BbsBakName</p>
<p>4.增加可执行权限 chmod +x backup.sh</p>
<p>5.加入计划任务 crontab -e 每天凌晨1点10分执行<br />
10 1 * * * /var/www/html/backup/backup.sh</p>
]]></content:encoded>
			<wfw:commentRss>http://php.dayanmei.com/scp%e5%a4%87%e4%bb%bd%e5%85%ac%e5%8c%99.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在IBM开发者上看到一个 敏捷开发的小故事</title>
		<link>http://php.dayanmei.com/agile-development-story.htm</link>
		<comments>http://php.dayanmei.com/agile-development-story.htm#comments</comments>
		<pubDate>Wed, 16 Nov 2011 06:26:33 +0000</pubDate>
		<dc:creator>老李</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://php.dayanmei.com/?p=218</guid>
		<description><![CDATA[举个例子，大家更好的理解敏捷是如何被实践的，我们说一说运用敏捷方法完成一次家庭出游计划：
这有一家四口人要出游了，首先敏捷规划，我们大致规划出我们去几天呢？要去什么地方？ 一家几口人出行？ 坐什么交通工具呢？ 而还有个终极目标：那就是保证大家的绝对愉悦，增进家人感情和安全按时的返回。 
大致目标规划好了就可以开展了，并且呢，我们将这次出行定为4天，第一天主要完成去的工作，第二三天在目的地玩耍，第四天返回。 
在行程中了，我们虽然规划了大致方向，但是可能遇到堵车啦、修路啦等突发事件，于是我们必要情况下要选择其他路线，还有，你的stakeholder们可能有许多新点子，比如你的孩子希望在河边停下来看看风景啦，你的妻子希望在经过一座城市的时候进去那里的博物馆参观啦。总之、你的行程、事件、速度都可能被突发情况所影响。而随着调整的过程，仍然达到满足大家开开心心、安全按时返回的目标就对了。 
最后，值得提醒，要合理安排休息时间，保证项目进展的可持续性。 
这就是个很好运用敏捷的例子。
]]></description>
			<content:encoded><![CDATA[<p>举个例子，大家更好的理解敏捷是如何被实践的，我们说一说运用敏捷方法完成一次家庭出游计划：<br />
这有一家四口人要出游了，首先敏捷规划，我们大致规划出我们去几天呢？要去什么地方？ 一家几口人出行？ 坐什么交通工具呢？ 而还有个终极目标：那就是保证大家的绝对愉悦，增进家人感情和安全按时的返回。 </p>
<p>大致目标规划好了就可以开展了，并且呢，我们将这次出行定为4天，第一天主要完成去的工作，第二三天在目的地玩耍，第四天返回。 </p>
<p>在行程中了，我们虽然规划了大致方向，但是可能遇到堵车啦、修路啦等突发事件，于是我们必要情况下要选择其他路线，还有，你的stakeholder们可能有许多新点子，比如你的孩子希望在河边停下来看看风景啦，你的妻子希望在经过一座城市的时候进去那里的博物馆参观啦。总之、你的行程、事件、速度都可能被突发情况所影响。而随着调整的过程，仍然达到满足大家开开心心、安全按时返回的目标就对了。 </p>
<p>最后，值得提醒，要合理安排休息时间，保证项目进展的可持续性。 </p>
<p>这就是个很好运用敏捷的例子。</p>
]]></content:encoded>
			<wfw:commentRss>http://php.dayanmei.com/agile-development-story.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux网站压力测试工具webbench</title>
		<link>http://php.dayanmei.com/linux-apache-webbench.htm</link>
		<comments>http://php.dayanmei.com/linux-apache-webbench.htm#comments</comments>
		<pubDate>Mon, 14 Nov 2011 07:37:57 +0000</pubDate>
		<dc:creator>老李</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[webbench]]></category>

		<guid isPermaLink="false">http://php.dayanmei.com/?p=214</guid>
		<description><![CDATA[在一个网站上线前, 通常我们应该做一些相关的压力测试, 以便了解当前Web服务器在高并发高负载情况下的响应状况和速度，方便对Web服务器进行优化和重构。
目前有很多免费的web压力测试工具可以帮助我们完成测试, 例如: 十个免费的Web压力测试工具http://coolshell.cn/articles/2589.html,
但在真实项目中, 我还是喜欢用Apache ab 和Webbench来完成压力测试, Apache的ab使用非常简单, 而且只要是安装了Apache了,就会自带其ab工具, 但有个问题就是不能模拟高并发状态下的测试, 好像最多可以模拟100-200次/秒的并发. 如果需要模拟更高负载的压力测试, 可能我们就需要请Webbench来帮忙了, webbench最多可以模拟3万个并发连接.但唯一的缺点就是测试的结果太简单了.
好了, 首先我们先来安装webbench吧, 为了测试准确，请将 webbench 安装在别的linux服务器上, 因为webbench 做压力测试时，自身也会消耗CPU和内存资源, 否则, 很可能把自己服务器搞挂掉:).
首先,我们先下载并安装webbench吧
1.wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
2.tar zxvf webbench-1.5.tar.gz
3.cd webbench-1.5
4.make &#038;&#038; make install
如果出现下面错误提示:
1.ctags *.c
2./bin/sh: ctags: command not found
可以使用yum安装ctags来解决这个问题
1.yum install ctags
或者自己手动安装
1.wget http://nchc.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz
2.tar zxvf ctags-5.8.tar.gz
3../configure
4.make
5.make install
如果安装了ctags, 仍然报错:
1.install -s webbench /usr/local/bin
2.install -m 644 webbench.1 /usr/local/man/man1
3.install: cannot create regular file `/usr/local/man/man1&#8242;: No [...]]]></description>
			<content:encoded><![CDATA[<p>在一个网站上线前, 通常我们应该做一些相关的压力测试, 以便了解当前Web服务器在高并发高负载情况下的响应状况和速度，方便对Web服务器进行优化和重构。</p>
<p>目前有很多免费的web压力测试工具可以帮助我们完成测试, 例如: 十个免费的Web压力测试工具http://coolshell.cn/articles/2589.html,</p>
<p>但在真实项目中, 我还是喜欢用Apache ab 和Webbench来完成压力测试, Apache的ab使用非常简单, 而且只要是安装了Apache了,就会自带其ab工具, 但有个问题就是不能模拟高并发状态下的测试, 好像最多可以模拟100-200次/秒的并发. 如果需要模拟更高负载的压力测试, 可能我们就需要请Webbench来帮忙了, webbench最多可以模拟3万个并发连接.但唯一的缺点就是测试的结果太简单了.</p>
<p>好了, 首先我们先来安装webbench吧, 为了测试准确，请将 webbench 安装在别的linux服务器上, 因为webbench 做压力测试时，自身也会消耗CPU和内存资源, 否则, 很可能把自己服务器搞挂掉:).<br />
首先,我们先下载并安装webbench吧</p>
<p>1.wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz<br />
2.tar zxvf webbench-1.5.tar.gz<br />
3.cd webbench-1.5<br />
4.make &#038;&#038; make install<br />
如果出现下面错误提示:</p>
<p>1.ctags *.c<br />
2./bin/sh: ctags: command not found<br />
可以使用yum安装ctags来解决这个问题</p>
<p>1.yum install ctags<br />
或者自己手动安装</p>
<p>1.wget http://nchc.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz<br />
2.tar zxvf ctags-5.8.tar.gz<br />
3../configure<br />
4.make<br />
5.make install<br />
如果安装了ctags, 仍然报错:</p>
<p>1.install -s webbench /usr/local/bin<br />
2.install -m 644 webbench.1 /usr/local/man/man1<br />
3.install: cannot create regular file `/usr/local/man/man1&#8242;: No such file or directory<br />
4.make: *** [install] Error 1<br />
我们可以通过自己创建文件夹来解决这个问题:</p>
<p>1.mkdir -m 644 -p /usr/local/man/man1<br />
最后终于安装成功! 我们也可以进行压力测试了<br />
webbench -c 500 -t 30 http://www.example.com/phpinfo.php<br />
　参数说明：-c表示并发数，-t表示时间(秒)</p>
<p>1.-bash-3.00$ webbench -c 3000 -t 30  http://www.example.com/phpinfo.php<br />
2.Webbench &#8211; Simple Web Benchmark 1.5<br />
3.Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.<br />
4.<br />
5.Benchmarking: GET http://www.example.com/phpinfo.php<br />
6.3000 clients, running 30 sec.<br />
7.<br />
8.Speed=8358 pages/min, 8791523 bytes/sec.<br />
9.Requests: 4179 susceed, 0 failed.<br />
10.-bash-3.00$</p>
]]></content:encoded>
			<wfw:commentRss>http://php.dayanmei.com/linux-apache-webbench.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nohup命令详解</title>
		<link>http://php.dayanmei.com/nohup.htm</link>
		<comments>http://php.dayanmei.com/nohup.htm#comments</comments>
		<pubDate>Mon, 14 Nov 2011 07:27:11 +0000</pubDate>
		<dc:creator>老李</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[nohup]]></category>

		<guid isPermaLink="false">http://php.dayanmei.com/?p=212</guid>
		<description><![CDATA[nohup命令详解 http://www.21andy.com/blog/20071121/677.html
使用nohup让程序永远后台运行
Unix/Linux下一般比如想让某个程序在后台运行，很多都是使用 &#038; 在程序结尾来让程序自动运行。比如我们要运行mysql在后台：
/usr/local/mysql/bin/mysqld_safe &#8211;user=mysql &#038;但是加入我们很多程序并不象mysqld一样做成守护进程，可能我们的程序只是普通程序而已，一般这种程序使用 &#038; 结尾，但是如果终端关闭，那么程序也会被关闭。但是为了能够后台运行，那么我们就可以使用nohup这个命令，比如我们有个test.php需要在后台运行，并且希望在后台能够定期运行，那么就使用nohup：
nohup /root/test.php &#038;　　提示：
　　[~]$ appending output to nohup.out
　　嗯，证明运行成功，同时把程序运行的输出信息放到当前目录的 nohup.out 文件中去。
　　附：nohup命令参考
　　nohup 命令
　　用途：不挂断地运行命令。
　　语法：nohup Command [ Arg ... ] [　&#038; ]
　 　描述：nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令，忽略所有挂断（SIGHUP）信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令，添加 &#038; （ 表示“and”的符号）到命令的尾部。
　　 无论是否将 nohup 命令的输出重定向到终端，输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写，输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加，那么 Command 参数指定的命令不可调用。如果标准错误是一个终端，那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
　　退出状态：该命令返回下列出口值：
　　126 可以查找但不能调用 Command 参数指定的命令。
　　127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
　　否则，nohup [...]]]></description>
			<content:encoded><![CDATA[<p>nohup命令详解 http://www.21andy.com/blog/20071121/677.html</p>
<p>使用nohup让程序永远后台运行</p>
<p>Unix/Linux下一般比如想让某个程序在后台运行，很多都是使用 &#038; 在程序结尾来让程序自动运行。比如我们要运行mysql在后台：</p>
<p>/usr/local/mysql/bin/mysqld_safe &#8211;user=mysql &#038;但是加入我们很多程序并不象mysqld一样做成守护进程，可能我们的程序只是普通程序而已，一般这种程序使用 &#038; 结尾，但是如果终端关闭，那么程序也会被关闭。但是为了能够后台运行，那么我们就可以使用nohup这个命令，比如我们有个test.php需要在后台运行，并且希望在后台能够定期运行，那么就使用nohup：</p>
<p>nohup /root/test.php &#038;　　提示：</p>
<p>　　[~]$ appending output to nohup.out</p>
<p>　　嗯，证明运行成功，同时把程序运行的输出信息放到当前目录的 nohup.out 文件中去。</p>
<p>　　附：nohup命令参考</p>
<p>　　nohup 命令</p>
<p>　　用途：不挂断地运行命令。</p>
<p>　　语法：nohup Command [ Arg ... ] [　&#038; ]</p>
<p>　 　描述：nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令，忽略所有挂断（SIGHUP）信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令，添加 &#038; （ 表示“and”的符号）到命令的尾部。</p>
<p>　　 无论是否将 nohup 命令的输出重定向到终端，输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写，输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加，那么 Command 参数指定的命令不可调用。如果标准错误是一个终端，那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。</p>
<p>　　退出状态：该命令返回下列出口值：</p>
<p>　　126 可以查找但不能调用 Command 参数指定的命令。</p>
<p>　　127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。</p>
<p>　　否则，nohup 命令的退出状态是 Command 参数指定命令的退出状态。</p>
<p>nohup命令及其输出文件</p>
<p>　　nohup命令：如果你正在运行一个进程，而且你觉得在退出帐户时该进程还不会结束，那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。</p>
<p>该命令的一般形式为：nohup command &#038;</p>
<p>使用nohup命令提交作业</p>
<p>如果使用nohup命令提交作业，那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中，除非另外指定了输出文件：</p>
<p>nohup command > myout.file 2>&#038;1 &#038;在上面的例子中，输出被重定向到myout.file文件中。</p>
<p>使用 jobs 查看任务。</p>
<p>使用 fg %n　关闭。</p>
<p>另外有两个常用的ftp工具ncftpget和ncftpput，可以实现后台的ftp上传和下载，这样我就可以利用这些命令在后台上传和下载文件了。</p>
<p>让一个php程序一直执行直到完成<br />
do{}while();</p>
]]></content:encoded>
			<wfw:commentRss>http://php.dayanmei.com/nohup.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>centos5.5编译phpize安装pcntl模块</title>
		<link>http://php.dayanmei.com/centos5-5-how-to-install-pcntl-phpize.htm</link>
		<comments>http://php.dayanmei.com/centos5-5-how-to-install-pcntl-phpize.htm#comments</comments>
		<pubDate>Mon, 14 Nov 2011 06:16:26 +0000</pubDate>
		<dc:creator>老李</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[php pcntl]]></category>
		<category><![CDATA[phpize]]></category>

		<guid isPermaLink="false">http://php.dayanmei.com/?p=210</guid>
		<description><![CDATA[由于之前是使用yum安装php的，默认没有安装pcntl,于是参考网上资料，费了一番周折
终于安装好了
记录一下

php -v

看一下自己的php版本到www.php.net下载相应版本
解压后进入 php-(version)/ext/pcntl

phpize

生成configure编译文件

./configure --with-php-config=/usr/bin/php-config

结果提示
configure: error: no acceptable C compiler found in $PATH
原来是没有安装gcc

yum install gcc


./configure --with-php-config=/usr/bin/php-config
make &#038;&#038; make install

出现类似如下提示说明编译成功了
&#8220;Installing shared extensions:     /usr/bin/&#8230;&#8221;
修改配置文件

cd /etc/php.d
cp gd.ini pcntl.ini
vi pcntl.ini

将里面的 gd.so 替换成 pcntl.so保存
重载apache

service httpd reload

]]></description>
			<content:encoded><![CDATA[<p>由于之前是使用yum安装php的，默认没有安装pcntl,于是参考网上资料，费了一番周折<br />
终于安装好了<br />
记录一下</p>
<pre name="code" class="php">
php -v
</pre>
<p>看一下自己的php版本到www.php.net下载相应版本<br />
解压后进入 php-(version)/ext/pcntl</p>
<pre name="code" class="php">
phpize
</pre>
<p>生成configure编译文件</p>
<pre name="code" class="php">
./configure --with-php-config=/usr/bin/php-config
</pre>
<p>结果提示<br />
configure: error: no acceptable C compiler found in $PATH<br />
原来是没有安装gcc</p>
<pre name="code" class="php">
yum install gcc
</pre>
<pre name="code" class="php">
./configure --with-php-config=/usr/bin/php-config
make &#038;&#038; make install
</pre>
<p>出现类似如下提示说明编译成功了<br />
&#8220;Installing shared extensions:     /usr/bin/&#8230;&#8221;</p>
<p>修改配置文件</p>
<pre name="code" class="php">
cd /etc/php.d
cp gd.ini pcntl.ini
vi pcntl.ini
</pre>
<p>将里面的 gd.so 替换成 pcntl.so保存<br />
重载apache</p>
<pre name="code" class="php">
service httpd reload
</pre>
]]></content:encoded>
			<wfw:commentRss>http://php.dayanmei.com/centos5-5-how-to-install-pcntl-phpize.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql随机记录条数查询的优化</title>
		<link>http://php.dayanmei.com/mysql-rand-limit-optimization.htm</link>
		<comments>http://php.dayanmei.com/mysql-rand-limit-optimization.htm#comments</comments>
		<pubDate>Wed, 09 Nov 2011 03:43:46 +0000</pubDate>
		<dc:creator>老李</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[mysql随机]]></category>

		<guid isPermaLink="false">http://php.dayanmei.com/?p=203</guid>
		<description><![CDATA[一般的简单的获取随机几条数据的sql语句可能是这样

SELECT * FROM table WHERE 1 ORDER BY RAND() LIMIT N;

当数据库记录总数比较少的时候，这种方式还是不慢的，然而到一个级别后，比如10万
这个时候就非常的慢了，需要优化

SELECT a.* FROM TABLE AS a JOIN (SELECT MAX( id ) AS bid FROM TABLE) AS b ON (a.id >= FLOOR(b.bid*RAND())) WHERE 1 LIMIT N

从表中取出最大的id，RAND() 产生的是一个0到1.0的随机浮点数
]]></description>
			<content:encoded><![CDATA[<p>一般的简单的获取随机几条数据的sql语句可能是这样</p>
<pre name="code" class="php">
SELECT * FROM table WHERE 1 ORDER BY RAND() LIMIT N;
</pre>
<p>当数据库记录总数比较少的时候，这种方式还是不慢的，然而到一个级别后，比如10万<br />
这个时候就非常的慢了，需要优化</p>
<pre name="code" class="php">
SELECT a.* FROM TABLE AS a JOIN (SELECT MAX( id ) AS bid FROM TABLE) AS b ON (a.id >= FLOOR(b.bid*RAND())) WHERE 1 LIMIT N
</pre>
<p>从表中取出最大的id，RAND() 产生的是一个0到1.0的随机浮点数</p>
]]></content:encoded>
			<wfw:commentRss>http://php.dayanmei.com/mysql-rand-limit-optimization.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>单个文件夹限制存放1024个或者2000个文件实现原理</title>
		<link>http://php.dayanmei.com/one-dir-only-1024-or-2000-files.htm</link>
		<comments>http://php.dayanmei.com/one-dir-only-1024-or-2000-files.htm#comments</comments>
		<pubDate>Tue, 08 Nov 2011 10:00:29 +0000</pubDate>
		<dc:creator>老李</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[文件夹文件数量限制]]></category>

		<guid isPermaLink="false">http://php.dayanmei.com/?p=196</guid>
		<description><![CDATA[众所周知的原因
一个目录或者一个文件夹下面存放太多的文件，会导致系统缓慢
因此我们非常有必要限定一个文件夹或者一个目录里面文件的数量
当然每次去检查某个文件夹里面是否有1024或者2000个文件，是不现实的
这样会消耗很多资源而更加得不偿失
我们可以用一个文本来记录某个文件夹一个总共存放了多少个文件了
每增加一个文件，往记录文件里面写入一个字符的内容

$files_per_dir = 1024;
$count_file = 'count_file.txt';
$dir_path = './';

for($ii=0; $ii]]></description>
			<content:encoded><![CDATA[<p>众所周知的原因<br />
一个目录或者一个文件夹下面存放太多的文件，会导致系统缓慢<br />
因此我们非常有必要限定一个文件夹或者一个目录里面文件的数量<br />
当然每次去检查某个文件夹里面是否有1024或者2000个文件，是不现实的<br />
这样会消耗很多资源而更加得不偿失<br />
我们可以用一个文本来记录某个文件夹一个总共存放了多少个文件了<br />
每增加一个文件，往记录文件里面写入一个字符的内容</p>
<pre name="code" class="php">
$files_per_dir = 1024;
$count_file = 'count_file.txt';
$dir_path = './';

for($ii=0; $ii<10000; $ii++) {
	$fp = fopen($count_file,'a');
	fwrite($fp,1);
	fclose($fp);

	$filesize = filesize($count_file);
	$mod = ceil($filesize/$files_per_dir);

	$path = $dir_path.$mod;
	if(!is_dir($path)) {
		mkdir($path,644);
	}

	//可以往文件夹里面写文件了
	$fp = fopen($path.'/'.$ii.'.txt','w');
	fclose($fp);
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://php.dayanmei.com/one-dir-only-1024-or-2000-files.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>纯php导出无乱码的mysql插入语句</title>
		<link>http://php.dayanmei.com/php-mysql-mysql-data.htm</link>
		<comments>http://php.dayanmei.com/php-mysql-mysql-data.htm#comments</comments>
		<pubDate>Tue, 08 Nov 2011 05:24:55 +0000</pubDate>
		<dc:creator>老李</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php导出无乱码]]></category>

		<guid isPermaLink="false">http://php.dayanmei.com/?p=190</guid>
		<description><![CDATA[鉴于原来的数据库使用latin1字段，而数据库默认是utf8
导致虽然浏览网页时显示正常，但在phpmyadmin中查看数据时显示乱码
于是计划将原来的编码latin1转换成utf8格式
步骤如下
1. 备份数据库
2.导出一份只有数据库表结构的sql，并将其中的默认编码改为 DEFAULT CHARSET=utf8
ex：

CREATE TABLE IF NOT EXISTS `wpphp_links` (
  `link_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `link_url` varchar(255) NOT NULL DEFAULT '',
  `link_name` varchar(255) NOT NULL DEFAULT '',
    PRIMARY KEY (`link_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

3.使用php代码导出无乱码的sql语句
4.删除数据库表，执行第二步导出的sql建立数据库表
5.查看在phpmyadmin中的中文数据是否显示乱码
代码如下，可以在附件中下载 纯php导出无乱码sql （适用于数据量不大的导出，数据量大的话需要改进一下分记录导出）

set_time_limit(0);
$db_host = 'localhost';
$db_user = 'root';
$db_password = '';
$db_name = 'dayanmei';

$back_sql_file = 'dayanmei.sql'; [...]]]></description>
			<content:encoded><![CDATA[<p>鉴于原来的数据库使用latin1字段，而数据库默认是utf8</p>
<p>导致虽然浏览网页时显示正常，但在phpmyadmin中查看数据时显示乱码</p>
<p>于是计划将原来的编码latin1转换成utf8格式</p>
<p>步骤如下</p>
<p>1. 备份数据库</p>
<p>2.导出一份只有数据库表结构的sql，并将其中的默认编码改为 DEFAULT CHARSET=utf8<br />
ex：</p>
<pre name="code" class="php">
CREATE TABLE IF NOT EXISTS `wpphp_links` (
  `link_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `link_url` varchar(255) NOT NULL DEFAULT '',
  `link_name` varchar(255) NOT NULL DEFAULT '',
    PRIMARY KEY (`link_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
</pre>
<p>3.使用php代码导出无乱码的sql语句<br />
4.删除数据库表，执行第二步导出的sql建立数据库表<br />
5.查看在phpmyadmin中的中文数据是否显示乱码<br />
代码如下，可以在附件中下载 <a href='http://php.dayanmei.com/uploads/2011/11/backup.dayanmei.zip'>纯php导出无乱码sql</a> （适用于数据量不大的导出，数据量大的话需要改进一下分记录导出）</p>
<pre name="code" class="php">
set_time_limit(0);
$db_host = 'localhost';
$db_user = 'root';
$db_password = '';
$db_name = 'dayanmei';

$back_sql_file = 'dayanmei.sql'; //导出的sql名称
$debug = false; //是否调试模式 打开则输出第一条sql 看是否正常显示
$source_code = ''; //设置连接编码保证导出的数据在sql打开能够正常显示中文 ex：utf8
$tables = array('album', 'albumclass'); //需要导出的数据库表
if($back_sql_file == '') {
	$back_sql_file = date('YmdHis',time()).'_'.rand(1000,9999).'.sql';
}

$linked = mysql_connect($db_host,$db_user,$db_password);
if(!$linked) {
	die('数据库连接错误');
}
mysql_select_db($db_name);

if(!$debug) {
	$fp = fopen($back_sql_file,'w');
	$header = '';
	$header .= "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n";
	$header .= "/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;\n";
	$header .= "/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;\n";
	$header .= "/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;\n";
	$header .= "/*!40101 SET NAMES utf8 */;\n";
	fwrite($fp,$header);
	unset($header);
}

foreach($tables as $table) {
	$i = 0;
	$sql = "SELECT COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '$table' AND table_schema = '$db_name'";
	$result = mysql_query($sql);
	$fields = '';
	while(($row = mysql_fetch_array($result)) !== FALSE) {
		$fields .= "`".$row['COLUMN_NAME']."`,";
	}
	$fields = " (".substr($fields,0,-1).") ";
	if($source_code) {
		mysql_query("SET NAMES '$source_code'");
	}
	$result = mysql_query("SELECT * FROM $table WHERE 1");
	$row = array();
	while(($row = mysql_fetch_row($result)) !== FALSE) {
		$i++;
		$values = '';

		foreach($row as $value) {
			$value = addslashes($value);
			$values .= "'$value',";
		}
		$values = " (".substr($values,0,-1).") ";
		$sql = "INSERT INTO $table $fields VALUES $values".";\n";
		if($debug) {
			echo $sql;
			exit;
		}
		fwrite($fp,$sql);
	}
	echo 'Table: '.$table.' Rows: '.$i."";
	flush();
}
fclose($fp);
</pre>
<p>另外在其他地方看到一篇这文章，感觉可行，但未测试 http://blog.knowsky.com/183510.htm</p>
<p>mysql移植含有中文的数据时，很容易出现乱码问题。很多是在从mysql4.x向mysql5.x移植的时候出现。mysql的缺省字符集是latin1，在使用mysql4.x的时候，很多人都是用的latin1字符集。而当使用mysql5时往往愿意使用utf8。那么我们的任务是不是要把数据中的字符从latin1转为utf8呢？</p>
<p>不是的。</p>
<p>用一句不大准确，但又比较形象的说法是，在之前的系统中，我们是用latin1保存了使用gb系列字符集（gbk、gb2312等）的汉字。怎么这样说呢？</p>
<p>mysql> show create table test\G</p>
<p>*************************** 1. row ***************************</p>
<p>Table: test</p>
<p>Create Table: CREATE TABLE `test`</p>
<p>`a` varchar(100) default NULL</p>
<p>) ENGINE=InnoDB DEFAULT CHARSET=utf8</p>
<p>1 row in set (0.00 sec)</p>
<p>mysql> show create table testlatin1\G</p>
<p>*************************** 1. row ***************************</p>
<p>Table: testlatin1</p>
<p>Create Table: CREATE TABLE `testlatin1`</p>
<p>`a` varchar(100) default NULL</p>
<p>) ENGINE=InnoDB DEFAULT CHARSET=latin1</p>
<p>1 row in set (0.01 sec)</p>
<p>我们看到这两个表有不同的缺省字符集。此字符集是告诉我们，如果没有特别指定列的字符集，那么字符类型列的字符集与表的缺省字符集一样。</p>
<p>列的字符集是要告诉mysql，这里面保存的字符所使用的字符集是什么。但到底保存的是什么字符集的字符，不由mysql决定，mysql也不进行检查。</p>
<p>在utf8广泛使用之前，我们使用的汉字都是GB系列的字符集，比如GB2312、GBK、GB18030等等。</p>
<p>在缺省字符集为latin1的mysql中，我们通常就把GB字符集的汉字保存到数据库中，但是却告诉mysql那是latin1字符集。而GB字符集是一个汉字占两个字节，latin1是一个字符占一个字节。也就是说一个GB汉字被当成两个latin1字符来保存了。这让我想起了当初的iso8859_1，也是类似的情况。只要我们保存和读取时都当作latin1，不进行转换，然后在显示时当作gb字符集，就能够正确使用。</p>
<p>那么怎么把latin1保存的汉字正确地导到utf8字符集的数据库中呢？</p>
<p>首先，新的数据库中的列，要使用utf8字符集。一种办法是创建database时指定缺省字符集，这样在建表时如果不指定字符集则使用database的缺省字符集。</p>
<p>导出的数据要以latin1字符集导出，实际上就是告诉mysql导出时不做转换（因为原有的表都是latin1字符集的）。</p>
<p>mysqldump出来以后，再用mysql进行导入时，还要告诉mysql，当前的数据是gb系列的字符集，比如gbk。这样，mysql负责把数据由gbk转换为utf8，保存到数据库中。</p>
<p>如何告诉mysql导入的SQL是什么字符集呢，一种方法是用&#8211;default-character-set，但有时会起不到实际作用。这是因为mysqldump出来的文件里有set names语句。比如：</p>
<p>head EA192.060913.sql</p>
<p>&#8211; MySQL dump 10.10</p>
<p>&#8211;</p>
<p>&#8211; Host: localhost Database: EA192</p>
<p>&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>&#8211; Server version 5.0.16-standard-log</p>
<p>/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;</p>
<p>/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;</p>
<p>/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;</p>
<p>/*!40101 SET NAMES latin1 */;</p>
<p>/*! */是mysql特有有句法，在其他数据库会被当成注释忽略掉。/*!后面的 40101是表示版本，在4.1.1及以上版才执行该条语句。</p>
<p>这里看到有一条SET NAMES latin1。它的一个作用是告诉mysql，客户端传过去的数据是latin1字符集。因为有这样一条SET NAMES，&#8211;default-character-set也就起不到作用了。如果不幸有这样一条SQL，那么需要把它去掉或者改成SET NAMES gbk。修改或者删除的办法，当数据量比较大的时候，可以用head和tail来配合。比如还是上面的那个文件：</p>
<p>先用head看一下SET NAMES在第几行（数一下），上面看到是第10行。</p>
<p>wc -l EA192.060913.sql</p>
<p>1987 EA192.060913.sql</p>
<p>得到总行数是1987</p>
<p>head -9 EA192.060913.sql > final.sql</p>
<p>brum@brum-laptop:~$ tail -1977 EA192.060913.sql >> final.sql</p>
<p>brum@brum-laptop:~$</p>
<p>head -9是取前9行，tail -1977是取后1977行，这样就把第10行隔过去了。</p>
<p>得到final.sql再用mysql运行时，就可以使用&#8211;default-character-set=gbk了。</p>
<p>还有一种办法是mysqldump时使用&#8211;set-charset=false，这样就不会出现SET NAMES了。</p>
<p>目前为止，还可能有问题，出在create table的SQL中，比如：</p>
<p>DROP TABLE IF EXISTS `test`;</p>
<p>CREATE TABLE `test`</p>
<p>`a` varchar(100) default NULL</p>
<p>) ENGINE=InnoDB DEFAULT CHARSET=latin1;</p>
<p>这里仍然有个CHARSET=latin1，它将导致新创建的表的缺省字符集是latin1，而不是我们想要的。怎么办呢，如果数据量不大的话，可以考虑用编辑器把它去掉或者改成utf8，如果数据量大的话可以考虑用sed，但可能仍然时间比较长。</p>
<p>还有一种办法就是mysqldump，使用&#8211;create-options=false，不导出表的创建属性。但如果导出的表的存储引擎不同的话就有问题了，因为引擎类型（innodb、myisam等）都被忽略了。</p>
<p>此外，mysqldump导出时，不要使用-B，而是直接指定一个database名字，目的是不出现CREATE DATABASE语句，因为其中也可能会有缺省字符集的子句，会影响那些未在CREATE TABLE中指定字符集的表。如果你导出的SQL中有CREATE DATABASE，那么需要注意一下有没有字符集的子句，如果有的话，也需要修改。</p>
<p>好了，通过上述方法导出或者处理过的导出文件可以使用mysql &#8211;default-character-set=gbk来导入了。</p>
<p>总结，基本上执行的命令如下：</p>
<p>1、备份数据库</p>
<pre name="code" class="php">
mysqldump --default-character-set=latin1 --create-options=false --set-charset=false -u root -p 数据库名称 &gt; E:\back.sql
</pre>
<p>2、创建新数据库</p>
<pre name="code" class="php">
CREATE DATABASE 数据库名称 CHARACTER SET utf8 COLLATE utf8_general_ci;
</pre>
<p>3、导入数据</p>
<pre name="code" class="php">
mysql -u root -p --default-character-set=gbk 数据库名称 &lt; E:\back.sql
</pre>
]]></content:encoded>
			<wfw:commentRss>http://php.dayanmei.com/php-mysql-mysql-data.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用firefox获取淘宝首张大图</title>
		<link>http://php.dayanmei.com/firefox-taobao-bigimage.htm</link>
		<comments>http://php.dayanmei.com/firefox-taobao-bigimage.htm#comments</comments>
		<pubDate>Sun, 06 Nov 2011 08:36:44 +0000</pubDate>
		<dc:creator>老李</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[淘宝]]></category>

		<guid isPermaLink="false">http://php.dayanmei.com/?p=186</guid>
		<description><![CDATA[用firefox(俗称火狐) 安装firebug
打开淘宝的宝贝页
打开后获取到小图片地址
例如
http://img04.taobaocdn.com/bao/uploaded/i4/T15fKsXlJpXXajprDX_114338.jpg_40&#215;40.jpg
那么大图片就是 
http://img04.taobaocdn.com/bao/uploaded/i4/T15fKsXlJpXXajprDX_114338.jpg
]]></description>
			<content:encoded><![CDATA[<p>用firefox(俗称火狐) 安装firebug<br />
打开淘宝的宝贝页<br />
打开后获取到小图片地址<br />
例如</p>
<p>http://img04.taobaocdn.com/bao/uploaded/i4/T15fKsXlJpXXajprDX_114338.jpg_40&#215;40.jpg</p>
<p>那么大图片就是 </p>
<p>http://img04.taobaocdn.com/bao/uploaded/i4/T15fKsXlJpXXajprDX_114338.jpg</p>
]]></content:encoded>
			<wfw:commentRss>http://php.dayanmei.com/firefox-taobao-bigimage.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php从大文件文本TEXT中读取某行的数据</title>
		<link>http://php.dayanmei.com/php-bigfile-txt-load-data.htm</link>
		<comments>http://php.dayanmei.com/php-bigfile-txt-load-data.htm#comments</comments>
		<pubDate>Thu, 03 Nov 2011 07:02:19 +0000</pubDate>
		<dc:creator>老李</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://php.dayanmei.com/?p=184</guid>
		<description><![CDATA[
function get_line($file,$line) {
	$fp = fopen($file,'r');
	$i = 0;
	while(!feof($fp)) {
		$i++;
		$c = fgets($fp);
		if($i==$line) {
			echo $c;
			break;
		}
	}
}

这个方式效率仍待考验
在一个apache的日志文件中（450M）
读取第20行非常之快 0.001039981842041
读取第200行0.0033199787139893
读取第2万行需要0.30908799171448 秒左右
读取第20万行2.5622429847717 seconds 已经到了无法忍受的地步
]]></description>
			<content:encoded><![CDATA[<pre name="code" class="php">
function get_line($file,$line) {
	$fp = fopen($file,'r');
	$i = 0;
	while(!feof($fp)) {
		$i++;
		$c = fgets($fp);
		if($i==$line) {
			echo $c;
			break;
		}
	}
}
</pre>
<p>这个方式效率仍待考验<br />
在一个apache的日志文件中（450M）<br />
读取第20行非常之快 0.001039981842041<br />
读取第200行0.0033199787139893<br />
读取第2万行需要0.30908799171448 秒左右<br />
读取第20万行2.5622429847717 seconds 已经到了无法忍受的地步</p>
]]></content:encoded>
			<wfw:commentRss>http://php.dayanmei.com/php-bigfile-txt-load-data.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

