升东运维是一家专业从事Linux/Freebsd Unix/Windows平台网站维护业务的公司,专业提供Linux(CentOS Redhat Ubuntu等),Unix(Freebsd),Nginx,Apache等系统及网站维护,七年从业经验

Archive for the ‘PHP4’ Category

PHP版本的选择(转)

星期三, 十一月 30th, 2011

从PHP5.2.6版本开始,有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同?

先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式耗尽系统资源。

再来看PHP的两种执行方式:ISAPI和FastCGI。

FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI(无论搭配 IIS 6 或 IIS 7)执行 PHP ,都建议下载、执行 non-thread safe 的 PHP (PHP 的二进位档有两种包装方式:msi 、zip ,请下载 zip 套件)。

而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。

所以,对于PHP5.2选择Thread Safe版本安装,而对于PHP5.3则下载None-Thread Safe,执行PHP比较有效率。

另外,PHP还有VC6,VC9版本之分。

VC6 版本是使用 Visual Studio 6 编译器编译的,如果你的 PHP 是用 Apache 来架设的,那你就选择 VC6 版本。

VC9 版本是使用 Visual Studio 2008 编译器编译的,如果你的 PHP 是用 IIS 来架设的,那你就选择 VC9 版本。

yum安装后 编译安装php扩展模块

星期三, 三月 2nd, 2011

翻遍互联网,类似的资料实在太少,自己整理一份,环境是CentOS5.5,apache2.2+php5.2.16+sqlite

phpize依赖于php-devel运行,在php-devel这个包里面,同时还会生成一些必须的文件

安装php-devel

yum install php-devel

以添加sqlite模块为例子

下载php5.2.16.tar.gz,注意一定要和已经安装过的版本相同,本例下载到/home/,目录随意

tar zxvf php5.2.16.tar.gz

进入源码扩展所在目录(php-5.2.16/ext/sqlite/),运行phpize命令生成configure文件

cd php-5.2.16/ext/sqlite
phpize

#编译,指定php-config,注意这里的php-config,不是php.ini(找不到位置的话 运行”find / -name php-config” ,查找下)

./configure –with-php-config=/usr/bin/php-config –enable-sqlite-utf8
#上面可以添加–enable-sqlite-utf8,也可以不用添加

#编译安装,如果提示有警告错误试试 make clean清理一下

make;

make install

进行到这个时间,应该已经安装成功,可以查询phpinfo里面提示信息extension_dir   /usr/lib/php/modules,找下这个目录是否已经生成sqlite.so

#然后自己新建一个文件sqlite.ini

内容是

extension=sqlite.so

 

 

放在/etc/php.d/目录即可,sqlite还需要pdo_sqlite,同理编译,完成后

重启web服务器

本来应该到此为止,但是如果你运气不好,发现so文件没有放在扩展目录,下面的步骤就需要进行了

————————————————————————————————————————

#生成一个目录来存放扩展的模块

mkdir /usr/local/php/etc/php/ext

#复制sqlite.so到模块目录(每次编译目录不一样,自己找吧)

cp /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/sqlite.so /usr/local/php/etc/ext/

#编辑php.ini文件,指定PHP到哪个目录读模块

vi /usr/local/php/etc/php.ini

extension_dir=”/usr/local/php/etc/ext”
#Load模块
extension=ftp.so
#保存退出

重启apache
再用/usr/local/php/bin/php -m|grep sqlite查看是否有sqlite.so

php获取页面执行时间

星期六, 二月 19th, 2011
class runtime
{
var $StartTime = 0;
var $StopTime = 0;
function get_microtime()
{
list($usec, $sec) = explode(‘ ‘, microtime());
return ((float)$usec + (float)$sec);
}
function start()
{
$this->StartTime = $this->get_microtime();
}
function stop()
{
$this->StopTime = $this->get_microtime();
}
function spent()
{
return round(($this->StopTime – $this->StartTime) * 1000, 1);
}
}
$runtime= new runtime;
$runtime->start();//计时开始
//中间放置需要计时的函数或过程
$runtime->stop();//计时结束
echo “页面执行时间: “.$runtime->spent().” 毫秒”;

php屏蔽不安全函数

星期六, 二月 5th, 2011

可以使用phpinfo()函数查找php.ini位置
然后打开php.ini
找到”disable_functions=”
后面添加相关函数

“disable_functions=phpinfo,system,exec,passthru,shell_exec,popen”

需要注意的是dicuz的相关产品使用shell_exec函数来备份数据库,is_dir也是discuz不可缺少的函数

php数组排序函数详解

星期二, 一月 18th, 2011
下边提到的几个数组函数的排序有一些共性:
1 数组被作为排序函数的参数,排序以后,数组本身就发生了改变,函数的返回值为bool类型。

2 函数中出现a表示association,含义为,在按值排序的过程中,保持key=>value的对应关系不变

3 函数中出现k表示key,含义为,在按值排序的过程中按照数组key而不是数组的值排序

4 函数中出现单r的表示reverse,含义为,按照跟不加r的相反的顺序排列

5 函数名中出现单u的表示user-defined含义为,使用用户自定义函数排序,如果函数的逻辑是参数1<参数2返回负数,则按照升序排列(p1小2返负升)。

——————–sort函数升序排序——————————–

bool sort ( array &$array [, int $sort_flags= SORT_REGULAR ] )
<?php
$fruits = array(“lemon”, “orange”, “banana”, “apple”);
sort($fruits);
var_dump($fruits);
?>
结果:
array

0 => string 'apple' (length=5)
  1 => string 'banana' (length=6)
  2 => string 'lemon' (length=5)
  3 => string 'orange' (length=6)

--------------------rsort降序排列--------------------
<?php
$fruits = array("lemon", "orange", "banana", "apple");
rsort($fruits);
var_dump($fruits);
?>
结果:
array
  0 => string 'orange' (length=6)
  1 => string 'lemon' (length=5)
  2 => string 'banana' (length=6)
  3 => string 'apple' (length=5)

---------------asort按照二维数组值的升序排列(保持key=>value的关联关系)-----------
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
var_dump($fruits);
?>
结果:
array
  'c' => string 'apple' (length=5)
  'b' => string 'banana' (length=6)
  'd' => string 'lemon' (length=5)
  'a' => string 'orange' (length=6)

--------------arsort按照二维数组值的降序排列(保持key=>value的关联关系)--------------
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
arsort($fruits);
var_dump($fruits);
?>
结果
array
  'a' => string 'orange' (length=6)
  'd' => string 'lemon' (length=5)
  'b' => string 'banana' (length=6)
  'c' => string 'apple' (length=5)

--------------------ksort按照数组的key升序排列-------------- <?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
var_dump($fruits);
?>
结果
array

'a' => string 'orange' (length=6)
  'b' => string 'banana' (length=6)
  'c' => string 'apple' (length=5)
  'd' => string 'lemon' (length=5)

---------------------krsort按照数组key的降序排列--------------------------------
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
krsort($fruits);
var_dump($fruits);
?>

array
  'd' => string 'lemon' (length=5)
  'c' => string 'apple' (length=5)
  'b' => string 'banana' (length=6)
  'a' => string 'orange' (length=6)


----------------usort函数按照用户自定义的函数排序----------------
<?php
function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

var_dump($a);
?>
结果:
array
  0 => int 1
  1 => int 2
  2 => int 3
  3 => int 5
  4 => int 6

-----------------uksort使用自定义函数按照数组的key排序-----------------
<?php
function cmp($a, $b)
{
    $a = preg_replace('@^(a|an|the) @', '', $a);
    $b = preg_replace('@^(a|an|the) @', '', $b);
    return strcasecmp($a, $b);
}

$a = array("John" => 1, "the Earth" => 2, "an apple" => 3, "a banana" => 4);

uksort($a, "cmp");

var_dump($a);
?>
结果:
array
  'an apple' => int 3
  'a banana' => int 4
  'the Earth' => int 2
  'John' => int 1

-------------------uasort将数组用自定义函数按照value排序,保持索引关系不变---------
<?php
// Comparison function
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

// Array to be sorted
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
var_dump($array);

// Sort and print the resulting array
uasort($array, 'cmp');
var_dump($array);
?>
结果:
array
  'a' => int 4
  'b' => int 8
  'c' => int -1
  'd' => int -9
  'e' => int 2
  'f' => int 5
  'g' => int 3
  'h' => int -4
array
  'd' => int -9
  'h' => int -4
  'c' => int -1
  'e' => int 2
  'g' => int 3
  'a' => int 4
  'f' => int 5
  'b' => int 8

-------------------array_multisort排序多个数组或多维数组---------
<?php
$ar = array(
       array("10", 11, 100, 100, "a"),
       array(   1,  2, "2",   3,   1)
      );
   
array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>
结果:
array
  0 => 
    array
      0 => string '10' (length=2)
      1 => int 100
      2 => int 100
      3 => int 11
      4 => string 'a' (length=1)
  1 => 
    array
      0 => int 1
      1 => int 3
      2 => string '2' (length=1)
      3 => int 2
      4 => int 1
//说明:
1 上例中:$ar数组优先按照$ar[0]的字符串值升序排列,如果字符串值相等,再按照$ar[1]数组的数字值降序排列。
2 array_multisort函数的任意一个位置的参数如果是数组,表示排序时用的值,
如果有多个数组参数,优先按照前边的数组值进行排序,如果是常量,例如
SORT_ASC, SORT_DESC, SORT_REGULAR,SORT_NUMERIC, SORT_STRING.
表示排序方法(数组取值前优先)。

php获取汉字的首字母拼音

星期二, 一月 18th, 2011

下面是循环获取一段带有文字和符号的段落,并且输出里面每个汉字的首字母拼音,去除了里面的符号,每行输出一个,注意:此脚本程序适用于GB2312编码,未测试utf8编码

<?php
function getinitial($str)
{
$asc=ord(substr($str,0,1));
if ($asc<160) //非中文
{
if ($asc>=48 && $asc<=57)
{
return ‘1’; //数字
}
elseif ($asc>=65 && $asc<=90){
return chr($asc); // A–Z
}
elseif ($asc>=97 && $asc<=122){
return chr($asc-32); // a–z
}
else{
return ‘~’; //其他
}
}
else //中文
{
$asc=$asc*1000+ord(substr($str,1,1));
//获取拼音首字母A–Z
if ($asc>=176161 && $asc<176197){
return ‘A’;
}elseif ($asc>=176197 && $asc<178193){
return ‘B’;
}elseif ($asc>=178193 && $asc<180238){
return ‘C’;
}elseif ($asc>=180238 && $asc<182234){
return ‘D’;
}elseif ($asc>=182234 && $asc<183162){
return ‘E’;
}elseif ($asc>=183162 && $asc<184193){
return ‘F’;
}elseif ($asc>=184193 && $asc<185254){
return ‘G’;
}elseif ($asc>=185254 && $asc<187247){
return ‘H’;
}elseif ($asc>=187247 && $asc<191166){
return ‘J’;
}elseif ($asc>=191166 && $asc<192172){
return ‘K’;
}elseif ($asc>=192172 && $asc<194232){
return ‘L’;
}elseif ($asc>=194232 && $asc<196195){
return ‘M’;
}elseif ($asc>=196195 && $asc<197182){
return ‘N’;
}elseif ($asc>=197182 && $asc<197190){
return ‘O’;
}elseif ($asc>=197190 && $asc<198218){
return ‘P’;
}elseif ($asc>=198218 && $asc<200187){
return ‘Q’;
}elseif ($asc>=200187 && $asc<200246){
return ‘R’;
}elseif ($asc>=200246 && $asc<203250){
return ‘S’;
}elseif ($asc>=203250 && $asc<205218){
return ‘T’;
}elseif ($asc>=205218 && $asc<206244){
return ‘W’;
}elseif ($asc>=206244 && $asc<209185){
return ‘X’;
}elseif ($asc>=209185 && $asc<212209){
return ‘Y’;
}elseif ($asc>=212209){
return ‘Z’;
}else{
return ‘~’;
}
}
}
$str=<<<RAINS
人才是企业最重要的资源,高素质的人才是企业创造价值、持续发展、长盛不衰的力量源泉。好享家关注人才的培养和使用,最大限度地发挥人才的潜能,提高他们的积极性,以期在同行业中取得并保持自己的竞争力、奖励并激励优秀的员工。
随着科技的迅速发展,人们希望生活更能舒适、智能、安全。90年代中期,开始在中国出现智能小区,而今据统计未来5年中国的智能化小区将以30%的速度增长,预计到2010年我国大中城市中的60%住宅要实现智能化。专家认为,随着中国智能建筑市场的高速发展,无论是智能家居还是楼宇自动控制系统、消防系统、安保系统、广播系统、车管系统,都将出现前所未有的市场需求量,因此智能家居行业将蓬勃发展前景广阔
如果您对自身的能力充满自信,渴望更广阔的施展天地,我们随时欢迎优秀的您加入好享家,不断发展的团队中来。
RAINS;
echo $str.”<hr>”;
preg_match_all(“/([“.chr(0xb0).”-“.chr(0xf7).”][“.chr(0xa1).”-“.chr(0xfe).”])+/i”, $str, $matches);
$str = join(”, $matches[0]);
$text_array=array_filter(str_split($str,2));
foreach($text_array as  $value)
{
echo getinitial($value).”-“.$value.”<br>”;
}
?>