php-fpm 的启动,关闭 ,重启脚本【shell】

新建一个shell脚本然后输入。


#!/bin/sh
#
# php-fpm - this script starts and stops the daemin

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

php="/usr/local/sbin/php-fpm"
prog=$(basename $php)

CONF_FILE="/usr/local/lib/php.ini"

lockfile=/var/lock/subsys/php-fpm

start() {
    [ -x $php ] || exit 5
    [ -f $CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $php -c $CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $php -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $php -t -c $CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac


Share

PHP:内置进制转换函数

bindec() — 二进制转换为十进制
decbin() — 十进制转换为二进制
dechex() — 十进制转换为十六进制
decoct() — 十进制转换为八进制
hexdec() — 十六进制转换为十进制
octdec() — 八进制转换为十进制
base_convert()– 在任意进制之间转换数字

Share

正则匹配email – 不全面[php]

匹配 数字or字母 @ 数字or字母 . 数字or字母

if(preg_match("/^\w{1,32}@\w{1,16}.\w{1,3}(.\w{1,3})?$/", $string)) {
  return true;
} else {
  return false;
}
?>

Share

将类路径转换为.语法路径传递给AS[PHP]

define("ROOT_PATH","/xxx/yyy/zzz/"); 
 
function A (){
   $this->rootPath = ROOT_PATH;
  $this->file = __FILE__;
  return $this->classRoot = basename(str_replace("/",".",str_replace("$this->rootPath" ,"", $this->file)),".php");  
 }
Share

mcrypt使用[PHP]


要使用本函数库要先准备 mcrypt 程序,可以到 ftp://argeas.cs-net.gr/pub/unix/mcrypt 下载这个程序 libmcrypt-x.x.tar.gz。同时在编译 php 程序时需要加入 –with-mcrypt 的选项,俾使本函数库能顺利运作。
本函数提供的编码方式有 des、tripledes、blowfish (默认值)、3-way、safer-sk64、safer-sk128、twofish、tea、rc2 及使用 cbc, ofb, cfb, ecb 作为密码检索的 gost。此外还有 rc6 及 idea 等非免费的编码方式。
见下面列示为已定义的密码:
 
mcrypt_blowfish
mcrypt_des
mcrypt_tripledes
mcrypt_threeway
mcrypt_gost
mcrypt_crypt
mcrypt_des_compat
mcrypt_safer64
mcrypt_safer128
mcrypt_cast128
mcrypt_tean
mcrypt_rc2
mcrypt_twofish (mcrypt 2.x 前的版本用)
mcrypt_twofish128 (mcrypt 2.x 后的版本用)
mcrypt_twofish192
mcrypt_twofish256
mcrypt_rc6
mcrypt_idea
在密码检索本 (cipher) 方面,本函库支持 cbc、ofb、cfb 与 ecb 四种密码检索本。这四种密码检索本的简单叙述如下,更详细的信息请参考 schneier 所着作的 applied cryptography (isbn: 0-471-11709-9):
 
ecb (electronic codebook): 适合随机的资料,例如使用另外的密钥。若资料量少且随机时,使用 ecb 较不适合。
cbc (cipher block chaining): 适合文件的加密,安全性较 ecb 好。
cfb (cipher feedback): 适合对位组资料流中的某段独立位组资料 (single bytes) 加密。
ofb (output feedback): 与 cfb 相容,尤其适合在无法忍受错误波及的应用上。
目前 php 仍无法对单位 (bit) 的熵值做加密解密的步骤,目前只适合对字符串作密码处理。
 
在使用 cfb 及 ofb 二种模式时,必须要向量初始化 (initialization vector, iv),cbc 模式也可以使用向量初始化。
向量初始化的值在加解密时必须是独一无二的,同时也要保持相同。当加密后的资料输出时,也可同时输出密码钥匙 (例如存在文件中);或者也可以将向量初始化的值与加密后的资料一起输出。
 
mcrypt_get_cipher_name: 取得编码方式的名称。
mcrypt_get_block_size: 取得编码方式的区块大小。
mcrypt_get_key_size: 取得编码钥匙大小。
mcrypt_create_iv: 从随机源将向量初始化。
mcrypt_cbc: 使用 cbc 将资料加/解密。
mcrypt_cfb: 使用 cfb 将资料加/解密。
mcrypt_ecb: 使用 ecb 将资料加/解密。
mcrypt_ofb: 使用 ofb 将资料加/解密。
 
mcrypt_get_cipher_name
取得编码方式的名称。
语法: string mcrypt_get_cipher_name(int cipher);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数用来取得编码方式的名称。返回值为名称字符串,若没有指定的编码方式则返回 false 或输入的名称。
使用范例
下例会输出 tripledes 字符串。
$cipher = mcrypt_tripledes;
print mcrypt_get_cipher_name($cipher);
?>
 
mcrypt_get_block_size
取得编码方式的区块大小。
语法: int mcrypt_get_block_size(int cipher);
返回值: 整数
函数种类: 编码处理
内容说明: 本函数用来取得编码方式的区块大小。参数为编码名称,返回整数单位为位组 (byte)。
 
mcrypt_get_key_size
取得编码钥匙大小。
语法: int mcrypt_get_key_size(int cipher);
返回值: 整数
函数种类: 编码处理
内容说明: 本函数用来取得编码钥匙的大小。参数为编码名称,返回整数治募�单位为位组 (byte)。
 
mcrypt_create_iv
从随机源将向量初始化。
语法: string mcrypt_create_iv(int size, int source);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数用来建立向量初始化 (initialization vector, iv) 的值。参数 size 为指定的向量初始化长度。
参数 source 为随机资料的来源,来源可以是 mcrypt_rand (系统产生的随机值)、mcrypt_dev_random (unix 系统中 /dev/random 的资料)、mcrypt_dev_urandom (unix 系统中 /dev/urandom 的资料),若使用 mcrypt_rand 当做随机源,记得先使用 srand() 产生乱数种子。
使用范例
$cipher = mcrypt_tripledes;
$block_size = mcrypt_get_block_size($cipher);
$iv = mcrypt_create_iv($block_size, mcrypt_dev_random);
?>
 
mcrypt_cbc
使用 cbc 将资料加/解密。
语法: string mcrypt_cbc(int cipher, string key, string data, int mode, string [iv]);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数使用 cbc 密码检索本 (cipher block chaining),将资料加密及解密。参数 cipher 为加/解密方式,例如 mcrypt_tripledes。参数 key 是密码钥匙,当然要注意保持它的机密性。欲加密或解密的字符串就放在参数 data 之中。参数 mode 表示加密 mcrypt_encrypt 或是解密 mcrypt_decrypt。参数 iv 是可省略的参数,代表向量初始化 (initialization vector, iv)。
 
mcrypt_cfb
使用 cfb 将资料加/解密。
语法: string mcrypt_cfb(int cipher, string key, string data, int mode, string iv);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数使用 cfb 密码检索本 (cipher feedback),将资料加密及解密。参数 cipher 为加/解密方式,例如 mcrypt_tripledes。参数 key 是密码钥匙,当然要注意保持它的机密性。欲加密或解密的字符串就放在参数 data 之中。参数 mode 表示加密 mcrypt_encrypt 或是解密 mcrypt_decrypt。参数 iv 是代表向量初始化 (initialization vector, iv)。
 
mcrypt_ecb
使用 ecb 将资料加/解密。
语法: string mcrypt_ecb(int cipher, string key, string data, int mode);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数使用 ecb 密码检索本 (electronic codebook),将资料加密及解密。参数 cipher 为加/解密方式,例如 mcrypt_tripledes。参数 key 是密码钥匙,当然要注意保持它的机密性。欲加密或解密的字符串就放在参数 data 之中。参数 mode 表示加密 mcrypt_encrypt 或是解密 mcrypt_decrypt。
 
mcrypt_ofb
使用 ofb 将资料加/解密。
语法: string mcrypt_ofb(int cipher, string key, string data, int mode, string iv);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数使用 ofb 密码检索本 (output feedback),将资料加密及解密。参数 cipher 为加/解密方式,例如 mcrypt_tripledes。参数 key 是密码钥匙,当然要注意保持它的机密性。欲加密或解密的字符串就放在参数 data
 
 
Share

安装mcrypt扩展

mcrypt被用来实现可逆加密
默认没有装这里我要装一下
 
有个依赖库libmcrypt 要先装
位置/usr/ports/security/libmcrypt
 
然后装mcrypt
/usr/ports/security/php5-mcrypt
 
根据提示要在/usr/local/etc/php/extensions.ini
中+上
extension=mcrypt.so
这句
但是装好默认就+上了
 
所以 apachectl restart

OK~
Share

iframe自适应高度和宽度

iframe自适应高度和宽度,在页面标签内写入如下。

然后在里面写入如下

Share

mysql类 自己为求方便封装了一下


############################################################
# What's this . This is a PHP5 CLASS to provide access utility
# for MySQL database.
#
# AUTHOR :: Humen1
# WEB SITE :: http://www.humen1.net
# Vision :: 1.0
#
############################################################
 
class mydb{
///start of the CLASS
 private $host;
 private $usr;
 private $pwd;
 private $db;
 private $charset = NULL;
 private $charsetArray = Array("utf8","big5","gb2312","gbk","latin1");
 private $link;
 private $result;
 private $error = Array();
 /**
 #ERROR = Array(
 # [0]=>,
 # 
 # )
 **/
 
 ###construct
 function mydb($DB_host,$DB_user,$DB_passwd,$DB_name = ""){
  $this->host = $DB_host;
  $this->usr = $DB_user;
  $this->pwd = $DB_passwd;
  $this->db = $DB_name;
 }
 
 ###set database name
 function set_db($DB_name){
  $this->db = $DB_name;
 }
 
 ###get connection flag
 function connection(){
  ///get connection
  $this->link = @mysql_connect($this->host,$this->usr,$this->pwd);
  if(!$this->link){
   $this->error[0] = sprintf("Error connecting to host %s by user %s", $this->host,$this->usr);
  }
  ///select db
  if(!mysql_select_db($this->db,$this->link)){
   $this->error[1] = sprintf("Error in selecting %s database.\n mysql errno is %d and error message is %s",$this->db,mysql_errno($this->link),mysql_error($this->link));
  }
 }
 
 ###set query charset
 function set_charset($Charset){
  if(in_array($Charset,$this->charsetArray)){
   $this->charset = $Charset;
  }
 }
 
 ###Quick execute the statement
 function query($SQL){
  $this->connection();
  if($this->charset !== NULL){
   mysql_query("SET NAMES ".$this->charset , $this->link);
  }
  
  $this->result = mysql_query($SQL , $this->link);
  if(!$this->result){
   $this->error[2] = sprintf("Error query in %s database.\n mysql errno is %d and error message is %s",$this->db,mysql_errno($this->link),mysql_error($this->link));
  }else{
   return $this->result;
  }
 }
 
 ###fetch the result as array
 function fetch($result_type = MYSQL_BOTH){
  ///MYSQL_ASSOC,MYSQL_NUM,MYSQL_BOTH
  if($result_type == "1") $result_type = MYSQL_NUM;
  if($result_type == "A") $result_type = MYSQL_ASSOC;
  
  if(!$this->result){
   $this->error[3] = "Error fetch array in %s database.There is no Result";
  }else{
   return mysql_fetch_array($this->result,$result_type);
  }
 }
 
 ###fetch the result as object
 function fetch_obj(){
  return ($this->result) ? @mysql_fetch_object($this->result) : false;
 }
 
 ###return the next id
 function next_id(){
  return ($this->link) ? @mysql_insert_id($this->link) : false;
 }
 
 ###return the affectde rows
 function affected_rows(){
  return ($this->link) ? @mysql_affected_rows($this->link) : false;
 }
 
 ###return the rows number from result
 function num_rows(){
  return ($this->result) ? @mysql_num_rows($this->result) : false;
 }
 
 ###return the fields number from result
 function num_fields(){
  return ($this->result) ? @mysql_num_fields($this->result) : false;
 }
 
 ###free the result
 function free(){
  return ($this->result) ? @mysql_free_result($this->result) : false;
 }
 
/****************Advanced Plus************************/
 
 ###get one record only
 function getOne($SQL){
  $SQL .= " LIMIT 1";
  $this->query($SQL);
  return ($this->result) ? @mysql_fetch_row($this->result) : false;
 }
 
///End of the CLASS
}
?>
Share

Google排名优化-面向Google(Search Engine Friendly)的URL设计

不得不承认,将动态网页链接rewriting成静态链接是最保险和稳定的面向搜索引擎优化方式 此外随着互联网上的内容以惊人速度的增长也越来越突出了搜索引擎的重要性,如果网站想更好地被搜索引擎收录,网站设计除了面向用户友好(User Friendly)外,搜索引擎友好(Search Engine Friendly)的设计也是非常重要的。进入搜索引擎的页面内容越多,则被用户用不同的关键词找到的几率越大。在Google的算法调查一文中提到一个站点被Google索引页面的数量其实对PageRank也是有一定影响的。由于Google 突出的是整个网络中相对静态的部分(动态网页索引量比较小),链接地址相对固定的静态网页比较适合被Google索引(怪不得很多大网站的邮件列表归档和BLOG按日期归档的文档很容被搜的到),因此很多关于面向搜索引擎 URL设计优化(URI Pretty)的文章中提到了很多利用一定机制将动态网页参数变成像静态网页的形式:比如可以将:http://phpunixman.sourceforge.net/index.php?mode=man&parameter;=ls变成:http://phpunixman.sourceforge.net/index.php/man/ls

实现方式主要有2种:

基于url rewriteIIS的ISAPI REWRITE下载(免费) 基于path_info 把URI地址用作参数传递:URL REWRITE

最简单的是基于各种WEB服务器中的URL重写转向(Rewrite)模块的URL转换:这样几乎可以不修改程序的实现将 news.asp?id=234 这样的链接映射成 news/234.html,从外面看上去和静态链接一样。Apache服务器上有一个模块(非缺省):mod_rewrite:URL REWRITE功能之强大足够写上一本书。

当我需要将将news.asp?id=234的映射成news/234.html时,只需设置:RewriteRule /news/(\d+)\.html /news\.asp\?id=$1 [N,I]这样就把 /news/234.html 这样的请求映射成了 /news.asp?id=234当有对/news/234.html的请求时:web服务器会把实际请求转发给/news.asp?id=234

而在IIS也有相应的REWRITE模块:比如ISAPI REWRITE和IIS REWRITE,语法都是基于正则表达式,因此配置几乎和apache的mod_rewrite是相同的:

比对于某一个简单应用可以是:RewriteRule /news/(\d+)\.html /news/news\.php\?id=$1 [N,I]这样就把 http://www.chedong.com/news/234.html 映射到了 http://www.chedong.com/news/news.php?id=234

一个更通用的能够将所有的动态页面进行参数映射的表达式是:把 http://www.myhost.com/foo.php?a=A&b;=B&c;=C 表现成 http://www.myhost.com/foo.php/a/A/b/B/c/C。RewriteRule (.*?\.php)(\?[^/]*)?/([^/]*)/([^/]*)(.+?)?$1(?2$2&:\?)$3=$4?5$5: [N,I]

以下是针对phpBB的一个Apache mod_rewrite配置样例:

RewriteEngine On RewriteRule /forum/topic_(.+)\.html$ /forum/viewtopic.php?t=$1 [L] RewriteRule /forum/forum_(.+)\.html$ /forum/viewforum.php?f=$1 [L] RewriteRule /forum/user_(.+)\.html$ /forum/profile.php?mode=viewprofile&u;=$1 [L] 这样设置后就可以通过topic_1234.html forum_2.html user_34.html这样的链接访问原来的动态页面了。

通过URL REWRITE还有一些好处:mod_rewrite和isapirewrite基本兼容,但是还是有些不同,比如:isapirewrite中”?”需要转义成”\?”,mod_rewrite不用,isapirewrite支持 “\d+” (全部数字),mod_rewrite不支持

隐藏后台实现:这在后台应用平台的迁移时非常有用:当从asp迁移到java平台时,对于前台用户来说,根本感受不到后台应用的变化; 简化数据校验:因为像(\d+)这样的参数,可以有效的控制数字的格式甚至位数; 比如我们需要将应用从news.asp?id=234迁移成news.php?query=234时,前台的表现可以一直保持为 news/234.html。从实现应用和前台表现的分离:保持了URL的稳定性,而使用mod_rewrite甚至可以把请求转发到其他后台服务器上。

基于PATH_INFO的URL美化Url美化的另外一个方式就是基于PATH_INFO:PATH_INFO是一个CGI 1.1的标准,经常发现很多跟在CGI后面的”/value_1/value_2″就是PATH_INFO参数:比如:http://phpunixman.sourceforge.net/index.php/man/ls 中:$PATH_INFO = “/man/ls”

PATH_INFO是CGI标准,因此PHP Servlet等都有的支持。比如Servlet中就有request.getPathInfo()方法。注意:/myapp/servlet/Hello/foo的 getPathInfo()返回的是/foo,而/myapp/dir/hello.jsp/foo的getPathInfo()将返回的 /hello.jsp,从这里你也可以知道jsp其实就是一个Servlet的PATH_INFO参数。ASP不支持PATH_INFO PHP中基于PATH_INFO的参数解析的例子如下://注意:参数按”/”分割,第一个参数是空的:从/param1/param2中解析出$param1 $param2这2个参数if ( isset($_SERVER[“PATH_INFO”]) ) { list($nothing, $param1, $param2) = explode(‘/’, $_SERVER[“PATH_INFO”]);}

如何隐蔽应用:例如 .php,的扩展名:在APACHE中这样配置: ForceType application/x-httpd-php

如何更像静态页面:app_name/my/app.html解析的PATH_INFO参数的时候,把最后一个参数的最后5个字符”.html”截断即可。注意:APACHE2中缺省是不允许PATH_INFO的,需要设置 AcceptPathInfo on

特别是针对使用虚拟主机用户,无权安装和配置mod_rewrite的时候,PATH_INFO往往就成了唯一的选择。

OK,这样以后看见类似于http://www.example.com/article/234这样的网页你就知道可能是 article/show.php?id=234这个php程序生成的动态网页,很多站点表面看上去可能有很多静态目录,其实很有可能都是使用1,2个程序实现的内容发布。比如很多WIKIWIKI系统都使用了这个机制:整个系统就一个简单的wiki程序,而看上去的目录其实都是这个应用拿后面的地址作为参数的查询结果。

利用基于MOD_REWRITE/PATH_INFO + CACHE服务器的解决方案对原有的动态发布系统进行改造,也可以大大降低旧有系统升级到新的内容管理系统的成本。并且方便了搜索引擎收录入索引。

附:如何在IIS上利用PHP支持PATH_INFOPHP的ISAPI模式安装备忘:只试成 php-4.2.3-Win32

解包目录========php-4.2.3-Win32.zip c:\php

PHP.INI初始化文件=================复制:c:\php\php.ini-dist 到 c:\winnt\php.ini

配置文件关联============按照install.txt中的说明配置文件关联

运行库文件==========复制 c:\php\php4ts.dll 到 c:\winnt\system32\php4ts.dll

这样运行后:会发现php把PATH_INFO映射到了物理路径上Warning: Unknown(C:\CheDong\Downloads\ariadne\www\test.php\path): failed to create stream: No such file or directory in Unknown on line 0

Warning: Unknown(): Failed opening ‘C:\CheDong\Downloads\ariadne\www\test.php\path’ for inclusion (include_path=’.;c:\php4\pear’) in Unknown on line 0

安装ariadne的PATCH==================停止IIS服务net stop iisadminftp://ftp.muze.nl/pub/ariadne/win/iis/php-4.2.3/php4isapi.dll覆盖原有的c:\php\sapi\php4isapi.dll

注:ariadne是一个基于PATH_INFO的内容发布系统,PHP 4.3.2 RC2中CGI模式的PATH_INFO已经修正,照常安装即可。

参考资料:URL Rewrite文档:ISAPI REWRITE文档IIS的ISAPI REWRITE下载(免费)http://httpd.apache.org/docs/mod/mod_rewrite.
html
http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html

搜索引擎友好的URL设计http://www.sitepoint.com/article/485说不定这个URL原来就是articel.php?id=485

一个基于PATH_INFO的开源内容管理系统http://typo3.com/

Google的PageRank算法说明:http://pr.efactory.de/

Share

安装pdo扩展 for freebsd6.2 php5


*php5-extensions
ZLIB
PDO
这两项选中
 
 
对mysql的链接驱动
#/usr/ports/databases/php5-pdo_mysql
#make install clean
 
 
restart apache
Share