Drupal目录结构说明与开发技巧

2013/09/06 | 星期五 分类:资源 | 没有评论 标签: | 作者: | 1,504 views

1.Drupal系统文件夹中每一项的细节如下:

include目录包含Drupal使用的库和公共函数;

misc目录存储Drupal安装时使用的javascript和杂项的图标、图片。

modules目录包含核心模块,里面的每个模块都有一个自己的目录。别往里加任何东西,或任何其他目录,除了profiles和sites,你应该将扩展模块加到sites目录。

profiles目录中包含了不同的站点安装profile。

scripts目录包含检查语法、清理代码、命令行运行Drupal、处理cron特别情况、运行测试包(D7)等所需要的脚本。这个目录不在drupal请求生命周期内使用,它们是shell及perl实用脚本。
1-5

sites目录(图1-5)包含了你在设置表单中对设置、主题、模块的修改。当你从贡献模块仓库或写一个模块时,你应当将它们加入到-sites/all/modules中,这是保存所有你的Drupal变更的单独目录。在sites目录中有一个名叫default的子目录,保存一个你的Drupal站点默认的配置文件default.settings.php,Drupal安装器将在你提供的信息基础上修改这些初始设置并且为你的站点生成一个settings.php文件,默认的目录是典型地拷贝并重命名为你的站点的URL,你最终的设置文件将是sites/www.example.com/settings.php。
sites/default/files目录包含Drupal默认基本安装信息,它需要用来存储那些上传到你的站点以备后用的任何文件。一些例子是用来存放用户logo,激活用户头像或其他上传的媒体文件。这些子目录需要drupal运行的服务器的可读可写的权限,如果有权限,Drupal安装器将创建子目录。此外sites/default/files,一个sites/default/private目录可能建立用来存储比较敏感的和不应展示的文件,除非有适当的证明。你可以通过浏览Configuration>FileSystem并进入你想保存私有文件的方式来创建私有文件目录,文件路径就是标题是Private的文本域的文件系统路径。

themes目录包含模板引擎和Drupal默认的主题,你下载的和创立的附加主题不应该放在这里,将它们放到sites/all/themes中。

cron.php用来执行周期性的任务,例如修剪数据库表和计算统计等。
index.php是服务请求的主入口点。
install.php是Drupal安装器的主入口点。
update.php在Drupal版本更新后更新数据库关系模式。
xmlrpc.php接收XML-RPC请求,不打使用XML-RPC时可以从部署中删除。
robots.txt默认的机器人排除规则。
authorize.php运行授权文件操作的管理脚本,例如从drupal.org下载并安装一个新的主题或模块。

2.服务一个请求
对于Drupal接收到一个请求时发生了什么有个概念上的框架非常有帮助。如果你要自己跟踪,那么使用一个好的debugger,在index.php处开始,它接收大多数它的请求。这个序列对于显示简单网页来说比较复杂,但它具有普遍的灵活性。

3.web服务器规则
Drupal运行于web服务器之上,通常是Apache。如果web服务器遵循Drupal的。.htaccess文件,有些PHP这是初始设置的,并且URL是被检查的。差不多所有对Drupal的调用都是通过index.php,例如一个到http://example.com/foo/bar的调用经历下列流程:
a.Drupal的.htaccess文件的mod_rewrite规则查看送入的URL并从路径中分离出基本URL,本例中,路径是foo/bar。
b.路径被指派为URL请求操作符q的参数、
c.结果URL是http://example.com/index.php?q=foo/bar。
d.Drupal像内部路径一样处理foo/bar并且交由index.php开始处理。
如同这个处理结果,Drupal精确地一同样方式处理http://example.com/index.php?q=foo/bar和http://example.com/foo/bar,因为这两种情况内部路径相同,这可以使Drupal不使用怪异的URL字符,而使用Clean URL。

在作为替代的其它web服务器,如微软的IIS,clean URL可以使用ISAPI模块像ISAPI重写那样取得。IIS 7 和后面版本支持直接重写。如果你的站点运行于IIS7或更高版本,你应当校验用于激活clean URL的web.config文件,并且使它不能被窥探到,像.install, .module, .test, .theme, .profile, .info和.inc 文件一样。
阅读全文

subversion权限控制

2013/09/03 | 星期二 分类:资源 | 没有评论 标签: | 作者: | 1,231 views

假设svn仓库目录是/var/local/svn/trunk
##启动subversion
# svnserve -d -r /var/local/svn/trunk
# vim /var/local/svn/trunk/conf/svnserve.conf
##找到:
anon-access = none
auth-access = write
##将上两行前面的注释去掉,并将read 改为:none.
##即anon-access = none 表示匿名登陆下的用户权限为空。即:系统不支持匿名登陆
##若anon-access = read 则匿名登陆下只读文件,即:文件修改后无法提交到服务器
##通过验证的用户可以读和写
##用户保存文件,密码保存文件,找到如下两行,并去掉注释
password-db = password
authz-db = authz
##权限管理文件这个是非常重要的,如果我们要对整个工程的文件进行权限分配的时候,就必须将这个行文件前面注释掉,否咋即使我们在权限配置文件里面进行再多的配置都是无效的
:wq 保存退出

##设置subversion用户权限,权限只有”rw=读写”,”r=读”
# vim /var/local/svn/trunk/conf/authz
[/]
jacking = rw
paddy = rw
##表明用户”jacking paddy”拥有全部权限
[/zip]
zip = rw
##表明用户”zip”对于”/zip”目录,他有rw的权限。
##在权限分配的时候要注意的问题:.
>>>对某个用户,如果只赋给他某个目录的权限,但对上级目录没有赋给,则他不能有上级目录的任何权限比如”zip”用户
>>>对于所有的目录,都优先处理设置在这个目录上的权限设置。
##例如sai用户:
[/repository]
sai = rw
[/repository/project1]
sai = r
##对于repository下的project1目录,他只有r权限。则,这个sai用户只有project1的r权。而repository下其他目录有rw权。
>>>权限分配,只可以分配到某个目录,而不能到某个文件
>>>如果某个目录上没有对某个用户设置权限,则一直向上级目录查找,看是否有权限
##例如sai用户
[/repository]
sai=rw
[/repository/project1]
saiya=rw
##则sai用户一样拥有/repository/project1的读写权限
>>>分配权限时,= 的左边为用户,不能想当然的以,号分开加入多个用户
>>>如果想设置某用户都没有rw的权限,只要 = 号的右边这空即可
>>>如果某一个文件夹,对于人任何用户都没有权限
* =
##其中*代表所有的人

##关于用户组的问题,设置权限类似用户
# vim /var/local/svn/trunk/authz
[groups]
admin = admin,sally
user = seed,joe,hurry
##groups是指用户组,上面的配置说明存在两个组:admin和user,其中admin组中有两个用户admin & sally,而user中有三个用户seed & joe & hurry
##设置组的权限,类似用户
[/]
@admin = rw
@user = r
##与普通用户不同的是,前面加上”@”符号
:wq 保存退出

##设置subversion用户密码
# vim /var/local/svn/trunk/conf/
##对用户设置密码,比如上面所列到的5个用户的密码都设置为”123456“.
[users]
jacking = 123
paddy = 123456
zip = 123456
sai = 123456
saiya = 123456
:wq 保存退出

PHP开发Cakephp框架MongoDB数据库

2013/05/14 | 星期二 分类:资源 | 没有评论 标签: , | 作者: | 1,511 views

在一个全新的工作环境下,使用PHP开发Android(安卓)应用。

项目组选择Cakephp,众多PHP开发框架中的一个,使用过其他框架比如:Yii Zend Framework Codeilgniter Thinkphp之一者,上手并不是很难,就不再细说了。

应用:在许多场景下使用MongoDB替代传统的关系型数据库或键/值(key-value)存储方式,目前公司项目就用这个存储。
MongoDB非常适合实时的插入,更新与查询,PHP操作起来特别方便快速,易于上手;对于Mongo更多的功能待续学习与发掘。

NoSQL,指的是非关系型的数据库(NoSQL = Not Only SQL 不仅仅是SQL) 2009年开始迅速发展起来的非关系型的数据存储。而本人有幸在新公司中使用这个NoSQL 之 MongoDB存储数据的应用开发。

人对新鲜的事物,内心总是充满着好奇,并为之寻求探索。

MongoDB百度百科是这样描述的:
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的;
MongoDB支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型;
MongoDB最大的特点是支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

由于学习MongoDB,必须要了解NoSQL相关知识,先记下如下知识点:

1.High performance – 对数据库高并发读写的需求;
2.Huge Storage – 对海量数据的高效率存储和访问的需求;
3.High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求;
4.数据库事务一致性需求;
5.数据库的写实时性和读实时性需求;
6.对复杂的SQL查询,特别是多表关联查询的需求。

总之:新技术的出现都是为了解决某一领域的特定需求。

NoSQL特点:
1.可以处理超大量的数据;
2.运行在便宜的PC服务器集群上;
3.击碎了性能瓶颈;
4.没有过多的操作;
5.Bootstrap支持(项目开源,社区中寻求支持)。

NoSQL优点:1.易扩展;2.大数据量,高性能;3.灵活的数据模型;4.高可用。
NoSQL缺点:1.没有正式的官方支持,万一出了差错会是可怕的;2.并未形成一定标准,各种产品层出不穷,内部混乱,各种项目还需时间来检验。

RESTful是什么?RESTful Web Service

2013/05/11 | 星期六 分类:资源 | 没有评论 标签: | 作者: | 1,828 views

五月份去新公司上班了,是一家云相关的企业。在新公司需要快速掌握的三种之前工作中没接触的技术:RESTful,Nosql,node.js 稍后将学习笔记简单的做下记录…

这篇文章先来介绍下:什么是RESTful,它到底是什么?

百度百科解释让人云里云外的,仅有那么丁点感觉:http://baike.baidu.com/view/5798116.htm
Google搜索了很多,看到这个基本靠谱:一般说RESTful都是指RESTful Web Service 浅显点说,REST/RESTful大概就是以下的实现步骤

1.用URL/URI来表示Object 例如 http://www.example.com/order/10000 来表示一个订单。.

2.用标准的HTTP协议来完成逻辑操作,通常有以下几个对应 HTTP Get 来获得一个订单的内容,HTTP Put 来更新一个订单, HTTP Post 来新增一个订单, HTTP Delete 来删除一个订单。

3.无状态,一般指的是服务器端不保留任何操作和事务的状态,也就不存在类似回滚的操作。

一般来说RESTful适合逻辑标记清晰的Web服务,交换数据一般用xml json yaml这种,另外像Java有更详细的Restful标准JAX-RS。

分布式缓存与Memcached相关问题

2013/03/26 | 星期二 分类:资源 | 没有评论 标签: , | 作者: | 1,319 views

分布式缓存从几方面说明:1.缓存本身的水平线性扩展问题,2.缓存大并发下的本身的性能问题,3.避免缓存的单点故障问题(多副本和副本一致性)。

分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制。其次是分布式管理和分布式算法,其次是缓存键值管理和路由。

什么是Memcached?

  1. 许多Web 应用程序都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大,访问的集中,就会出现REBMS的负担加重,数据库响应恶化,网站显示延迟等重大影响。Memcached是高性能的分布式内存缓存服务器。一般的使用目的是通过缓存数据库查询结果,减少数据库的访问次数,以提高动态Web 应用的速度、提高扩展性。如图:

1 阅读全文