ZF开发的PHP应用与传统PHP应用集成的方法

 更新时间:2016年11月25日 16:10  点击:1654



ZF开发的PHP应用与传统PHP应用集成的方法

大家知道,ZF需要将所有HTTP请求全部交由index.php(bootstrap)来处理,所以我们需要配置服务器的URL重写规则,例如Apache的httpd.conf:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^.*(.css|.js|.html|.zf|.gif|.pdf|.rar|.ppt|.chm|.png|.jpg|.jpeg)$
RewriteRule ^(/.*)$ /index.php

我们把对除了特定扩展名外的所有文件的请求都转向到index.php。

但是这样就出现了一个问题:如果我想将一个已有的PHP程序放到网站中,怎么办? 对程序的请求也都转向到index.php,显然程序无法正常工作了。

通过修改URL重写规则,我们可以解决这个问题。

例如安装discuz!论坛,我们把它装在/bbs目录下,那么我们可以这样改写rewrite规则:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^.*(.css|.js|.html|.zf|.gif|.pdf|.rar|.ppt|.chm|.png|.jpg|.jpeg)$|.*(bbs).*
RewriteRule ^(/.*)$ /index.php

注意,我们在最后加上了一个|.*(bbs).*,也就是说如果请求中有出现bbs字样就不转向到index.php,这样我们就可以访问
bbs目录下的所有文件而不会转向到/index.php了。

使用这个办法,可以方便地将ZF开发的程序和传统的PHP程序集成起来。
 

可以通过XML-RPC让不同平台的软件互相交互,我们假设用PHP做前台(客户端),Python作为服务后台,之间通过XML-RPC调用Python提供的服务。例子如下:

1、PHP客户端

 <?php
//xmlrpc_client.php
//XML-RPC客户端演示程序
require(''xmlrpc.inc'');
$xmlrpc_internalencoding=''UTF-8'';
//创建client对象, 三个参数依次为 path, hostname, port
#$s=new xmlrpc_client(''/testxml/xmlrpc_server.php'', ''localhost'', 80);
$s=new xmlrpc_client(''/'', ''localhost'', 8888);

//create xmlrpcval object, which allows the encoding of our variable
//创建xmlrpcval对象,将我们的PHP变量编码为XML-RPC需要的XML形式
#$inputString=new xmlrpcval(''world胜利'', ''string'');
$inputString = php_xmlrpc_encode(''胜利world'');

//create an array of parameters
//尽管我们只有一个参数,但仍然要转换成数组的形式,因为xmlrpcmsg的第二个参数是一个参数表
$parameters=array($inputString);

//create the message object
//创建XML-RPC报文,参数分别为 远程方法名 和 参数表
$msg=new xmlrpcmsg(''echoString'', $parameters);
//$s->request_charset_encoding = ''utf-8'';
//send the message, get the response
//发送报文,返回值$rsp为一个xmlrpcresp对象,它包含以下三个方法:
//faultCode() 出错代码,如果成功将返回0
//faultString() 出错信息
//value() 返回值,以xmlrpcval对象形式存在,PHP使用前需要进行解码
$s->debug = true;
$rsp=$s->send($msg);

//check for errors
if($rsp->faultcode()==0) {
    //decode the response to a PHP type
    //xmlrpc_decode()函数用于将xmlrpcval对象解码
    $response=php_xmlrpc_decode($rsp->value());

    //print results
    print ''<pre>'';
    var_dump($response);
    print ''</pre>'';
} else {
    //print errors
    print ''Error: ''.$rsp->faultcode().'', ''.$rsp->faultstring().''<br>'';
}

//show messages
//然后我们来查看一下报文内容
$msg->createpayload();
print ''REQUEST:<xmp>''.$msg->payload.''</xmp>'';
print ''RESPONSE:<xmp>''.$rsp->serialize().''</xmp>'';

?>

2、Python服务端

# -*- coding:GB2312 -*-
import SimpleXMLRPCServer

#定义自己的CMS类
class MyCMS:
    def getVersion(self

<

 

 



Developer Tutorials blog 今天发表了一篇文章
 
http://www.developertutorials.com/blog/web/5-ways-to-be-a-better-php-developer-36/
 
提出了做一名优秀程序员的五点建议。
 
这里,我总结出五点提高生产率,优化代码。例如:核心函数,框架,设计模式,文档格式。如下:
 
1阅读手册(PS:这个不用多说,人手一份,手册是最核心的,任何书都不能替代手册)
 
2阅读代码(阅读别人写的代码,网上有很多优秀的代码供参考,例如:SourceForge.net )
 
3学习新框架( phpframeworks.com 框架是很好,但是在学习框架前一定要打好基础。)
 
4研究(不要只看表面和应用,应该多研究原理,例如xml-rpc,rest,oop等等)
 
5学习OOP(面向对象编程)
 
 
 
 

New on the Developer Tutorials blog today is this post offering up a few ideas (five of them) on how they think you can become a better programmer.
In this post, I''ll outline five ways to be a better developer, improve your productivity, write less code and achieve more with your web applications.There''s always more to learn when it comes to PHP development. New core functions, new frameworks, new design patterns, new code documentation styles. Here are some of the best ways you can become a better PHP developer.
His five suggestions are:
  • Read the manual
  • Browse thr


  • 如果你曾为你的UNIX系统下载过widget,那么你肯定遇到过TAR压缩文件。在UNIX系统中磁带归档文件格式常用于打包多个文件,以便于分发kvm。

    这种格式的流行不仅由于在所有UNIX系统中都存在该格式的创建工具,还因为在实际应用中,它便于保存归档文件的目录结构、许可信息、用户和组信息等写字楼。

    PHP中有大量的内建函数和可连接的扩展库,可用于几乎所有文件格式。特别是笔记本维修它可以通过PEAR的Archive_Tar类读取和创建TAR文档。在本文中,我们将向你说明这个类的行为,并演示开发人员是如何利用它动态地创建,编辑和显示TAR文档。

    在这里我将假设你有一个工作数据库和安装了PHP,并且正确的安装了PEAR的Archive_Tar类。

    注:你可以直接从网上安装PEAR 的Archive_Tar类包,或者从网上下载安装。

    创建TAR文档

    让我们从一个简单的例子开始:动态创建包含几个文件的TAR文档。使用下面的脚本:
    列表 A

    <php
    include (''Archive/Tar.php'');// import class

    $obj = new Archive_Tar(''dummy.tar''); // name of archive

    $files = array(''mystuff/ad.gif'',
    ''mystuff/alcon.doc'',
    ''mystuff/alcon.xls''); // files to store in archive

    if ($obj->create($files)) {
    echo ''Created successfully!'';
    } else {
    echo ''Error in file creation'';
    }
    >

    这个脚本相当简单,但是还是值得具体看一下:

    首先,创建Archive_Tar类的一个实例,初始化创建文档的路径和文件名。在本例中,文件名是dummy.tar,存于当前目录北京电磁炉。

    其次,列出归档的所有文件,包括它们的磁盘地址,存于一个PHP数组中。脚本(更准确的说是运行脚本的用户)必须拥有访问这些磁盘地址的许可权,否则文档创建过程就会失败。

    最后,creat()方法将所有的文件压缩到单个TAR文档。这个方法接受输入的文件名数组,返回一个布尔值表明文档是否成功创建。记住脚本必须拥有将文件写入命名磁盘地址的许可权,否则,creat()方法就无法使用,文档创建就会失败华泰圣达菲。

    应用上面例子中的脚本,修改$files数组的内容以反映你的本地系统配置,在命令行或者浏览器中试着执行它,如果一切正常的话,脚本将会查找并读取这些文件到一个命名为dummy.tar的TAR文档中。

    查看TAR文档内容

    如何查看已经存在的TAR文件的内部信息呢?Archive_Tar类有一个listContent()方法,该方法可以查看一个TAR包中的每个组件的详细信息。列表B显示了如何使用它:

    列表 B
    <php
    include (''Archive/Tar.php'');// import class

    $obj = new Archive_Tar(''dummy.tar''); // name of archive

    $files = $obj->listContent();// array of file information

    foreach ($files as $f) {
    foreach ($f as $k => $v) {
    echo "$k: $vn";
    }
    echo "n";
    }
    >

    listContent()方法的输出是一个结构化数组,温度控制器每个数组元素代表文档中的一个文件。典型的是,每个元素有相应文件的名字信息,它的许可模式,所有者和组用户的ID,状态,大小和上一次修改的时间。通过一个循环可以很容易的提取这些信息,然后再对格式稍作修改使它根据表达性,像上面的例子中提到的。下面是一个输入示例:

    校验和:3872

    文件名:mystuff/alcon.doc

    模式:33206

    用户ID:433

    组ID:106

    大小:41472

    时间:1140358031

    向已经存在的TAR文档中添加文件

    由于我们大家的健忘性国内旅游,有时可能忘记某个文件,Archive_Tar 类通过add()方法提供了
    向已经存在的文档中添加新文件的能力


    安装篇(Windows平台)

        * 安装PHP环境。Zend Framework(下面简称ZF)需要PHP 5.1.4+才能正常运行。如果你已经安装了PHP环境,跳过这一步。在Win下,我推荐使用WAMP做为开发环境。只要一路next,WAMP就把Apache、PHP5、MySQL5、phpMyAdmin等都装好了。(提醒:装好后mysql用户root默认密码为空)。点击WAMP的图标在ApacheModules下开启rewrite_module。如果你要使用Zend_Db以 Mysql为例,还得开启PHP Setting->;PHPExtensions下的php_pdo和php_pdo_mysql扩展。
        * 安装TortoiseSVN。 TortoiseSVN是svn在win下的客户端。安装TortoiseSVN的目的是为了获取最新的ZF源码,如果你使用zend定期发布的zf的源码,可以跳过这一步。
        * 获取ZF源码。如果使用TortoiseSVN,在你磁盘的某处建立一个文件夹(比如ZF),在文件夹上点击右键,选择SVNcheckout,在地址栏中输入http://framework.zend.com/svn/framework/trunk,点击确定,TortoiseSVN就开始工作获取zf的源码了。你也可以http://framework.zend.com/download下载源码。不过总得来说,还是使用SVN方便。
        * 为ZF添加路径。编辑php.ini(wamp的php.ini在apache/bin目录下),编辑include_path字段(举例include_path = ".;G:你的ZF路径library")。
        * 配置ZF项目。推荐使用Haohappy的方法http://www.111cn.net/bbs/thread-5730-1-4.html。
        * 开始旅程。推荐论坛里的xgwork的新手学习 Zend Framework 框架连载(因为上一步中已经为ZF添加了路径,所以在该教程中的set_include_path可以省略),还有IBM的《理解Zend Framework》系列。

    Apache的配置:

    编辑httpd.conf文件
    找到
    #LoadModule rewrite_module modules/mod_rewrite.so 这行并将前面的”#”去掉

    最后找到
    AllowOverride None
    更改为:
    AllowOverride All,才能让/htaccess文件起作用
    到此Apache的配置完成

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23
  • mysql锁定单个表的方法

    mysql锁定单个表的方法 复制代码 代码如下:mysql>lock table userstat read; mysql>unlock tables; 页级的典型代表引擎为BDB。 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。 行级的典型代表引擎为INN...2014-05-31