suphp 方式下 多版本php共存的配置

参考部分文档地址
http://www.kvm.la/apache-php52-with-php53.html

经检验发现 此文中基本正确除了  .htaccess 需要这样写

<FilesMatch “\.(inc|php|php3|php4|php5|php6|phtml|phps)$”>
AddHandler x-httpd-php52 .inc .php .php3 .php4 .php5 .php6 .phtml
</FilesMatch>

!!!首先你得会编译一份fastcgi模式的php哦!!!

 

其余需要配置的文件和参考地址相同,现在列出如下

/usr/local/suphp/etc/suphp.conf

[handlers]
;Handler for php-scripts
x-httpd-php5=”php:/usr/local/php5/bin/php-cgi”
x-httpd-php52=”php:/usr/local/webserver/php/bin/php-cgi”

 /etc/httpd/conf/extra/httpd-suphp.conf

<IfModule mod_suphp.c>
<FilesMatch “\.(inc|php|php3|php4|php5|php6|phtml|phps)$”>
AddHandler x-httpd-php5 .inc .php .php3 .php4 .php5 .php6 .phtml
</FilesMatch>
<Location />
suPHP_Engine on
suPHP_ConfigPath /usr/local/etc/php5/cgi/
suPHP_AddHandler x-httpd-php5
suPHP_AddHandler x-httpd-php52

</Location>
</IfModule>

 

discuz 附件过多导致超出数据库的修复

今天一个朋友的discuz论坛上传图片出现无法上传情况,经过chrome F12 调试发现是数据库的附件表的aid超出了MEDIUMINT(8)的允许最大值,所以适当增大就好了,下面的sql有效

ALTER TABLE  `pre_forum_attachment` CHANGE  `aid`  `aid` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT;
ALTER TABLE  `pre_forum_attachment_unused` CHANGE  `aid`  `aid` BIGINT UNSIGNED NOT NULL;
ALTER TABLE  `pre_forum_attachment_0` CHANGE  `aid`  `aid` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT;
。
。
。
ALTER TABLE  `pre_forum_attachment_9` CHANGE  `aid`  `aid` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT;

php5.3 zendguard 的一段代码备忘,来自wdcp

zendguard-php5.3

#!/bin/bash
F="ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz"
Aurl="http://dl.wdlinux.cn:5180/soft/"
if [[ `uname -m` == "x86_64" ]];then
        F="ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz"
fi
if [ ! -f $F ];then
        wget -c $Aurl/$F
fi
tar zxvf $F
[ $? != 0 ] && echo "file err" && exit
if [ ! -d /www/wdlinux/Zend/lib ];then
        mkdir -p /www/wdlinux/Zend/lib
fi
if [[ `uname -m` == "x86_64" ]];then
        cp ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/*.so /www/wdlinux/Zend/lib/
else
        cp ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/*.so /www/wdlinux/Zend/lib/
fi
grep '\[Zend\]' /www/wdlinux/apache_php/etc/php.ini
if [ $? != 0 -a -f /www/wdlinux/apache_php/etc/php.ini ];then
echo '[Zend]
zend_extension = /www/wdlinux/Zend/lib/ZendGuardLoader.so
zend_loader.enable = 1' >> /www/wdlinux/apache_php/etc/php.ini
fi
grep '\[Zend\]' /www/wdlinux/nginx_php/etc/php.ini
if [ $? != 0 -a -f /www/wdlinux/nginx_php/etc/php.ini ];then
echo '[Zend]
zend_extension = /www/wdlinux/Zend/lib/ZendGuardLoader.so
zend_loader.enable = 1' >> /www/wdlinux/nginx_php/etc/php.ini
fi
echo
echo "ZendGuardLoader is OK"

php的 uc_client.php 测试一列

define('UC_CONNECT', 'mysql');

define('UC_DBHOST', 'localhost');
define('UC_DBUSER', 'root');
define('UC_DBPW', '');
define('UC_DBNAME', 'ultrax');
define('UC_DBCHARSET', 'utf8');
define('UC_DBTABLEPRE', '`ultrax`.pre_ucenter_');
define('UC_DBCONNECT', 0);

define('UC_CHARSET', 'utf-8');
define('UC_KEY', 'M1K6F1X3Qaj5d103O8J8Labay219occ7w78d5asbb34aZfGbV2O9t9E5m288NfNd');
define('UC_API', 'http://127.0.0.1/dz/uc_server');
define('UC_APPID', '1');
define('UC_IP', '');
define('UC_PPP', 20);

if($_POST)
{

include "uc_client/client.php";
$username=$_POST["u"];
$password=$_POST["p"];
$f = uc_get_user($username, 0);
if(!$f)
{

uc_user_register($username, $password, $username."@aaa.com");
$f = uc_get_user($username, 0);
}
echo uc_user_synlogin($f[0]) ;
}

禁止 某些可写目录执行 php的方法

首先说下分析为啥这个是正确的,
httpd.conf里面 AddType application/x-httpd-php5 .php
并不区分大小写,从而导致 .php .PHP .Php .pHp .phP 都可以正确执行,那么就需要防止这类漏洞,采用apache rewrite方法的时候用 NC 表示不区分大小写匹配 ,F表示forbidden

RewriteRule ^images/.*\.php – [NC,F]

uc_client/client.php 功能介绍

uc的客户端uc_clinet/client.php 功能

以uc_get_user 为例子

function uc_get_user($username, $isuid=0) {
	$return = call_user_func(UC_API_FUNC, 'user', 'get_user', array('username'=>$username, 'isuid'=>$isuid));
	return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return);
}
此函数调用 client.php 内部 UC_API_FUNC 函数,一般来说UC_API_FUNC 是 定值,你在客户端的后台一般设置是mysql方式的同步
那么  
define('UC_API_FUNC', UC_CONNECT == 'mysql' ? 'uc_api_mysql' : 'uc_api_post');
也就是说 UC_API_FUNC 的值是 uc_api_mysql
下面看 uc_api_myql 函数
function uc_api_mysql($model, $action, $args=array()) {
	global $uc_controls;
	if(empty($uc_controls[$model])) {
		include_once UC_ROOT.'./lib/db.class.php';
		include_once UC_ROOT.'./model/base.php';
		include_once UC_ROOT."./control/$model.php";
		eval("\$uc_controls['$model'] = new {$model}control();");
	}
	if($action{0} != '_') {
		$args = uc_addslashes($args, 1, TRUE);
		$action = 'on'.$action;
		$uc_controls[$model]->input = $args;
		return $uc_controls[$model]->$action($args);
	} else {
		return '';
	}
}
表示的是 包含了 control/$model.php  运行里面的 on_xxx 比如  onget_user 就是一例
function onget_user() {
		$this->init_input();
		$username = $this->input('username');
		if(!$this->input('isuid')) {
			$status = $_ENV['user']->get_user_by_username($username);
		} else {
			$status = $_ENV['user']->get_user_by_uid($username);
		}
		if($status) {
			return array($status['uid'],$status['username'],$status['email']);
		} else {
			return 0;
		}
	}
这里明显是 $_ENV['user'] 是 model/user.php 的user类引入的
在contrl/user.php 里面看的很清楚
	function usercontrol() {
		parent::__construct();
		$this->load('user');
		$this->app = $this->cache['apps'][UC_APPID];
	}
通过base类的load 函数 

	function load($model, $base = NULL) {
		$base = $base ? $base : $this;
		if(empty($_ENV[$model])) {
			require_once UC_ROOT."./model/$model.php";
			eval('$_ENV[$model] = new '.$model.'model($base);');
		}
		return $_ENV[$model];
	}

那么好了,在user->get_user_by_username 和  $user->get_user_by_uid 函数里面选择一个,根据 isuid 来判断参数是否是uid,
从而到uc数据库的UC_DBTABLEPRE."members 根据uid还是username查找.得到的值被重新组织了!!!
return array($status['uid'],$status['username'],$status['email']);

如果想得到 uid ,需要从 [0] 里面的!!!

支付宝手机网页支付

支付宝手机网页支付

参考此文 http://www.tuicool.com/articles/aqeA7r

手机网页支付产品由手机网页即时到账授权接口(alipay.wap.trade.create.direct)、

手机网页即时到账交易接口(alipay.wap.auth.authandexecute)两个接口组成。

必须先调用手机网页即时到账授权接口(alipay.wap.trade.create.direct)获得授权令牌,

再调用手机网页即时到账交易接口(alipay.wap.auth.authandexecute)完成付款。