0.4.2更新:
*phpmyadmin无法读取mysql.dll问题
*更新phpmyqdmin到3.2.3
*点击关闭和启动apache必须刷新后才能显示状态
*更新php至5.2.11
0.4.1更新:
*重写核心代码
*更名为HiPHP
*增加rewrite配置(新增discuz phpwind wordpress的rewrite模版)
软件简介:
HiPHP 是一款图形界面的快速搭建apache2.2.13、PHP 5.2.11、MySQL 5.1.35、phpMyAdmin 3.2.3,网站服务器平台的绿色软件。无需安装,具有灵活的移动性(如D:/HiPHP),打开HiPHP.exe启动服务即可。
HiPHP前身为NPMserv0.4.0进化过来的,为了开发两个不同版本(apache和nginx)的分支,以后集成两个版本的不再开发,但以后会开发转换工具,可以从两者之间相互转换.
1、注意事项:路径不要有中文或空格
2、MySQL默认用户名:root,密码123456
3、MySQL数据库文件存放目录:MySQL5.1\data
4、网站根目录www
5、访问本机请用http://127.0.0.1/
6、HiPHP集成了以下软件:
apahce2.2.13
PHP 5.2.11
MySQL 5.1.35
phpMyAdmin 3.2.3
Sendmail
zend3.3.3
感谢群里的同学进行测试和一些建议,感谢scomota的支持
odeIgniter默认的配置下是不允许URL中包含非ASCII字符的,如果我们有这样一个字符串:
http://www.example.com/photo/北京/鸟巢.jpg
那么CI会毫不客气的告诉你:
The URI you submitted has disallowed characters.
你 可能会说,那我把这个URL使用函数urlencode一下呢?不行。因为Web Server会在接收到一个被urlencode的URL后自动将其decode,然后在PHP里得到的这些字符串转换成他原来所代表的含义,并使用 Web Server自己的URL编码字符集(IIS6 中文版是GBK,Apache 2.2是UTF-8)传送给应用程序,这就使得CI得到的URL已经是一个解码过的,无论你有没有对URL进行urlencode,浏览器在发出请求时会 自动检测,若没有,则会自动进行编码。所以,手动的进行urlencode并不能解决问题。那么我们应该怎么做来解决这个问题呢?
对于CI这种框架,用到现在,我的观点是尽量不要去修改它,而是去扩展他,CI提供了很好的扩展机制,我们只需要在application/libraries/下增加一个文件MY_URI.php,其内容为:
class MY_URI extends CI_URI {
function _filter_uri($str)
{
if ($str != ” AND $this->config->item(‘permitted_uri_chars’) != ”)
{
$str = urlencode($str);
if ( ! preg_match(“|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i”, $str))
{
exit(‘The URI you submitted has disallowed characters.’);
}
$str = urldecode($str);
}
return $str;
}
}
红 色的两行是我新加入的代码,我覆盖了原来CI_URI中的_filter_uri方法,这样就可以使得中文的URL通过检测。但是,如果URL里有空格, 也不行了,怎么办呢?原来,urlencode会将空格转换成+,而CI的默认配置中是不允许+出现在URL里的,OK,把$config ['permitted_uri_chars'] = ‘a-z 0-9~%.:_\-’;改成$config['permitted_uri_chars'] = ‘a-z 0-9~%.:_\+\-’;就可以了。
首先要确定是否在第一行,
如果你是用editplus的话
我的edit plus中设置了默认的编码为utf-8,且UTF_8签名为:总是添加签名;
于是尝试以下操作:
在edit plus 的工具->参数->文件->UTF_8签名一项中,更改选项”总是添加签名”为”总是移除签名”,然后打开index.php文件,并重新另存为,重新运行脚本,终于可以正常了;
以前写了好几个代码,今天整合一下,成一个完整的工具
base64加密和解密,迅雷加密和解密,快车加密和解密
class CreateHtml
{
function mkdir( $prefix= 'article' )
{
$y = date('Y');
$m = date('m');
$d = date('d');
$p=DIRECTORY_SEPARATOR;
$filePath='article'.$p.$y.$p.$m.$p.$d;
$a=explode($p,$filePath);
foreach ( $a as $dir)
{
$path.=$dir.$p;
if(!is_dir($path))
{
//echo '没有这个目录'.$path;
mkdir($path,0755);
}
}
return $filePath.$p;
}
function start()
{
ob_start();
}
function end()
{
$info = ob_get_contents();
$fileId = '123456';
$postfix = '.html';
$path = $this->mkdir($prefix= ‘article’);
$fileName = time().’_’.$fileId.$postfix;
$file=fopen($path.$fileName,’w ‘);
fwrite($file,$info);
fclose($file);
ob_end_flush();
}
}
?>
$s=new CreateHtml();
$s->start();
?>
asdfasdfasdfasdfasdfasdfasdfasdfasdf
adfasdfasdf
>
$s->end();
?>
如果程序出错,就是权限问题
从say3say4的BLOG看到的,放到我们的团队的系列文章,方便大家学习
再说一句:基础很重要!
ajax架构中主要涉及的技术:
client: javascript解析xml, 操纵DOM修改html页面,javascript是“OO”的语言。
server: servlet + dao, 实现service接口即可
下面是client中主要的代码:
1。JS中封装解析xml的代码,以及实例应用。
//类的构造,传入xml文档和需要处理的标签名称
function DataSet(xmldoc, tagLabel) {
this.rootObj = xmldoc.getElementsByTagName(tagLabel)
//3个方法
this.getCount = getCount
this.getData = getData
this.getAttribute = getAttribute
}
function getCount(){
return this.rootObj.length
}
function getData(index, tagName){
if (index >= this.count) return “index overflow”
var node = this.rootObj[index]
var str = node.getElementsByTagName(tagName)[0].firstChild.data
return str
}
function getAttribute(index, tagName) {
if (index >= this.count) return “index overflow”
var node = this.rootObj[index]
var str = node.getAttribute(tagName)
return str
}
//如何使用DataSet类
function updateByXML(xmlDoc) {
var employeeDS = new DataSet(xmlDoc,”employee”); //关心的标签名称
var count = employeeDS.getCount()
for(i=0;i
var job = employeeDS.getData(i,"job")
var salary = employeeDS.getData(i,"salary")
alert(name + "," + job + "," + salary)
}
//使用的xml格式,类似如下
2。操纵DOM,创建table,显示获得的数据
function deleteOldTable() {
delRow = document.getElementsByTagName(“table”).length
//此句仅在本例中使用,因为本例中已经有一个table了,因此不能删除,需要根据情况变化一下2005.11.17
if(delRow == 1) return
var node = document.getElementsByTagName(“table”)[delRow-1]; //表格
var c = node.childNodes.length
for(i=0;i
}
//传入DataSet的一个实例即可
function makeTable(m_ds) {
deleteOldTable() //先清除以前的结果
var table = document.createElement(“table”);
table.setAttribute(“border”,”1″);
table.setAttribute(“width”,”100%”);
document.body.appendChild(table);
var header = table.createTHead();
var headerrow = header.insertRow(0);
headerrow.insertCell(0).appendChild(document.createTextNode(“姓名”));
headerrow.insertCell(1).appendChild(document.createTextNode(“职业”));
headerrow.insertCell(2).appendChild(document.createTextNode(“工资”));
for(var i=0;i
var job = m_ds.getData(i,”job”)
var salary = m_ds.getData(i,”salary”)
var row = table.insertRow(i+1);
row.insertCell(0).appendChild(document.createTextNode(name));
row.insertCell(1).appendChild(document.createTextNode(job));
row.insertCell(2).appendChild(document.createTextNode(salary));
}
}
From MoztwWiki
本文章为 Mozilla Developer Center 的 AJAX:Getting Started (http://developer.mozilla.o… 的翻译。原文的作者与编修历史可在它的历史页 (http://developer.mozilla.o… action=history)上看到。
这篇文章说明 AJAX 相关技术的基础,并提供实例供您上手。
AJAX 是啥?
AJAX (Asynchronous JavaScript and XML, 异步 JavaScript 及 XML 技术) 是个新词,但内涵是两个存在已有一段时间的 JavaScript 功能。这两种功能以往一直被忽略,在 Gmail、Google suggest 及 Google Maps 出现后才一举成名天下知。
这两个 JavaScript 功能 是:
所以假设你创建了一个”Universe”的类,并且强制所有的类都必须从universe扩展,你可以在universe 中定义一个clone的方法,如下:
class Universe {
function clone() {
$herring=serialize($this);
$vec=explode(‘:’,$herring);
$nam=str_replace(“\”",”,$vec[2]);
$ret=new $nam;
return $ret;
}
}
//然后
$obj=new Something();
//从Universe扩展
$other=$obj->clone();
你所得到的是一个新的Something类的对象,它同使用new方法,调用构造函数创建出的对象一样。我不知道这个对你是否有用,但是Universe类可以知道派生类的名字是一个好的经验。想象是唯一的限制。
注意:我用的是PHP4,我写的有些东西在PHP3下可能不能工作。]]>

