Submitted by 淡水河边 on 2008, January 11, 10:16 AM
摸索codeigniter。一开始就遇到了挫折。
按官方的提示,我想把RUL中的index.php隐藏掉。原来的URL是“www.your-site.com/index.php/news/article/my_article”
通过设置.htaccess文件可以掩藏它。使用“非”(!)方法使指定以外的任何请求都重新定向。
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
在上面的例子中,任何除开 index.php,images,和robots.txt 的 HTTP 请求都当成对 index.php 文件的请求。
淡水照做了。但是给我的结果是:
Forbidden
You don't have permission to access /main on this server.
Apache/2.0.59 (Win32) DAV/2 PHP/5.2.3 Server at localhost Port 80
本以为是权限的问题,其实不是,而是由于Server的httpd.conf中将FollowSymLinks禁止了,也就是禁止了符号链接。来看看Apache Document中对FollowSymLinks的定义:
XML/HTML代码
- FollowSymLinks
- The server will follow symbolic links in this directory.
- Even though the server follows the symlink it does not change the pathname used to match against <Directory> sections.
- Note also, that this option gets ignored if set inside a <Location> section.
因此,我们需要在.htaccess中进行设定:Options FollowSymLinks
再试。ok。
全部的.htaccess文件如下:
XML/HTML代码
- RewriteEngine on
- Options FollowSymLinks
- RewriteCond $1 !^(index\.php|images|robots\.txt)
- RewriteRule ^(.*)$ /index.php/$1 [L]
Tags: .htaccess, codeigniter
网站|PHP学习 | 评论:3
| Trackbacks:0
| 阅读:1417
Submitted by 淡水河边 on 2008, January 8, 3:03 PM
Tags: mvc
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:889
Submitted by 淡水河边 on 2008, January 8, 2:35 PM
Tags: 缓存
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:822
Submitted by 淡水河边 on 2008, January 8, 2:29 PM
Tags: 缓存
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:746
Submitted by 淡水河边 on 2008, January 2, 9:37 AM
Tags: code igniter
网站|PHP学习 | 评论:2
| Trackbacks:0
| 阅读:1069
Submitted by 淡水河边 on 2007, December 20, 7:59 PM
淡水在http://www.tsingfeng.com/show-642-1.html 里
引用:
- php建站系统,采用了tinybutstorng模板类。上个版本还使用了adodb类库。
-
- 这个版本采用utf-8编码。去除了adodb类库,小强内置了mysql的查询功能。于是效率提升了。
-
- 新闻和产品都是三级分类的。原本是要做成无限分类的,可是小强这里写不出了。还是没有php的heredoc方便啊。
-
- 进度:
- 管理员模块………………………………over
-
- 投票模块…………………………………over
-
- 留言本……………………
现在系统以及写好了,演示http://wine.aeolian.cc
功能说明:
新闻系统(3级分类,非最终类可以添加新闻)
产品系统(3级分类,非最终类可以添加产品)
产品系统集成网上销售(支持网银在线在线支付)
tinybutstrong模板引擎,方便dreamweaver等软件编辑模板
utf-8编码,支持多语言
目录式的伪静态
后台订单管理等。。。
最近不顺(车被偷,家里也失窃,损失不小,近8K),有意有价分享。
需要的联系 :himini@qq.com
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:854
Submitted by 淡水河边 on 2007, December 20, 12:16 AM
MVC 三个角色的描述:
Model - 持有资料、状态、程序逻辑,并提供界面供人取得资料与状态。
View - 用来呈现 Model 中的资料与状态。
Controller - 取得使用者的输入后,并解读此输入以转换成 Model 对应的动作。
Tags: mvc
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:781
Submitted by 淡水河边 on 2007, December 17, 9:57 PM
写文件是一个程序设计师最最痛苦的事情之一,尤其是写了一堆程序后有人要你把 Function ,Class 等等等等,写成一份文件。
这事情不管你是写 c/c++ , perl , ruby , php 都不例外。
phpDocumentor 是我们的救星! 只要在写程序的时候,乖乖的写一点注解,写一点范例,多一点说明,注意一下格式,等到程序完工后,只要一个指令,就可以立刻把全部程序的说明文件产生出 来,而且还有多种样式可以选择,甚至可以作成 PDF , CHM 喔...
好了,屁话不多说,先来说说怎么装上这好用的东西吧...
phpDocumentor 本身已经是 pear 的成员之一,所以安装的时候只要用 pear 来安装即可(以下范例为在 Windows 下进行,以后再补上 LInux 下的)
--如果你已经有装 php 跟 pear 请跳过--
首先假设我把我的的 php 安装路径在 d:\php\
也就是说我从 www.php.net 下载了最新的 php win32 安装档案,解开后放在 d:\php\
那么这个目录下面应该有 d:\php\PEAR这个目录,但是当你进去看的时候,你会发现好像没有 PEAR 相关程序库阿...
没错,这个时候你还没有安装 PEAR 请先用 go-pear.php 安装基本 pear 环境。
那么在 d:\php 目录下有一个档案,叫做 go-pear.bat 请开一个 cmd 视窗去执行他,中间会有一些问题,基本上都照预设值去跑就可以了...
跑玩后,你的 pear 应该会被安装在 d:\php\PEAR\pear 下面,而帮助你安装其他 pear 套件的 pear.bat 则在 d:\php\PEAR下面
--安使安装 phpDocumentor --
安装 phpDocumentor 的过程也很简单,只要利用 pear.bat 即可!
使用指令如下
d:\php\PEAR\pear.bat install -o PhpDocumentor
当中有多下一个 -o 的参数,意思是要 pear 把相依的套件也一起下载安装。
安装完成后 d:\php\PEAR 下面应该会多一个 phpdoc.bat 的批次档,我们就可以用这个批次档来产生我们的文件。
-- 使用 phpdoc.bat 产生文件 --
产生文件的方式我通常只有用下面一行指令解决:
d:\php\PEAR\phpdoc.bat -o HTML:Smarty:PHP -d d:\myProject\php_source\ -t d:\myProject\docs
这样子的意思是说,采用 HTML:Smarty:PHP 的样板格式,然后原始码目录在 d:\myProject\php_source\ ,接着把产生的文件放在 d:\myProject\docs 底下。
当中若是你只要对一个档案作文件的话,可以把 -d 改成 -f 然后后面接的着就是指定的档名。
样板的格式基本上有 HTML, XML, PDF, CHM 四大类别,通常我用的都是 HTML:Smarty:PHP 这个,因为他比较好看!
另外还有就是 CHM:default:default 这个.用来产生 chm 的,不过他产生出来的是 .hhp 档案,也就是还没有经过 HTML helper 编译过的档案,所以要另外安装 HTML Helper 来编译 hhp 档案就可以产生你要的档案。
-- 最后来说一下怎么写注解 --
phpDocumentor 的注解有一定的规格,但是都跟我们原来写注解的方式很像,只是要注意一下东西而已。
简单的来看个范例好了
<?php
/**
* 这里是这个物件的说明
* 可以多行喔!~
*
*/
class MyClass {
/**
* 这里是变量的说明
*
* @var int
*/
var $a ;
/**
* 这里是变量的说明.
*
* @var string 这里也可以放说明
*/
var $b ;
/**
* 这是针对函式的说明
* 也是一样可以多行
* 若是简单的范例也可以放这里
*
* @param int $a 可以放入传入的型态
* @return array 可以说明回传的型态
*/
function first ( $a ) {
return array();
}
}
?>
基本上都是在
/**
*
*/
中间写注解,别忘了每行前面要有个 * 喔!
注解比较常用到参数的应该是
@author 程序作者名称,联络方式
@const 常数
@deprecate 不建议使用的 API
@global 全域变量
@param 函数的参数
@return 回传值
@see 可参考函数
@since 开始时间
@static 静态变量
@var 物件成员变量
@todo 计划中要进行的项目
更多更详细的资料请到 http://www.phpdoc.org/ 看囉!~
PS:ZEND STUDIO 在functon前打上“/**”回车后,会智能产生注释
Tags: phpdocumentor
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1014
Submitted by 淡水河边 on 2007, December 17, 8:42 PM
使用 GetInsertSQL 和 GetUpdateSQL 产生 Update 及 Insert 的SQL指令
ADODB 的函数:GetUpdateSQL()及 GetInsertSQL()。允许你在执行了像"Select * FROM table query Where..."这样的查询函数後,建立一 个 $rs->fields复本,改变这些栏位,然後自动产生出更新或是新增的SQL指令。
以下我们展示如何运用这些函数,我们将存取一个资料表,带有下列栏位:(ID,FirstName,LastName,Created)。在这些函数被执行前,你需要藉由一个对资料表的查询指令(select)来初始化一个资料集。
GetInsertSQL()范例:
PHP代码
- #GetInsertSQL() 范例码
-
- $sql = "Select * FROM ADOXYZ Where id = -1";
- # 从资料库中查询出一个空的资料集
-
- $conn = &ADONewConnection("mysql");
- # 建立一个连结
- $conn->debug=1;
- $conn->PConnect("localhost", "admin", "", "test");
- # 连结到 MySQL, 资料库名称为 test
- $rs = $conn->Execute($sql);
- # 执行查询,并取得一个空的资料集
-
- $record = array();
- # 初始化一个阵列,以便存放记录资料供新增用
-
- # 设定记录中的栏位值
- $record["firstname"] = "Bob";
- $record["lastname"] = "Smith";
- $record["created"] = time();
-
- # 传入空的资料集及栏位资料阵列到GetInsertSQL函数中,以执行功能
- # 这个函数将会依传入的资料,回传一个全格式的 Insert SQL指令
-
- $insertSQL = $conn->GetInsertSQL($rs, $record,true);
- $conn->Execute($insertSQL);
- # 将记录挿入资料库中
$insertSQL = $conn->GetInsertSQL($rs, $record,true);
GetInsertSQL($rs, $arrFields,$magicq=false)
建立一个 SQL 以新增一笔记录到被给予的资料集 $rs。这个查询必需是在连结状态。$magicq 被用于指出魔术引号功能是否被激活
GetUpdateSQL() 范例:
PHP代码
- #GetUpdateSQL() 范例码
- $sql = "Select * FROM ADOXYZ Where id = 1";
- # 选择一笔记录以便更新
- $rs = $conn->Execute($sql);
- # 执行这个查询,并取得一个存在的记录来更新
- $record = array();
- # 初始化一个阵列,以存放要更新的资料
-
- # 设定栏位里的值
- $record["firstname"] = "Caroline";
- $record["lastname"] = "Smith";
- #更新 Caroline的姓由 Miranda 变成 Smith
-
- # 传入这个只有单一记录的资料集以及含有资料的阵列到 GetUpdateSQL函数里
- # 函数将会回传一个具有正确 Where 条件的 Update(更新) SQL 指令
- $updateSQL = $conn->GetUpdateSQL($rs, $record, false ,true);
-
- $conn->Execute($updateSQL);
- # 更新资料库中的记录
- $conn->Close();
$updateSQL = $conn->GetUpdateSQL($rs, $record, false ,true);
GetUpdateSQL($rs, $arrFields, $forceUpdate=false,$magicq=false)
建立一个 SQL 以更新一个被给予的资料集 $rs ,被修改的字段存放在数组 $arrFields中(这个数组必需是具名数组,字段名为索引,值为修正值),会与原来的资料集做一个比较,如果 $forceUpdate被设为 true,那么即使 $arrFields与 $rs->fields完全相同,也会产生出更新的SQL指令。资料集必需在连结状态。$magicq 被用于指出魔术引号功能是否被激活。
再说说,AutoExecute
还没有用 GetInsertSQL 跟 GetUpdateSQL 以前,通常都需要自己撰写相关的 SQL 去操作数据库,不免会遇到打错SQL 或是程序码中一堆 SQL 语法的问题。之后我用 adodb 的时候,通常都会跟官方文件上得范例差不多,都是用 GetInsertSQL 或是 GetUpdateSQL 产生 SQL ,然后才用 Execute 去执行该 SQL ,而GetUpdateSQL 之前还要 Select 一下数据库,取出一份该笔资料得栏位跟资料内容,所以整段程序变成有点累赘,因为一些不必要的重复的 Code 不断出现。
类似这样:
PHP代码
- $rs = $db->Execute("Select * from mytable where id = '{$id}'");
- $updateArray['name'] = 'newName';
- $UpdateSQL = $db->GetUpdateSQL($rs,$updateArray);
- $db->Execute($sql);
而比较新的版本的 adodb 则新增了 AutoExecute ,则可以大幅度减少这些无谓的程序码.
AutoExecute($table, $arrFields, $mode, $where=false, $forceUpdate=true,$magicq=false)
参数说明:
- $table 要处理的表格名称
- $arrFields 要更新或新增的栏位内容
- $mode 模式选择,内容需为 INSERT 或是 UPDATE
- $where 当模式为 UPDATE 的时候,需要输入更新条件
- $forceUpdate 一般来说预设 UPDATE 的时后,会先从数据库取出该笔资料,然后若是栏位内容没有修改,则不会进行UPDATE,只会更新有更新的栏位,若是姜此参数设定,则会强迫一律更新。
- $magicq 系统环境是否有把 magice_quotes 打开,预设是没有,所以会替你将传入的资料作 qstr
范例:
PHP代码
- $record["firstName"] = "Carol";
- $record["lasTname"] = "Smith";
- $conn->AutoExecute($table,$record,'INSERT');
- # executes "INSERT INTO $table (firstName,lasTname) values ('Carol',Smith')";
- $record["firstName"] = "Carol";
- $record["lasTname"] = "Jones";
- $conn->AutoExecute($table,$record,'UPDATE', "lastname like 'Sm%'");
- # executes "UPDATE $table SET firstName='Carol',lasTname='Jones' WHERE lastname like 'Sm%'";
从上面的范例可以发现,比起之前用 GetUpdateSQL 与 GetInsertSQL 更为简洁,且更为方便了!官方文件http://phplens.com/adodb/reference.functions.getupdatesql.html#autoexecute
Tags: adodb
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1038
Submitted by 淡水河边 on 2007, December 10, 12:09 PM
忙里偷闲,录了Tinybutstrong的视频教程,作为淡水河边php视频教程的进阶篇的部分。有需要的可以到php同盟会去下载。嗯,要30分才看得到的。
Tags: tinybutstrong
网站|PHP学习 | 评论:5
| Trackbacks:0
| 阅读:1575