YOYO的最新BLOG文章

Jun
16

1. 安装mysql

sudo apt-get install mysql-server

中间需要输入mysql的管理员密码

2. 安装apache 2.0

sudo apt-get install apache2

3. 安装配置php5

sudo apt-get install php5
sudo apt-get install libapache2-mod-php5
sudo apt-get install php5-gd
sudo apt-get install php5-mysql

4. 安装phpmyadmin

sudo apt-get install phpmyadmin

中间需要输入mysql的管理员密码,和上面设置的一样即可

5. 在/var/www里面创建info.php,内容如下

<?php
phpinfo();
?>

6. 重启apache2

sudo /etc/init.d/apache2 restart

7. 然后在浏览器里面输入

http://localhost/info.php

你将会看到php的相关配置信息,说明环境都配置好了。

Tags: , , , ,
Posted in Server
Oct
20

很多时候需要用到js的escape函数来转换中文字符,可是用js转换后的字符怎么用php来转换回来呢,下面我就找到了两个很实用的函数。

GB2312编码:

function unescape($str) {
    
$str = rawurldecode($str);
    
preg_match_all("/%u.{4}|&#x.{4};|&#d+;|.+/U",$str,$r);
    
$ar = $r[0];
    
foreach($ar as $k=>$v) {
              
if(substr($v,0,2) == "%u")
                      
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
              
elseif(substr($v,0,3) == "&#x")
                      
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));
              
elseif(substr($v,0,2) == "&#") {
                      
$ar[$k] = iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));
              
}
    
}
    
return join("",$ar);
}

UTF8编码:

function unescape($str){
        
$ret = '';
        
$len = strlen($str);
 
        
for ($i = 0; $i < $len; $i++){
                
if ($str[$i] == '%' && $str[$i+1] == 'u'){
                        
$val = hexdec(substr($str, $i+2, 4));
 
                        
if ($val < 0x7f) $ret .= chr($val);
                        
else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
                        
else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
 
                        
$i += 5;
                
}
                
else if ($str[$i] == '%'){
                        
$ret .= urldecode(substr($str, $i, 3));
                        
$i += 2;
                
}
                
else $ret .= $str[$i];
        
}
        
return $ret;
}
Aug
16

冒泡排序算法是很多学习计算机的人必修的一种最基础的算法。今天在网上找了很多代码,发现有c++的,有Ruby的,有Java的等等,就是很少找到php的,于是我就自己写了一下php的冒泡排序算法,希望对大家有所帮助。

$arr = array(345,4,17,6,52,16,58,69,32,8,234);
for($i=1;$i<count($arr);$i++){
    
for($j=count($arr)-1;$j>=$i;$j--){
        
if($arr[$j]<$arr[$j-1]){
            
$temp = $arr[$j-1];
            
$arr[$j-1] = $arr[$j];
            
$arr[$j] = $temp;
        
}
    
}
}

基本概念
冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1 个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将小数放前,大数放后,一直比较到最小数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复 9,8,…,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,…,9,对于每一个i, j的值依次为1,2,…10-i。

产生
在许多程序设计中,我们需要将一个数列进行排序,以方便统计,常见的排序方法有冒泡排序,二叉树排序,选择排序等等。而冒泡排序一直由于其简洁的思想方法和比较高的效率而倍受青睐。

排序过程
设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上”漂浮”,如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。

Update 2009-8-18: 更新代码的错误。

May
30

今天客户定制了一台Linux的VPS,里面已经安装了apache,但是php和mysql都没有安装,于是我又安装又配置,最后发展真的是够麻烦的,后来我的哥们ppopcn说你还不如全部卸载了,直接用yum命令一块安装上呢,我想也倒是,那样还简单。

1、首先得用yum remove命令把先前安装的都删除,命令是:yum remove httpd,其他的卸载类似。

2、卸载完毕之后,执行如下命令来安装httpd和它的相关扩展支持:yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpMyAdmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel postfix

3、然后执行命令来安装php和相关的扩展支持:yum install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mapserver php-mbstring php-mcrypt php-mhash php-mssql php-shout php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel phpmyadmin

执行完上面这两个命令之后,我们想要的很多服务就都安装上了,启动一下httpd和数据库系统就ok了。

Tags: , , , ,
Posted in Server
May
04

相对于ASP生成验证码的程序来说,PHP用GD库生成验证码是容易的多了,下面是一个简单的生成验证码的程序。

header("Content-type: image/png");
$im = @imagecreate(50, 20) or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 225, 225, 225);
$text_color = imagecolorallocate($im, 51, 51, 51);
$rand_num = rand(1000,9999);
session_start();
$_SESSION["rand_num"] = $rand_num;
imagestring($im, 5, 7, 3$rand_num, $text_color);
for($i=1;$i<500;$i++){
    
$rand_color = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
    
imagesetpixel($im, rand()%70 , rand()%30 , $rand_color);
}
imagepng($im);
imagedestroy($im);

生成验证码之后,我们还得验证验证码是否是正确的,所以我顺便写了一个验证的函数:

function check_num($num){
    
if ($_SESSION["rand_num"] == $num){
        
unset($_SESSION["rand_num"]);
        
return true;
    
} else {
        
return false;
    
}
}

上面这两段程序是最简单的关于验证码的程序,大家可以根据自己的需求来完善即可。

Tags: , ,
Posted in 想说就说
Apr
28

这里的单号值得是单子号,例如订单号、进货单号和发货单号等,大约在两年前我写过一个ASP的通用函数,而今天我又写了一个PHP的通用函数,一并放在这里了。

函数都是通过一个已知的单子号来生成一个新的单子号,可以根据情况定制后面递增数的位数。

【经过测试,我发现原来的函数有点bug,所以做了一下修改,并把这个函数精简了一下,原来的函数太繁琐了】。

PHP函数:

function order_num($order_num,$n=4){
    
$length = strlen($order_num);
    
$time = time();
    
if (empty($order_num)){
        
return substr($order_num,0,$lenth-6-$n).date("ymd",$time).str_repeat("0",$n-1)."1";
    
} else {
        
$year = substr($order_num,$lenth - $n - 6,2);
        
$month = substr($order_num,$lenth - $n - 4,2);
        
$day = substr($order_num,$lenth - $n - 2,2);
        
if ($year != date("y",$time) || $month != date("m",$time) || $day != date("d",$time)){
            
return substr($order_num,0,$lenth-6-$n).date("ymd",$time).str_repeat("0",$n-1)."1";
        
} else {
            
$num = substr($order_num,-$n,$n);
            
$num = $num+1;
            
$num = str_repeat("0",$n-strlen($num)).$num;
            
return substr($order_num,0,$lenth-6-$n).date("ymd",$time).$num;
        
}
    
}
}

ASP函数:

Function DanNum(DanNo,Num)
Dim Dan,Begin,No,i
If Num=0 Then
Dan=""
Else
No=Clng(Right(DanNo,Num))+1
For i=1 to Num
If Len(No)=i then
Dan=String(Clng(Num-i),"0")&No '生成后面的随机数
End If
Next
End If

If Clng(Left(Right(DanNo,Num+2),2))<>Clng(Day(date)) or Clng(Left(Right(DanNo,Num+4),2))<>Clng(Month(date)) or Clng(Left(Right(DanNo,Num+6),2))<>Clng(Right(Year(date),2)) then
Dim Nian,Yue,Ri
Nian=Right(Year(Date),2)
If Len(Month(date))=1 Then
Yue="0"&Month(Date)
Else
Yue=Month(Date)
End If
If Len(Day(Date))=1 Then
Ri="0"&Day(Date)
Else
Ri=Day(Date)
End If

If Num=0 Then
Dan=""
Else
Dan=String(Clng(Num-1),"0")&"1"
End If

DanNum=Left(DanNo,Len(DanNo)-Num-6)&Nian&Yue&Ri&Dan
Else
DanNum=Left(DanNo,Len(DanNo)-Num)&Dan
End If
End Function

自我感觉PHP函数好像写得复杂了一些,这算法挺笨的,而ASP函数呢,写得也是够笨的,不过都还能用,各位兄弟有赏光的就先凑合用吧,我改天再升级一下,使用过程中有问题的在下面留言即可^_^

Tags: , ,
Posted in 刀光剑影
Apr
20

卸载apache
[root@server ~]# rpm -qa|grep httpd
httpd-2.2.3-11.el5_2.centos.4
httpd-manual-2.2.3-11.el5_2.centos.4

说明:rpm –qa | grep mysql 命令是为了把mysql相关的包都列出来,我上面的例子是Linux默认安装apache的rpm软件包列表,如果是别的Linux版本列出来的列表有可能会不一样,不过不用担心,不管是什么,卸载都从最下面的一个包开始,直到卸载掉第一个为止。

比如:在这个例子中,我们应该先卸载httpd-manual-2.2.3-11.el5_2.centos.4方法如下:

rpm –e httpd-manual-2.2.3-11.el5_2.centos.4

php和mysql的卸载和apache的卸载方法一样。

注意:卸载的时候如果卸载不掉,系统一般会提示包的依赖关系,并且列出依赖的包的名称,先卸载提示依赖的包就可以了。

如果实在有卸载不掉的包,可以加—nodeps这个参数来卸载,比如我们卸载httpd-manual-2.2.3-11.el5_2.centos.4,实在卸载不掉了。就用:

[root@localhost ~]# rpm -e httpd-manual-2.2.3-11.el5_2.centos.4 –nodeps

Apr
02

在用php的mail()函数发送UTF-8编码的邮件的时候,经常会出现乱码,所以我们要加入标示编码的一段代码,如下:

$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

但是仅仅这样还不行,因为在网易的一些邮箱里面,邮件的标题还是无法正常显示,所以我们需要用base64编码来解决这个问题,这也得多多感谢月光的提醒。

先用函数base64_encode() — 使用 MIME base64 对数据进行编码,标题字符串前加编码类型例如: =?UTF-8?B? ,标题字符串后加:?=

例如:

$subject = "=?UTF-8?B?".base64_encode($subject)."?=";

标题经过这样的处理之后,发送到邮箱中就不是乱码了。

BTW: 在写程序和测试的过程中,我再次感觉到了Gmail的强大,无论是GB2312还是UTF-8,只要是代码写得没问题,在GMail里面都能正常显示,而这些在网易等一些邮箱里面就会经常出问题,这足见Google的强大。对于普通的一个使用者来说,很难感觉到这其中的差异,而对于写程序的人来说,这种差别是很明显的。

Tags: , ,
Posted in PHP | MySQL