分类目录归档:php

php入门与提高::::::演道网php专栏提供一线php研发人员在学习工作中的经验,减少大家走的弯路,大量源码可以直接使用。

关于Linux下PHP编程的几个问题

1、环境的搭建:本机虚拟机装好PHP\TOMCAT\APACHE等所需环境,具体安装过程可从网上搜到,然后设置本机虚拟机FTP可以ROOT访问,可以通过修改FTP配置文件实现,可从网上搜到具体修改的过程。

WINDOWS环境下装Zend Development Environment,创建FTP连接,链接到本机虚拟机,这样就可以实现在WINDOWS上直接编辑Linux下的代码。

但注意要在装虚拟机时把支持中文选上,否则你用VI打开源码文件时中文注释或者中文提示语将成乱码。

2、对文件的读写最好不要在程序里直接操作源文件,可以操作临时文件,当要保存文件时再执行脚本把临时文件覆盖源文件。这样做的好处很多,其中可以解决对文件没有读写的权限的情况,可以通过脚本把权限进行反复修改。

3、对一些服务的操作,或者

Linux系统下将php和MySQL命令加入到环境变量中的方法

<

div id=”content” contentScore=”1389″>在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行 “php -v”命令查看当前php版本信息时时,则会提示命令不存在的错误,下面我们详细介绍一下在linux下将php和mysql加入到环境变量中的方法(假 设php和mysql分别安装在/usr/local/webserver/php/和/usr/local/webserver/mysql/中)。

方法一:直接运行命令export PATH=$PATH:/usr/local/webserver/php/bin 和 export PATH=$PATH:/usr/local/webserver/mysql/bin
使用这种方法,只会对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效,只是临时生效。

方法二:执行vi ~/.bash_profile修改文件中PATH一行,将/usr/local/webserver/php/bin 和 /usr/local/webserver/mysql/bin 加入到PATH=$PATH:$HOME/bin一行之后
这种方法只对当前登录用户生效

方法三:修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码
PATH=$PATH:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin
export PATH

最后:执行 命令source /etc/profile或 执行点命令 ./profile使其修改生效,执行完可通过echo $PATH命令查看是否添加戼/div>

让你的 PHP 7 更快之 Hugepage

PHP7刚刚发布了RC4, 包含一些bug修复和一个我们最新的性能提升成果(NEWS), 那就是”HugePageFy PHP TEXT segment”, 通过启用这个特性,PHP7会把自身的TEXT段(执行体)”挪“到Huagepage上,之前的测试,我们能稳定的在Wordpress上看到2%~3%的QPS提升。

关于Hugepage是啥,简单的说下就是默认的内存是以4KB分页的,而虚拟地址和内存地址是需要转换的, 而这个转换是要查表的,CPU为了加速这个查表过程都会内建TLB(Translation Lookaside Buffer), 显而易见如果虚拟页越小,表里的条目数也就越多,而TLB大小是有限的,条目数越多TLB的Cache Miss也就会越高, 所以如果我们能启用大内存页就能间接降低这个TLB Cache Miss,至于详细的介绍,Google一搜一大堆我就不赘述了,这里主要说明下如何启用这个新特性, 从而带来明显的性能提升。

新的Kernel启用Hugepage已经变得非常容易了,以我的开发虚拟机为例(Ubuntu Server 14.04,Kernel 3.13.0-45), 如果我们查看内存信息:

  1. $ cat /proc/meminfo | grep Huge
  2. AnonHugePages: 444416 kB
  3. HugePages_Total: 0
  4. HugePages_Free: 0
  5. HugePages_Rsvd: 0
  6. HugePages_Surp: 0
  7. Hugepagesize: 2048 kB

可见一个Hugepage的size是2MB, 而当前并没有启用HugePages. 现在让我们先编译PHP RC4, 记得一定不要加: –disable-huge-code-pages (这个新特性是默认启用的, 你加了这个就关了)

然后配置opcache, 从PHP5.5开始Opcache已经是默认启用编译的,但是是编译动态库的, 所以我们还是要在php.ini中配置加载下。

  1. zend_extension=opcache.so

这个新特性是做在Opcache里的,所以也要通过Opcache启用这个特性(通过设置opcache.huge_code_pages=1), 具体的配置:

  1. opcache.huge_code_pages=1

现在让我们配置OS, 分配一些Hugepages:

  1. $ sudo sysctl vm.nr_hugepages=128
  2. vm.nr_hugepages = 128

现在让我们再次检查内存信息:

  1. $ cat /proc/meminfo | grep Huge
  2. AnonHugePages: 444416 kB
  3. HugePages_Total: 128
  4. HugePages_Free: 128
  5. HugePages_Rsvd: 0
  6. HugePages_Surp: 0
  7. Hugepagesize: 2048 kB

可以看到我们分配的128个Hugepages已经就绪了, 然后我们来启动php-fpm:

  1. $ /home/huixinchen/local/php7/sbin/php-fpm
  2. [01-Oct-2015 09:33:27] NOTICE: [pool www] ‘user’ directive is ignored when FPM is not running as root
  3. [01-Oct-2015 09:33:27] NOTICE: [pool www] ‘group’ directive is ignored when FPM is not running as root

现在, 再次检查内存信息:

  1. $ cat /proc/meminfo | grep Huge
  2. AnonHugePages: 444416 kB
  3. HugePages_Total: 128
  4. HugePages_Free: 117
  5. HugePages_Rsvd: 27
  6. HugePages_Surp: 0
  7. Hugepagesize: 2048 kB

Bingo, 配置成功! Enjoy :)

但是有言在先, 启用此特性以后, 会造成一个问题就是你如果尝试通过Perf report/anno 去profiling的时候, 会发现符号丢失(valgrind, gdb不受影响), 这个主要原因是Perf的设计采用监听了mmap,然后记录地址范围, 做IP到符号的转换, 但是目前HugeTLB只支持MAP_ANON, 所以导致Perf认为这部分地址没有符号信息,希望以后版本的Kernel可以修复这个限制吧..

最后: 咦? 你怎么不发性能对比测试啊? 嘿嘿, 这个就留给你们自己来试试咯, 欢迎评论你们看到的变化 :)

PHP 7革新与性能优化 http://www.linuxidc.com/Linux/2015-09/123136.htm

PHP 7 ,你值得拥有  http://www.linuxidc.com/Linux/2015-06/118847.htm 

CentOS 7.x / Fedora 21 上面体验 PHP 7.0  http://www.linuxidc.com/Linux/2015-05/117960.htm 

CentOS 6.3 安装LNMP (PHP 5.4,MyySQL5.6) http://www.linuxidc.com/Linux/2013-04/82069.htm 

在部署LNMP的时候遇到Nginx启动失败的2个问题 http://www.linuxidc.com/Linux/2013-03/81120.htm 

Ubuntu安装Nginx php5-fpm MySQL(LNMP环境搭建) http://www.linuxidc.com/Linux/2012-10/72458.htm 

《细说PHP》高清扫描PDF+光盘源码+全套教学视频 http://www.linuxidc.com/Linux/2014-03/97536.htm 

CentOS 6中配置PHP的LNMP的开发环境  http://www.linuxidc.com/Linux/2013-12/93869.htm 

PHP 的详细介绍请点这里
PHP 的下载地址请点这里

php setcookie兼容ie,firefox

說明:文件編碼是gbk

 

function   escape_for_js($str)   {
          preg_match_all(“/[\x80-\xff].|[\x01-\x7f]+/”,$str,$r);
          $ar   =   $r[0];
          foreach($ar   as   $k=>$v)   {
              if(ord($v[0])   <   128)
                  $ar[$k]   =   urlRawDecode($v);
              else
                  $ar[$k]   =   “%u”.utf2ucs(iconv(“gbk”,”utf-8″,$v));//这里得用小写。如果用大写,会遇到繁体中文cookie乱码
          }
          return   join(“”,$ar);
    }

    function urlRawDecode($raw_url_encoded)
    {
        # Hex conversion table
        $hex_table = array(
            0 => 0x00,
            1 => 0x01,
            2 => 0x02,
            3 => 0x03,
            4 => 0x04,
            5 => 0x05,
            6 => 0x06,
            7 => 0x07,
            8 => 0x08,
            9 => 0x09,
            “A”=> 0x0a,
            “B”=> 0x0b,
            “C”=> 0x0c,
            “D”=> 0x0d,
            “E”=> 0x0e,
            “F”=> 0x0f
        );

        # Looking for latin characters with a pattern like this %C3%[A-Z0-9]{2} ie. -> %C3%B1 = ‘?’
        if(preg_match_all(“/\%C3\%([A-Z0-9]{2})/i”,$raw_url_encoded,$res))
        {
            $res = array_unique($res = $res[1]);
            $arr_unicoded = array();
            foreach($res as $key => $value){
                $arr_unicoded[] = chr(
                    (0xc0 | ($hex_table[substr($value,0,1)]<<4)) | (0x03 & $hex_table[substr($value,1,1)])
                );
                $res[$key] = “%C3%” . $value;
            }

            $raw_url_encoded = str_replace($res,$arr_unicoded,$raw_url_encoded);
        }

        # Return raw url decoded
        return rawurldecode($raw_url_encoded);
    }

    function   utf2ucs($str){   
      //  echo $str,”
“;
        $n=strlen($str);   
        if   ($n==3)   {   
                $highCode   =   ord($str[0]);             
          $midCode   =   ord($str[1]);   
                $lowCode   =   ord($str[2]);   
          $a       =   0x1F   &   $highCode;   
          $b       =   0x7F   &   $midCode;   
          $c       =   0x7F   &   $lowCode;   
          $ucsCode   =   (64*$a   +   $b)*64   +   $c;       
        }   
        elseif   ($n==2)   {   
              $highCode   =   ord($str[0]);             
                $lowCode   =   ord($str[1]);   
          $a       =   0x3F   &   $highCode;     //0x3F是0xC0的补数   
          $b       =   0x7F   &   $lowCode;     //0x7F是0x80的补数   
          $ucsCode   =   64*$a   +   $b;       
        }   
        elseif($n==1)   {   
                $ucsCode   =   ord($str);   
        }   
        $ret =    dechex($ucsCode);   
       // echo $ret,”
“;
        return $ret;
      }
$a = “bbb轻音乐a輕”;
setcookie(“aaa”,escape_for_js($a));
?>

图片压缩的一些心得(转载)

function resize($image, $width, $height, $crop) {

$im = new Imagick();

$im->readImageBlob($image);

$input_width = $width;

$input_height = $height;

$src_width = $im->getImageWidth();

$src_height = $im->getImageHeight();

$width_rate = $src_width/$width;

$height_rate = $src_height/$height;

if($width_rate>1||$height_rate>1){

if($crop){

if($width_rate>$height_rate){

$width = $src_width/$height_rate;

}else{

$height = $src_height/$width_rate;

}

}else{

if($width_rate>$height_rate){

$height = $src_height/$width_rate;

}else{

$width = $src_width/$height_rate;

}

}

$im->resizeImage($width, $height, Imagick::FILTER_CATROM, 1, false);

if($crop){

if($width>$input_width){

$im->cropImage ( $input_width , $height , ($width-$input_width)/2 , 0 );

}elseif($height>$input_height){

$im->cropImage ( $width , $input_height , 0 , ($height-$input_height)/2 );

}

}

}

$im->setImageCompression(Imagick::COMPRESSION_JPEG);

$im->setImageCompressionQuality(75);

$im->stripImage();

$im->setImageFormat(‘JPEG’);

$blob = $im->getImageBlob();

$im->clear();

$im->destroy();

return $blob;

}

使用eaccelerator来代替文件session

默认的session.save_handler = files,当大量用户访问需要session的页面时,默认会在/tmp/下生成和用户数同样数量的session文件,默认每1000次访问扫描一次 session临时目录进行回收。并发高的话,可能导致unix/linux下文件节点数耗尽,而且磁盘压力会很大。这时候,我们可以考虑使用 memcached和eaccelerator来代替files。

  • 使用memcached,可以解决多主机轮询问题,速度快;缺点是需要在程序中加载相关的session handler重载程序。
  • 使用eaccelerator,可以在程序没有任何侵入的前提下平滑过渡;缺点是和原来的files一样,不能跨机器使用。

至于到底要怎么用,还是要看实际情况了。

下边,我们主要说一下eaccelerator的session替换。

eaccelerator的功能除了对php预编译代码进行优化、缓存之外,还提供了php开发下的共享内存操作、session内存存储、内容缓存等功能。

php默认的session存储方式是在磁盘,虽然可以配置php生成的文件目录到内存盘中,但最终还是需要依赖于文件系统,势必产生文件操纵的开 销。当网站并发请求很高的时候,还会产生另为一个性能问题:session目录下的文件数目过多,达到操纵系统瓶颈,虽然这时也可以通过配置为多级目录, 但依旧无法摆脱文件系统的魔爪。

session.save_path = “N;/path”

eaccelerator专门针对PHP的这个Session存储效率问题,通过使用共享内存技术为我们提供了高效的解决方案。注意,要启用对 session支持,再编译安装eaccelerator时需要启用-with-eaccelerator-sessions选项,例如:

./configure –enable-eaccelerator=shared –with-eaccelerator-shared-memory –with-eaccelerator-sessions –with-eaccelerator-content-caching

然后我们便可以在php.ini中修改配置来启用它:

session.save_handler = eaccelerator

最后重启apache,并执行如下测试:session.php

/**
* new session hander test.
* by lowell from www.zhongguowen.com
*/
if(!function_exists(“eaccelerator_set_session_handlers”))
{
die(“eaccelerator is in trouble!”);
}
session_start();
switch($_GET[“act”])
{
case “logout”:
session_unset();
session_destroy();
header(“Location: ” . $_SERVER[“PHP_SELF”]);
break;

    case “login”:
$_SESSION[“user”] = “Lowell Zhong”;
header(“Location: ” . $_SERVER[“PHP_SELF”]);
break;
}

if(isset($_SESSION[“user”]) && $_SESSION[“user”] != “”)
{
echo “Welcome ” . $_SESSION[“user”] . “ [logout]\n”;
}else{
echo “Click me for logining”;
}
?>

这里再推荐另外还一个php session的共享内存存储模块:http://www.ossp.org/pkg/lib/mm/

参考:http://blog.csdn.net/guoguo1980/archive/2008/07/16/2659764.aspx

php简单过滤垃圾信息

问题 浏览器 DEMO 解决方法 Hacking Rules:

property:all-ie\9; property:gte-ie8\0;*property:lte-ie7; +property:ie7; _property:ie6;

1 input[button | submit] 不能用 margin:0 auto; 居中 IE8 bug | fixed 为input添加width 2 body{overflow:hidden;}没有去掉滚动条 IE6/7 bug | fixed 设置html{overflow:hidden;} 3 hasLayout的标签拥有高度 IE6/7 bug | fixed *height:0;
_overflow:hidden; 4 form>[hasLayout]元素有margin-left时,子元素中的[input | textarea] 出现2×margin-left IE6/7 bug | fixed form > [hasLayout 元素]{margin-left:宽度;}
form div{*margin-left:宽度÷2;} 5 当border-width有1条<边3条时被设置成dotted时,1px的边dotted显示成dashed IE7 bug | fixed 不在同一个元素上使用不同宽度的 dotted 6 当子元素有position:relative的时候,父元素设置overflow:[hidden|auto]相当于给子元素设置了position:visible; IE6/7 bug | fixed 给父元素设置position:relative; 7 :hover伪类不能改变有position:absolute的子级元素的left/top值 IE7 bug | fixed 把top/left的值设置成除0%外的所有百分值;或添加一个margin-[所有方向]除0外的所有值,包括0% 8 :focus + selector {} 选择器失效 IE8 bug | fixed 在失效选择器后面添加一个空选择器, :focus{} 9 列表中混乱的浮动:在list中浮动图片时,图片出现溢出正常位置;或没有list-style IE8 bug | fixed 用背景图片替换list-style 10 th 不会自动继承上级元素的 text-align IE8 bug | fixed 给th添加text-align:inherit; 11 样式(包括link/style/@import(link)) 最多允许个为是:32 IE6-8 ─ 常识 99.99%的情况下,不会遇到 12 :hover 时若background-color为#fff, 失效 IE7 bug | fixed 把background-color改成background。或者,非#fff || #ffffff 13 忽略’>’后有注释的选择器:selector> /**/ selector{} IE7 bug | fixed 官方DEMO有误 14 * html IE6 ─ HACK 只对IE6有效 15 PNG图片中的颜色和背景颜色的值相同,但显示不同 IE6-7 bug | fixed 利用 pngcrush 去除图片中的 Gamma profiles 16 margin:0 auto; 不能让block元素水平居中 IE6-8 bug | fixed 给block元素添加一个width 17 使用伪类 :first-line | :first-letter, 属性的值中出现!important 会使属性失效 IE8 bug | fixed !important is evil, don’t use it anymore 18 :first-letter 失效 IE6 bug | fixed 把 :first-letter 移到离{}最近的地方,如 h1, p:first-letter{},而非 p:first-letter h1{} 19 Position:absolute元素中,a display:block, 在非:hover时只有文本可点击 IE6/7 bug | fixed 给a添加background, 如果背景透明,使用background:url(‘任何页面中已经缓存的文件链接’),不推荐background:url(#)[官方的解决方法],因为会增加一下HTTP请求 20 float列表元素不水平对齐:li不设置float,a设置display:block;float:[方向],li不水平对齐 IE6/7 bug | fixed 给li设置display:inline 或 float:[方向] 21 dt, dd, li 背景失效 IE6 bug | fixed dt, dd, li{position:relative;} 22

PHP 字符串操作的 printf() 内置函数用法

php中指出打印输出的函数有很多 最常见的就是  echo  print()  printf()  spintf() 这几个了。

echo 和 print() 功能相同,但是 print( )具有执行成功与否的返回值 (true 和 false)。

使用函数 printf()  和 sprintf() 还可以实现一些更为复杂的格式化输出。 这两个的工作方式基本相同,只是printf() 函数是讲一个格式化的字符串输出到浏览器中,而 sprintf() 函数是返回一个格式化过的字符串。

printf()  基本用法:

echo “you have $total money”;

要使用printf() 函数得到相同的结果,就应该使用如下语句:

printf (“you have %s money”, $total );

格式化字符串中的%s 是转换标记。它的意思是使用后面的变量来替换自己。 在这个例子中它会被解释成字符串$total 的代替。  如果 $total 变量中的值是 25.6,以上两种方法都将打印为25.6 。

printf() 的优点在于,可以使用更有用的转换说明来指定 $total 为一个浮点数(它的后面应该有两位小数点)。 如下所示:

printf(“you hava %.2f money “, $total );

经过这行代码格式化处理,存储在 $total 中的25.6 将打印为 25.60 。(但是并不影响变量原始的值)

可以在格式化字符串中使用多个转换标记。 如果有n个转换标记,那么在格式化字符串后面就应该带有n个参数。 每个转换标记默认将按照给出的顺序依次重新格式化。

printf (“you have %.2f money , but shopping %.2f RMB “, $total , $total_shopping );

在这里,第一个转换标记将使用$total 的值, 第二个转换标记将使用变量 $total_shopping 的值。

printf()  %转换标记的语法格式:

%[ ‘padding_character] [ – ] [ width ] [ .precision ] type    //中括号内的参数为可选参数

所有的转换标记都以% 开头。

参数padding_character 将被用来填充变量直至所指定的宽度。该参数的作用就像使用计算器那样在数字前面加零。 默认填充字符是一个空格,如果指定了一个空格或者0 ,就不需要使用 ‘ 单引号作为前缀。 对于任何其他填充字符,必须指定 ’ 单引号前缀。

字符 – 是可选的。它指明该域中的数据的对齐方式, 该选项默认留空即右对齐,设置了 – 符号,那么就是左对齐(填充字符填充到右边不够的位置)。

参数 width 是可选的,它告诉printf() 函数在这里将显示的字符宽度(按字符计算)。

参数 precision 必须是以一个小数点开始。 它用于指明小数点后的精确位数。

转换标记最后的一部分是一个类型码。 其支持的所有类型如下表所示:

代码类型 意义
b 解释为整数并作为二进制数输出
c 解释为整数并作为字符输出
d 解释为整数并作为小数输出
f 解释为双精度并作为浮点数输出
o 解释为整数并作为八进制数输出
s 解释为字符串并作为字符串输出
u 解释为整数并作为非指定小数输出
x 解释为整数并作为带有小写字母a~f的十六进制数输出
X 解释为整数并作为带有大写字母A~F的十六进制数输出

用法示例:

php > $a = 534 ;
php > printf(“printf type is %.1f”,$a);
printf type is 534.0
php > printf(“printf type is %’u.1f”,$a);
printf type is 534.0
php > printf(“printf type is %’u6.1f”,$a);
printf type is u534.0
php > printf(“printf type is %’u10.1f”,$a);
printf type is uuuuu534.0
php > printf(“printf type is %’u-10.1f”,$a);
printf type is 534.0uuuuu
php > printf(“printf type is %b”,$a);
printf type is 1000010110
php > printf(“printf type is %o”,$a);
printf type is 1026
php > printf(“printf type is %s”,$a);
printf type is 534
php > printf(“printf type is %u”,$a);
printf type is 534
php > printf(“printf type is %x”,$a);
printf type is 216
php > $a = 539;
php > printf(“printf type is %x”,$a);
printf type is 21b

当在类型转换代码中使用 printf() 函数时,你可以使用带序号的参数方式,这就意味着参数的顺序并不一定要与转换标记中的顺序相同。 例如:

printf (“you have %2\$.2f money , but shopping %1\$.2f RMB “, $total , $total_shopping );

只要直接在 % 符号后添加参数的位置,并且以 $ 符号为结束 。 在这个例子中,2\$ 意味着用列表中的第二个参数替换。这个方法也可以在重复参数中使用。

php > $a = 539;
php > $b = 38;
php > printf(“you have %2\$.2f money , but shopping %1\$.2f RMB! “, $a,$b);
you have 38.00 money , but shopping 539.00 RMB!
php >

这些函数还有两种可替换版本,分别是 vprintf()  和 vsprintf() 。这些变体函数接受两个参数:格式字符串 和 参数数组, 而不是可变数量的参数。

64位Red Hat 5.6使用yum升级PHP

<

div id=”content” contentScore=”4073″>最近给一台服务器升级PHP,默认安装的系统是RedHat Linux Enterpris(企业版)5.6, 自带的PHP是5.1.6,mysql是5.0.9,但安装最新的phpMyAdmin要求PHP最低都要5.2版本。所以要升级PHP

网上找了很多地方,终于找到一个捷径:使用yum升级PHP到最新版本。

众所周知,RedHat企业版不注册是不能使用YUM的。那么下面从网上摘抄的一段文章来帮你解决这个问题。

CentOS/RHEL 5.6的php版本默认为php-5.1.6,但是在php-5.2.9版本之前的php都存在一个漏洞,但是目前网上很多地方都无法使用yum update php*升级到新版本,经过多方的搜索资料,终于找到一种升级CentOS/RHEL 5.6的php到新版本的方法。

Centos上安装PHP一般来说有两种做法,要不通过wget下载安装文件,手动安装。要不通过源repo安装。

CentOS上的安装源有好几个(参加如下),官方的CentOS-Base.repo更新太迟缓,不太好用,比如官方的repo就没有php-sqlite的源。

一般来说,推荐使用REMI的源,更新快,文件充分。

下面的两个链接都是可以的,这里我用的是第一个链接下载的remi源的
(1)下载
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/epel-release-5-4.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

或用下面的链接下载也行的
wget http://mirrors.yun-idc.com/epel/5/x86_64/epel-release-5-4.noarch.rpm
wget http://rpms.famillecollet.com/el5.x86_64/remi-release-5-9.el5.remi.noarch.rpm

32位的如下:
wget http://mirrors.yun-idc.com/epel/5/i386/epel-release-5-4.noarch.rpm
wget http://rpms.famillecollet.com/el5.i386/remi-release-5-9.el5.remi.noarch.rpm

(1)安装
Ø安装之前可以先看一下这个两个包会安装哪些包及路径

64位Red Hat 5.6使用yum升级PHP

Ø 安装下载好的remi源的两个包
rpm -Uvh epel-release-5-4.noarch.rpm
rpm -Uvh remi-release-5.rpm

64位Red Hat 5.6使用yum升级PHP

这样就安装完这样就安装了Remi repository在你的系统上,RHEL5的用remi-release-5.rpm,RHEL6的用remi-release-6.rpm,其它地方一样。
Ø 然后需要编辑/etc/yum.repos.d/remi.repo
vi /etc/yum.repos.d/remi.repo
 
Ø 启用Remi Repository修改enabled=0为enabled=1。【只修改将[remi]中的enabled=0改成enabled=1来启用remi 源】
再在这个文件的最后增加一行:
priority=1
保存退出。
/etc/yum.repos.d/epel.re和/etc/yum.repos.d/epel-testing.repo这两个文件也按照上面的方法进行编辑!只在最后一行添加“priority=1”
 
#rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
#rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi

(3)升级PHP到新版本
  之后就可以升级php了。经过测试,如果单独升级php可能会提示失败,这样的话连同mysql一起升级就没问题了,所以我们必须执行以下命令才能升级php。记得安装后才用update。
yum –enablerepo=remi update php* mysql*
到现在为止php已经是5.4.17,mysql已经是5.5.32的了
(4)升级后可能的问题
无法启动mysql服务,切换到数据库的目录下
[root@utooo-anhui ~]# cd /var/lib/mysql/
在数据库的目录会生成一个错误的err文件

64位Red Hat 5.6使用yum升级PHP

查看那个生成的err文件可以看到有提示下面的错误:
[ERROR] /usr/libexec/mysqld: unknown option ‘–skip-locking’

到配置文件里注释掉那个错误的选项

vi /etc/my.cnf
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
port= 3306
socket= /var/lib/mysql/mysql.sock
#skip-locking//把这个前面加个“#”号或去掉
key_buffer = 384M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU’s*2 for thread_concurrency
thread_concurrency = 8
max_connections = 1024

改完之后,就可以启动mysql的服务了。

推荐阅读:

搭建内网yum服务器 http://www.linuxidc.com/Linux/2013-07/86847.htm

搭建局域网CentOS Yum服务器 http://www.linuxidc.com/Linux/2012-05/60167.htm

更多RedHat相关信息见RedHat</sp