浏览模式: 标准 | 列表分类:网站|PHP学习

.htaccess 问题

摸索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代码
  1. FollowSymLinks   
  2. The server will follow symbolic links in this directory.    
  3. Even though the server follows the symlink it does not change the pathname used to match against <Directory> sections.   
  4. Note also, that this option gets ignored if set inside a <Location> section.  

因此,我们需要在.htaccess中进行设定:Options FollowSymLinks

再试。ok。

全部的.htaccess文件如下:

XML/HTML代码
  1. RewriteEngine on   
  2. Options FollowSymLinks   
  3. RewriteCond $1 !^(index\.php|images|robots\.txt)   
  4. RewriteRule ^(.*)$ /index.php/$1 [L]  

Tags: .htaccess, codeigniter

简单的单入口MVC的实现

还是从咕噜咕噜搬来的.

» 阅读全文

Tags: mvc

通过php缓存你的页面

就是上一篇文章的来源了.

» 阅读全文

Tags: 缓存

PHP一个小巧的缓存类

Tags: 缓存

Code Igniter 方法备忘

元旦过了,该收心了。学习

» 阅读全文

Tags: code igniter

关于“php企业建站系统重写进度”

淡水在http://www.tsingfeng.com/show-642-1.html

引用:
  1. php建站系统,采用了tinybutstorng模板类。上个版本还使用了adodb类库。   
  2.   
  3. 这个版本采用utf-8编码。去除了adodb类库,小强内置了mysql的查询功能。于是效率提升了。   
  4.   
  5. 新闻和产品都是三级分类的。原本是要做成无限分类的,可是小强这里写不出了。还是没有php的heredoc方便啊。   
  6.   
  7. 进度:   
  8. 管理员模块………………………………over   
  9.   
  10. 投票模块…………………………………over   
  11.   
  12. 留言本……………………

现在系统以及写好了,演示http://wine.aeolian.cc

功能说明:

新闻系统(3级分类,非最终类可以添加新闻)

产品系统(3级分类,非最终类可以添加产品)

产品系统集成网上销售(支持网银在线在线支付)

tinybutstrong模板引擎,方便dreamweaver等软件编辑模板

utf-8编码,支持多语言

目录式的伪静态

后台订单管理等。。。

最近不顺(车被偷,家里也失窃,损失不小,近8K),有意有价分享。

需要的联系 :himini@qq.com

web MVC模式

MVC 三个角色的描述:
Model - 持有资料、状态、程序逻辑,并提供界面供人取得资料与状态。
View  - 用来呈现 Model 中的资料与状态。
Controller - 取得使用者的输入后,并解读此输入以转换成 Model 对应的动作。

Tags: mvc

安装与使用PhpDocumentor

写文件是一个程序设计师最最痛苦的事情之一,尤其是写了一堆程序后有人要你把 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

Adodb 的 GetInsertSQL 和 GetUpdateSQL以及AutoExecute

使用 GetInsertSQL 和 GetUpdateSQL 产生 Update 及 Insert 的SQL指令

ADODB 的函数:GetUpdateSQL()及 GetInsertSQL()。允许你在执行了像"Select * FROM table query Where..."这样的查询函数後,建立一 个 $rs->fields复本,改变这些栏位,然後自动产生出更新或是新增的SQL指令。

以下我们展示如何运用这些函数,我们将存取一个资料表,带有下列栏位:(ID,FirstName,LastName,Created)。在这些函数被执行前,你需要藉由一个对资料表的查询指令(select)来初始化一个资料集。

GetInsertSQL()范例

PHP代码
  1. #GetInsertSQL() 范例码    
  2.   
  3. $sql = "Select * FROM ADOXYZ Where id = -1";     
  4. # 从资料库中查询出一个空的资料集    
  5.   
  6. $conn = &ADONewConnection("mysql");     
  7. # 建立一个连结    
  8. $conn->debug=1;    
  9. $conn->PConnect("localhost""admin""""test");    
  10. # 连结到 MySQL, 资料库名称为 test    
  11. $rs = $conn->Execute($sql);     
  12. # 执行查询,并取得一个空的资料集    
  13.    
  14. $record = array();    
  15. # 初始化一个阵列,以便存放记录资料供新增用    
  16.    
  17. # 设定记录中的栏位值    
  18. $record["firstname"] = "Bob";    
  19. $record["lastname"] = "Smith";    
  20. $record["created"] = time();    
  21.     
  22. # 传入空的资料集及栏位资料阵列到GetInsertSQL函数中,以执行功能    
  23. # 这个函数将会依传入的资料,回传一个全格式的 Insert SQL指令    
  24.     
  25. $insertSQL = $conn->GetInsertSQL($rs$record,true);
  26. $conn->Execute($insertSQL);
  27. # 将记录挿入资料库中
$insertSQL = $conn->GetInsertSQL($rs, $record,true);

GetInsertSQL($rs, $arrFields,$magicq=false)
建立一个 SQL 以新增一笔记录到被给予的资料集 $rs。这个查询必需是在连结状态。$magicq 被用于指出魔术引号功能是否被激活

GetUpdateSQL() 范例:
PHP代码
  1. #GetUpdateSQL() 范例码
  2. $sql = "Select * FROM ADOXYZ Where id = 1";   
  3. # 选择一笔记录以便更新  
  4. $rs = $conn->Execute($sql);   
  5. # 执行这个查询,并取得一个存在的记录来更新  
  6. $record = array();   
  7. # 初始化一个阵列,以存放要更新的资料  
  8.   
  9. # 设定栏位里的值  
  10. $record["firstname"] = "Caroline";  
  11. $record["lastname"] = "Smith";   
  12. #更新 Caroline的姓由 Miranda 变成 Smith  
  13.   
  14. # 传入这个只有单一记录的资料集以及含有资料的阵列到 GetUpdateSQL函数里  
  15. # 函数将会回传一个具有正确 Where 条件的 Update(更新) SQL 指令  
  16. $updateSQL = $conn->GetUpdateSQL($rs$record, false ,true);  
  17.   
  18. $conn->Execute($updateSQL);   
  19. # 更新资料库中的记录  
  20. $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代码
  1. $rs = $db->Execute("Select * from mytable where id = '{$id}'");  
  2. $updateArray['name'] = 'newName';  
  3. $UpdateSQL = $db->GetUpdateSQL($rs,$updateArray);   
  4. $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代码
  1. $record["firstName"] = "Carol";  
  2. $record["lasTname"] = "Smith";   
  3. $conn->AutoExecute($table,$record,'INSERT');  
  4. # executes "INSERT INTO $table (firstName,lasTname) values ('Carol',Smith')";  
  5. $record["firstName"] = "Carol";  
  6. $record["lasTname"] = "Jones";   
  7. $conn->AutoExecute($table,$record,'UPDATE', "lastname like 'Sm%'"); 
  8. # 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

Tinybutstrong的视频教程

忙里偷闲,录了Tinybutstrong的视频教程,作为淡水河边php视频教程的进阶篇的部分。有需要的可以到php同盟会去下载。嗯,要30分才看得到的。

Tags: tinybutstrong

Records:25812345678910»