今天虽说是周末,也是折腾了一天,给骏景论坛装了个wordpress mu。
其实开始看wpmu就考虑放弃了,我发现wpmu每加个博客账号会创建8个表,现在骏景论坛都52066个用户,全给开个博客,那就要创建四十多万个表!不过若是只给部分高级用户开放,倒也是在可控范围内。
安装不是太难,不过使用的是nginx,资料稍微少点,先是配置泛域名*.junjing.net
搞定了就搞主博客webapp了,放在www.junjing.net/blog 这个不用怎么配置,把wpmu程序弄到blog目录,chmod一下,就可以直接访问了,安装程序引导开始安装。 然后就是关键的地方了,如何把骏景论坛的用户跟wpmu的用户结合起来? 原来是想把论坛用户表导过去,发现他们密码不一样,论坛用md5,wpmu有自己的密码算法,不过可以修改掉它,打开pluggable.php,换掉两个函数:
然后wpmu数据库里面的密码就跟论坛用户密码一致了。 接着碰到最严重的问题,创建一个blog,不仅仅是创建8个表而已,除了一些用户,blog的数据,还有blog初始化数据一大堆,都在wp_$id_options表,创建完就有101条记录了,这说明我已经无法通过数据库操作来创建blog了,唯一的办法,只有通过wpmu自己的程序调用来实现。 设想是这样的,论坛用户登录后发现有个按钮“创建博客”,点进去输入一个二级域名提交,这个是jsp来写,程序收到域名再提交给wpmu的一个php,负责创建博客,为了省事,php把管理员权限验证去掉了: 加了一个参数 把论坛系统的密码传递过来,创建了新的用户和博客之后可以用相同密码登录。 腰酸,完全不懂php,不过看看还是能看懂一点,改一个简单的php出来,也还不算太为难。 比之前几天安装apache roller,还是顺利太多,roller在nginx,resin下简直安装不得,花了几个晚上没搞成,只好作罢。 update: 发现wpmu-functions.php里面有几个方法可能比我上面的山寨实现的好多了 function wpmu_create_user( $user_name, $password, $email) function wpmu_create_blog($domain, $path, $title, $user_id, $meta = ”, $site_id = 1)
server {
server_name *.junjing.net;
listen 80;
rewrite ^(.*)wp-admin/$ $1wp-admin/index.php;
#on server block
rewrite ^.*/files/(.*) /blog/wp-content/blogs.php?file=$1;
if (!-e $request_filename) {
rewrite ^.+?(/wp-.*) $1 last;
rewrite ^.+?(/.*\.php)$ $1 last;
rewrite ^ /index.php last;
}
function wp_hash_password($password) {
return md5($password);
}
function wp_check_password($password, $hash, $user_id = '') {
// If the hash was updated to the new hash before this plugin
// was installed, rehash as md5.
if ( strlen($hash) > 32 ) {
global $wp_hasher;
if ( empty($wp_hasher) ) {
require_once( ABSPATH . 'wp-includes/class-phpass.php');
$wp_hasher = new PasswordHash(8, TRUE);
}
$check = $wp_hasher->CheckPassword($password, $hash);
if ( $check && $user_id ) {
// Rehash using new hash.
wp_set_password($password, $user_id);
$user = get_userdata($user_id);
$hash = $user->user_pass;
}
return apply_filters('check_password', $check, $password, $hash, $user_id);
}
$check = ( $hash == md5($password) );
return apply_filters('check_password', $check, $password, $hash, $user_id);
}
<?php
//require_once('admin.php');
if ( !defined('WP_ADMIN') )
define('WP_ADMIN', TRUE);
if ( defined('ABSPATH') )
require_once(ABSPATH . 'wp-load.php');
else
require_once('../wp-load.php');
require_once(ABSPATH . 'wp-admin/includes/admin.php');
//check_admin_referer('add-blog');
$blog = $_POST['blog'];
$domain = sanitize_user( str_replace( '/', '', $blog[ 'domain' ] ) );
$email = sanitize_email( $blog[ 'email' ] );
$title = $blog[ 'title' ];
$passhash = $blog[ 'pass' ];
if ( empty($domain) || empty($email)){
//wp_die( __('Missing blog address or email address.') );
echo "-1";
exit;
}
if( !is_email( $email ) ) {
//wp_die( __('Invalid email address') );
echo "-2";
exit;
}
if( constant('VHOST') == 'yes' ) {
$newdomain = $domain.".".$current_site->domain;
$path = $base;
} else {
$newdomain = $current_site->domain;
$path = $base.$domain.'/';
}
$password = 'N/A';
$user_id = email_exists($email);
if( !$user_id ) {
//这是原来的程序,产生随机密码,后面用自己的密码替换掉。
$password = generate_random_password();
$user_id = wpmu_create_user( $domain, $password, $email );
if(false == $user_id) {
//wp_die( __('There was an error creating the user') );
echo "-3";
exit;
} else {
wp_new_user_notification($user_id, $password);
}
}
$wpdb->hide_errors();
$id = wpmu_create_blog($newdomain, $path, $title, $user_id , array( "public" => 1 ), $current_site->id);
$sql = "UPDATE wp_users SET user_pass = '".$passhash."' WHERE ID = ".$user_id;
$wpdb->query($sql);
$wpdb->show_errors();
if( !is_wp_error($id) ) {
echo "0";
} else {
//wp_die( $id->get_error_message() );
echo "-4";
exit;
}
?>
$passhash = $blog[ 'pass' ];
不过这个页面只是拿来做服务端调用,所以又写了个jsp来做论坛用户数据处理,判断是否已经申请过。
if(request.getMethod().equals("POST")){
for(int i=0;i<domain.length();i++){
if(domain.charAt(i)>255){
out.println("创建博客失败:域名不能使用中文");
return;
}
}
NVPair form_data[] = new NVPair[4];
form_data[0] = new NVPair("blog[domain]", domain);
form_data[1] = new NVPair("blog[title]", defaulttitle);
form_data[2] = new NVPair("blog[email]", email);
form_data[3] = new NVPair("blog[pass]", passhash);
URL url = new URL("上面那个php的地址");
//用了比较老的HTTPClient
HTTPConnection httpCon = new HTTPConnection(url);
HTTPResponse rsp = httpCon.Post(url.getFile(), form_data);
String result = rsp.getText();
if("0".equals(result)){
//增加了属性,判断是否已经创建了博客。
pageUser.setProperty("blog","http://"+domain + ".junjing.net");
out.println("创建博客成功 <a href=" + "http://"+domain + ".junjing.net" + ">点击打开<a/>");
}else if("-1".equals(result)){
out.println("blog地址和邮箱地址错误 Missing blog address or email address.");
}else if("-2".equals(result)){
out.println("邮件地址格式错误");
}else if("-3".equals(result)){
out.println("创建博客用户错误");
}else if("-4".equals(result)){
out.println("创建博客失败了");
}
return;
}
function create_empty_blog( $domain, $path, $weblog_title, $site_id = 1 )
//require_once(‘admin.php’);
if ( !defined(‘WP_ADMIN’) )
define(‘WP_ADMIN’, TRUE);if ( defined(‘ABSPATH’) )
require_once(ABSPATH . ‘wp-load.php’);
else
require_once(‘../wp-load.php’);
require_once(ABSPATH . ‘wp-admin/includes/admin.php’);
//check_admin_referer(‘add-blog’);
$blog = $_POST['blog'];
$domain = sanitize_user( str_replace( ‘/’, ”, $blog[ 'domain' ] ) );
$email = sanitize_email( $blog[ 'email' ] );
$title = $blog[ 'title' ];
$passhash = $blog[ 'pass' ];
if ( empty($domain) || empty($email)){
//wp_die( __(‘Missing blog address or email address.’) );
echo “-1″;
exit;
}
if( !is_email( $email ) ) {
//wp_die( __(‘Invalid email address’) );
echo “-2″;
exit;
}
if( constant(‘VHOST’) == ‘yes’ ) {
$newdomain = $domain.”.”.$current_site->domain;
$path = $base;
} else {
$newdomain = $current_site->domain;
$path = $base.$domain.’/';
}
$password = ‘N/A’;
$user_id = email_exists($email);
if( !$user_id ) {
$password = generate_random_password();
$user_id = wpmu_create_user( $domain, $password, $email );
if(false == $user_id) {
//wp_die( __(‘There was an error creating the user’) );
echo “-3″;
exit;
} else {
wp_new_user_notification($user_id, $password);
}
}
$wpdb->hide_errors();
$id = wpmu_create_blog($newdomain, $path, $title, $user_id , array( “public” => 1 ), $current_site->id);
$sql = “UPDATE wp_users SET user_pass = ‘”.$passhash.”‘ WHERE ID = “.$user_id;
$wpdb->query($sql);
$wpdb->show_errors();
if( !is_wp_error($id) ) {
echo “0″;
} else {
//wp_die( $id->get_error_message() );
echo “-4″;
exit;
}
?>
近期评论