Page 3 of 512345

WordPress OOP 一拖多实现

PHP, 設計開發 10 Comments »173 views

现在在一个空间上只放一个Wordpress已经无法满足我的需要,以前总是上传多个Wordpress,分别维护管理。但是每当插件更新或者WP更新的时候,维护起来很麻烦。

看过CMB的http://www.cbmland.com/post/544/oop-use-wordpress-as-class.html后,我也进行了这方面的尝试,但是还会出现很多问题,例如永久链接。今天我终于解决了这些问题。

明确一点,Wordpress把一个博客所有的配置信息都写入了数据库,文件上仅仅是程序和主题,这样,我们只需根据访问来源的不同,给别给与两个设置即可。“面向对象”形容得很恰当。

在这个空间上,我也有两个Wordpress博客,域名分别是http://www.byvoid.com/blog和,http://pal.byvoid.com,两个博客共用/home/myself/www/blog下面的Wordpress程序。我把wp-config.php修改一下

if($_SERVER["HTTP_HOST"]=="www.byvoid.com")
{
define('DB_NAME', 'user');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
$table_prefix = 'wp_';
define ('WPLANG', 'zh_CN');
}
else if ($_SERVER["HTTP_HOST"]=="pal.byvoid.com")
{
define('DB_NAME', 'user');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
$table_prefix = 'pal_wp_';
define ('WPLANG', 'zh_CN');
}
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
?>

经过这样修改,根据来源的不同,Wordpress会读取两套不同的数据库设置,从而实现OOP。通过这种方法,我们理论上可以1拖无限个博客。

但是仅仅这样还是会出现问题,Rewrite永久链接会出错。

为什么为出错呢?因为我们只对Wordpress进行了OOP改造,但是.htaccess文件还是没有分别。例如我的博客,www.byvoid.com的根目录为/home/myself/www,而pal.byvoid.com的根目录为/home/myself/www/blog,可以理解为后者是前者的子集。

修改www.byvoid.com的永久链接时,Wordpress会在/home/myself/www/blog文件夹向.htaccess文件自动写入

# BEGIN WordPress

RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]

# END WordPress

而修改pal.byvoid.com时,Wordpress又会在.htaccess写入

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

于是发生了冲突,两个博客的Rewrite永久链接总是会有一个无法使用。于是,我考虑,.htaccess时都可以像wp-config.php一样实现判断呢?看过mod_rewrite的用法,终于有了解决方案。

我们可以使用RewriteCond进行来源判断,只需把.htaccess改成以下内容即可

# BEGIN WordPress

RewriteEngine On

RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{SERVER_NAME} ^www.byvoid.com
RewriteRule . /blog/index.php [L]

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{SERVER_NAME} ^pal.byvoid.com
RewriteRule . /index.php [L]

# END WordPress

修改过后,两个博客的永久链接都可以使用了。这种方理论上也可以推广到多个博客。

注意,只有虚拟主机的设定中,当前目录选项有AllowOverride All时,.htaccess才能用。.htaccess如何在Windows下建立,不用我说了吧?cmd下rename一个其他文件为.htaccess就行了。关于.htaccess文件,可以看看介绍

BYVoid原创。

标签:, , , , , , ,

COGS 评测排队问题

設計開發 3 Comments »221 views

其实在做COGS之前,看到许多评测系统Pending…Waiting…..Running…..Accept这种格式,尤其是以 Vijos和pku为代表,交了题还看不到结果,要在Status不断刷新等待。我对这种模式十分反感,更喜欢USACO人性化的方式,所以COGS开发初期是完全以USACO为蓝本做的,从文件提交方式可以看出来。
最初做的时候没有考虑排队,也就是开启多个线程,来多少评测多少,没有考虑共享CPU造成卡时不准问题。后来考虑到了,就给评测机加上了锁定功能,也引发了死锁问题。上个版本修正了死锁问题,但当OIER大量提交的时候会经常出现“当前没有空闲的评测机”的问题。有人要求加上Waiting队列,但我实在不想模仿Vijos,就自己想了一个解决方案。

实现评测和队列,评测页面、比赛评测页面、提交列表页面用Javascript重写,动态排队。全部由Ajax实现,无需刷新。

评测页面效果图
图1

图2

图3

图4

标签:, , ,

COGS V0.02

設計開發 2 Comments »150 views

更新说明

*不可提交对管理员无效
*增强提交记录 记录IP,保留每次提交的代码
*增加按运行时间排名
*把进入题库、比赛、分类放到上边栏
*合并前台与后台(题目列表,分类列表,用户列表,用户组列表,提交记录,评测机),开放某些页面
*页增加匿名阅读权限,方便搜索引擎抓取
*用户更改即时生效问题
*初步解决评测机锁死问题

标签:, ,

OOJ配置记

設計開發 6 Comments »377 views

由于原OOJ安全性不佳,鹰牛要我把COGS放到OOJ服务器上。温州中学那边的同学很热心,搞了一下午,配置了服务器。

下午5点钟的时候我用OpenSSH登录上服务器,开始配置COGS运行环境。大概顺序是这样的Mysql-server,Apache2,PHP5,proftpd,gcc,g++,fp。连上OpenSSH的感觉真好。

设好FTP,就能登录上去了。

很顺利的配置到了Apache PHP,界面可以看见了。

不料,没法评测,看来是编译器没装好。不过检查了半天,似乎也没有发现编译器问题。再看原来是路径设错了,晕。

调好编译器,可以评测了。

最后设置到界面,大功告成。20:30分。

晚上组建了一个临时讨论群,Dai牛,鹰牛,和巫山霏云牛,都加入了讨论。我把代码发给霏云牛看,得到了不少有意的指导,受益匪浅啊。

标签:, , ,

在线评测系统发布计划

設計開發 5 Comments »363 views

经过半年的开发,在线评测系统终于初具规模了。在学校内部测试了很久,没有发现什么很大的问题,于是计划在近日内把它放到互联网上。

 

系统结构概述

系统全部由PHP编写,数据库采用Mysql 5.1,服务器为Linux。该系统分为网页服务器和评测服务器,可以开启多个评测服务器以减少冲突,也可以把网页服务器和评测服务器合而为一。评测服务器与网页服务器通信信道为HTTP协议。目前我只写了支持Linux的评测服务器程序,预计标准化协议,开发支持多平台的评测服务器。

 

模块介绍

评测系统本着“简洁即是美”的原则,把每个功能做到尽量的简单和强大。

1、在线评测

该功能为评测系统核心部分。用户通过提交源代码,系统对源代码编译并进行评测。目前支持C/C++/Pascal。该系统采用文件提交方式,与许多评测系统不同的是,该系统要求用户的程序对文件进行读写,符合各大竞赛的标准及要求。用户对每道题最后一次提交的代码系统将予以保存和记录,便于用户查阅。

2、比赛组织

使用该功能,可以于网上组织大小规模的竞赛。自动计时,在线提交,管理员可以对其进行在线评测,便于在第一时间公布成绩。

3、题目检索

支持全文搜索,对每道题加以标签分类,便于查找。

4、其他功能

选手团队、题目讨论、站内短信。



关于题库

由于刚刚构建,题库尚匮乏,目前仅有30多道题,但这个数字很很快增加。

 

发布方式

本系统开源(在稳定运行后),欢迎下载和修改。

 

服务器

本系统暂使用河南省实验中学的服务器、域名和IP。

 

欢迎向我提出疑问、意见和建议,我会做得更好。请在下面直接评论,或发送邮件到 cmykrgb123@gmail.com

标签:, , ,
21 queries. 0.563 seconds. Designed by NattyWP .
Images by desEXign.