存档

‘PHP相关’ 分类的存档

浅谈大型网站动态应用系统

2010年9月3日

动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。

大型动态应用系统平台主要是针对于大流量、高并发网站建立的底层系统架构。大型网站的运行需要一个可靠、安全、可扩展、易维护的应用系统平台做为支撑,以保证网站应用的平稳运行。

大型动态应用系统又可分为几个子系统:

1)Web前端系统

2)负载均衡系统

3)数据库集群系统

4)缓存系统

5)分布式存储系统

6)分布式服务器管理系统

7)代码分发系统

阅读全文…

Frank Linux/Unix相关, Network/Servers相关, PHP相关, SNS社区 ,

轻易在zend studio for eclipse中获得一个黑暗主题

2010年8月20日

嘿嘿!自从zend studio 6以后,其色彩配置一直都是一个噩梦,抛弃了zend studio 5.5的主题选项以后,让我们得到一个理想颜色的界面显得困难。今天就给大家呈现一个非常简单但是却非常好看的黑暗主题(dark theme),看图!

在我看来,这和NetBeans的Norway Today主题有些类似,非常养眼,非常环保,非常低碳,非常省电。。。。。那么这是怎么做到的呢?

咳咳,非常简单,因为有前辈帮助我们定制好了颜色搭配,因此,我们要做的仅仅是导入。导入步骤如下:
1、下载附件(点击这里下载),解压,得到一个epf文件
2、打开Zend Studio
3、从菜单:File| Import,然后选择General|preferences,Next,选择那个刚刚下载的epf文件,Import All,点击Finished.
4、大功告成,你就能得到和图中一样的主题啦.BTW:如果和图中的颜色有些出入,建议重启Zend Studio.

是的,一切就是这么简单!话说,Zend Studio准备什么时候出主题功能啊?最新版的zend studio 8.0我还没有下载来看,最近在忙一些自己的事情,时间不多,这不,趁中午上来水一个!

文中提到的附件在这里:dark-theme

注意注意:由于导入完之后,修改回来原先的默认主题比较麻烦,因此在导入本主题之前,强烈建议您导出一份原来的配置作为备份

Frank PHP相关 ,

面向 PHP 开发人员的 CouchDB 基础知识[转]

2010年6月23日

CouchDB又一种关系数据库.

如果您是位典型的 PHP 开发人员,就不难通过以往的项目得到这样一个结论:在多数(如果不是全部)情况下,为了进行动态数据处理,您都会让 PHP 与数据库后端进行对话;而在这些实例中,99% 的情况下使用的都是 MySQL。

如今,使用关系型数据库无可厚非。如果所处理的数据结构复杂,并具有多种关系,那么这么做是很合理的。您可以顺利地(或是不太顺利地,取决于 您对 SQL 的熟悉程度)进行对模式、数据关系、表等等的处理。

不过,您所从事的项目有时也会让您不经意间心生疑问:“为什么我要做所有这些工作?” 您所从事的这个项目包含了一些简单的或难以预测的数据 — 在不同的日子获得的数据字段可能不同甚至事务之间的数据字段都不尽相同。若是创建一个模式来预测将会出现什么数据字段,结果很可能会得到内含大量空字段的 表或大量的映射表。

常用缩略语

  • Ajax:异步 JavaScript + XML
  • API:应用程序编程接口
  • GUID:全局惟一标示符
  • HTTP:超文本标记语言
  • JSON:JavaScript 对象注释
  • REST:具象状态传输
  • SQL:结构化查询语言
  • UUID:通用惟一标识符

对于这些项目,您需要采用一种不同的方式 — 不涉及关系型数据库。在这些情况下,您需要的是一个基于文档的、没有模式的、具有扁平地址空间的特别数据库。简言之,您需要 Apache CouchDB。

阅读全文…

Frank Database相关, PHP相关

好东东与大家分享…

2010年6月17日

最近又回到在Ubuntu下开发,发现Zend的支持实在太差劲,问题一堆,用起来影响心情,就Go了一把,无意中发现几个好东东, 个人感觉不错,有兴趣的朋友下载试试.

1. 一个轻量级的PHP IDE工具,安装后简单使用了下,感觉 不错。

Dev-php,比起Editplus在开发的时候要强,当然各有强项,大小安装后2M多点,可惜只能在Window下用。

2. 一个集成环境套件,这个套件不同一般的套件,是需要自己来编译的(一键搞定),用它自带的“脚本bash”安装,目前只发现支持Linux, 名称:Lnmpp

3. 一个代码在线编辑器(无需安装,浏览器运行),可创建工程,可连接FTP {Ajax的操作页面,有点像EXTjs}。

地址:http://phpanywhere.net/

下载:devphp2_4_0_338

Frank Linux/Unix相关, PHP相关 , ,

又拍网架构中的分库设计[转]

2010年6月15日

又拍网是一个照片分享社区,从2005年6月至今积累了260万用户,1.1亿张照片,目前的日访问量为200多万。5年的发展历程里经历过许多起伏,也积累了一些经验,在这篇文章里,我要介绍一些我们在技术上的积累。

又拍网和大多数Web2.0站点一样,构建于大量开源软件之上,包括MySQLPHPnginxPythonmemcachedredisSolrHadoopRabbitMQ等等。又拍网的服务器端开发语言主要是PHPPython,其中PHP用于编写Web逻辑(通过HTTP和用户直接打交道), 而Python则主要用于开发内部服务和后台任务。在客户端则使用了大量的Javascript, 这里要感谢一下MooTools这个JS框架,它使得我们很享受前端开发过程。 另外,我们把图片处理过程从PHP进程里独立出来变成一个服务。这个服务基于nginx,但是是作为nginx的一个模块而开放REST API。

阅读全文…

Frank Database相关, Linux/Unix相关, PHP相关

通用权限系统设计[转]

2010年4月21日

通用权限系统设计是更换权限时候尽量不要涉及到代码修改

/*
03	*控制访问表
04	*  acl值    功能
05	*    1        需要登录
06	*    2         自身修改
07	*    4         需要组的权限集合
08	*    8         需要身份访问集合
09	*    16         身份被禁止访问
10	*    32         可访问的日期
11	*    64         可访问的周日
12	*    128         可访问的<span class="t_tag" onclick="tagshow(event)">时间</span>
13	*    256         输入密码才能访问
14	*    512         超级管理使用
15	*/
class aclACL extends acl {
    public $routername="acl";
    public $aclid='2';            //权限资源ID,如果登录人员没有拥用这个权限那么其(下面)它值都为0也不能访问
    public $roledisable=array(9); //禁用身份
    public $pwd=123456;           //密码访问 ACL-&gt;noPwd();
    public $date=array('begin'=&gt;0,'end'=&gt;0);   //允许日期之间
    public $hours=array('begin'=&gt;0,'end'=&gt;0);  //一日内小时区间
    public $weeks=array('begin'=&gt;0,'end'=&gt;0);  //一周内周一到周七
    public $aclgroup=array("create"=&gt;"4,45,8"); //create需要的组才能创建
    public $aclrole=array("all"=&gt;"6","create"=&gt;"7,95,78"); //create需要的角色才能创建,该组需要ID为6的角色才能访问
    public $acl=array("all"=&gt;0,
                      "index"=&gt;4,    //表列4表示检查组的组合
                      "delete"=&gt;1,   //删除只登录后删除,当然呆以设置为2或4
                      "update"=&gt;1,   //更新提交只能登录后才能更新,在这里做也防止非法、<span class="t_tag" onclick="tagshow(event)">post</span>,edit是不能访问显示编辑内容页
                      "createForm"=&gt;1, //也不能新提交<span class="t_tag" onclick="tagshow(event)">数据库</span>
                      "edit"=&gt;0,       //登录才显示编辑框
                      "show"=&gt;0,       //不用登录也能显示
                      "create"=&gt;1);    //创新表单需要登录操作 可以设置某个组才能创建 
 
}  
 
?&gt;

这个是要认证的文件模块是acl 每当用户访问acl模块时候,如果开启了认证那么会调用这个类 然后这个类会根据$acl 的all或index等值去做认证检查。 把这个文件放在router/acl目录里面就可以了,框架会自动认证如果用户没有相应的正向授权是无法访问相 应的限制的。 比如crud create方法 负向权限为17 那按照前面解释应该是 需要登录和组授权 就是$aclgroup 数组中create的4 45 8三个组, 首先会员没有登录将提示登录,如果会员不在这三个组是无法访问该方法的会提示没有权限。 目前router可以自己根据情况开启用acl控制 方法是在xxxxRouter.class.php文件中 添加 public function isAcl(){} 可以返回权限文件名比如返回curd,那么自动会调用curdACL.class.php类和名 curdRouter类设置验证


&lt;?php
class curdRouter extends controller{ 
 
    //返回 RBAC 控制访问列表验证类默认是跟router同名也就是curd
    //可以不写这个&lt;span href="tag.php?name=%BA%AF%CA%FD" onclick="tagshow(event)" class="t_tag"&gt;函数&lt;/span&gt;,那么不会启用通用权限系统。
    public function isAcl(){}
    public function index()
    {
       $booktype=M("booktype");
       $this-&gt;pager=C("pager");//取得分类
       $this-&gt;pager-&gt;setPager($booktype-&gt;count(),10,'page');//取得&lt;span href="tag.php?name=%CA%FD%BE%DD" onclick="tagshow(event)" class="t_tag"&gt;数据&lt;/span&gt;总数中,设置每页为10
       $this-&gt;assign("list",$booktype-&gt;orderby("bookid desc")-&gt;limit($this-&gt;pager-&gt;offset(),10)-&gt;fetch()-&gt;getRecord());
    }
 public function login(){  //登录&lt;span href="tag.php?name=%D2%B3%C3%E6" onclick="tagshow(event)" class="t_tag"&gt;页面&lt;/span&gt;
 
  }
  public function logout(){ //退出页面
 
      MY()-&gt;logout(); //退出登录
     redirect(url_for("guestbook/index"),"退出成功",3);
  }
  public function noAcl($mask) { //处理一下如果没有权限转向登录
      redirect(url_for("guestbook/login"),"需要登录",3);
  }
  public function loginpost() {  //登录提交地方 简单处理下登录认证
      if($_POST['author']=='queryphp'&amp;&amp;md5($_POST['pwd'])==md5('123456'))
    {
      MY()-&gt;setLogin(); //设置登录状态
      redirect(url_for("guestbook/adminlist"),"登录成功",3);
    }
    redirect(url_for("guestbook/login"),"登录失败",3);
  }
 
/////////////////////////////////////////////
缓存数据,登录时候恢复。
*/
 class mybase {
  public $options=array();
        public $uid;
  public $username;
  public $isadmin;
  public $role=array();  //我使用的身份
  public $group=array(); //我所在组
  public $grouprole=array(); //组的身份
  public $mygroupMar=array(); //我拥有管理的组
  public $mygroupOwn=array(); //属于我的组
  public $acl=array();       //主动控制表 groupacl和myacl控制权限集合 内容是rbac的rbacid
  public $groupacl=array();  //组拥用的控制权限
  public $myacl=array();     //我的身份拥用的控制权限
  public $loginfaild=0;      //登录失败次数 如果超过这个数应该禁止IP登录几分种
 
////////////////////////////////////////
//这是基本可以把myUser.class.php放在项目lib目录里面
////////////////////////////////////////

使用MY()函数就可以取得myUser了。


下载测试例子和chm手册
http://code.google.com/p/queryphp/downloads/list

原文

Frank Database相关, PHP相关

Linux下安装缓存服务器Redis

2010年4月16日

在缓存服务器中知名的Memcache大家都知道, Redis是一个key-value键值对高性能的缓存数据库, 它的速度相对Memcache快很多, 提供了Python, Ruby, Php的客户端, 今天安装了它, 将过程记录下来.

Redis 的写入和读取性能相当不错,在一台主流配置的 1U Linux 服务器上,基本可以达到 11 万次每秒的写入和 8.1 万次的读取。能够取得这样的性能是因为 Redis 在运行时会把整个数据集都放在内存中进行操作,通过定时或不定时的方式将数据写到磁盘。(引用网友, 本人未作证明测试)

这里我以PHP使用Redis的安装过程.

一. 准备工作

下载相关文件

Redis:http://code.google.com/p/redis/ (服务端)
Rediska:http://rediska.geometria-lab.net/ (客户端)
Rediska Document:http://rediska.geometria-lab.net/documentation (文档)

本站下载: redis-1.2.6.tar.gzrediska-0-4-0.zip

用下面的命令把最新版的Rediska下载到/usr/share/php/目录(可指定目录)下:
cd /usr/src
[ -d Rediska ] || git clone git://github.com/Shumkov/Rediska.git
cd Rediska && git pull && rsync -a ./library/ /usr/share/php/

阅读全文…

Frank Network/Servers相关, PHP相关 ,

PHP的Web爬虫和搜索引擎 PhpDig

2010年4月6日

PhpDig是一个采用PHP开发的Web爬虫和搜索引擎。通过对动态和静态页面进行索引建立一个词汇表。当搜索查询时,它将按一定的排序规则显示包含关 键字的搜索结果页面。PhpDig包含一个模板系统并能够索引PDF,Word,Excel,和PowerPoint文档。PHPdig适用于专业化更 强、层次更深的个性化搜索引擎,利用它打造针对某一领域的垂直搜索引擎是最好的选择。

本站下载:phpdig-189-rc1

源下载:http://www.phpdig.net/download.php?digfile=phpdig-1.8.9-rc1.zip

Demo: http://www.phpdig.net/navigation.php?action=demo

Frank Network/Servers相关, PHP相关 , ,

Window下安装Xdebug

2010年3月3日

下载地址:http://www.xdebug.org/files/php_xdebug-2.1.0beta3-5.3-vc6.dll (目前最新版本)

我的环境是:windows xp, Apache 2.2.4, PHP 5.3.1, MySQL 5.1.43

然后打开php.ini文件,我的配置如下:
[Xdebug]
zend_extension_ts=”d:/php/ext/php_xdebug.dll”
xdebug.auto_trace=on
xdebug.collect_params=on
xdebug.collect_return=on
xdebug.trace_output_dir=”d:/xdebug”
xdebug.profiler_enable=on
xdebug.profiler_output_dir=”d:/xdebug”

注意其中的路径改成的你自己的路径.

必须建立Debuginfo目录c:/xdebug,否则不会才能生成文件, zend_extension_ts必须是完整路径才有效

假如php版本PHP Version 5.2.5 所以要下载的是php_xdebug-2.0.3-5.2.5.dll 或者php_xdebug-2.0.2-5.2.5.dll 版本 这样版本要对应.

阅读全文…

Frank PHP相关, 文章 ,

实现业务系统中的用户权限管理–设计篇

2010年2月9日

B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检 测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中 的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非 法用户”将会将他们彻底的“拒之门外”。下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统。

需求陈述

  • 不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。

  • 可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。

  • 权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。

  • 满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。

阅读全文…

Frank Database相关, PHP相关, 文章 , ,