php mvc开发实例详解(1/3)

 更新时间:2016年11月25日 16:26  点击:1785
<?php教程
include("core/ini.php");
initializer::initialize();
$router = loader::load("router");
dispatcher::dispatch($router);

这个文件就只有4句,我们现在一句句来分析。
include(”core/ini.php”);

我们来看core/ini.php

<?php
set_include_path(get_include_path() . path_separator . "core/main");
//set_include_path — sets the include_path configuration option
function __autoload($object){
require_once("{$object}.php");
}

这个文件首先设置了include_path,也就是我们如果要找包含的文件,告诉系统在这个目录下查找。其实我们定义__autoload()方法,这个方法是在php5增加的,就是当我们实例化一个函数的时候,如果本文件没有,就会自动去加载文件。官方的解释是:
接下来我们看下面一句
initializer::initialize();
这就话就是调用initializer类的一个静态函数initialize,因为我们在ini.php,设置了include_path,以及定义了__autoload,所以程序会自动在core/main目录查找initializer.php.
initializer.php文件如下:

<?php
class initializer
{
public static function initialize() {
set_include_path(get_include_path().path_separator . "core/main");
set_include_path(get_include_path().path_separator . "core/main/cache");
set_include_path(get_include_path().path_separator . "core/helpers");
set_include_path(get_include_path().path_separator . "core/libraries");
set_include_path(get_include_path().path_separator . "app/controllers");
set_include_path(get_include_path().path_separator."app/models");
set_include_path(get_include_path().path_separator."app/views");
//include_once("core/config/config.php");
}
}
?>

这个函数很简单,就只定义了一个静态函数,initialize函数,这个函数就是设置include_path,这样,以后如果包含文件,或者__autoload,就会去这些目录下查找。

ok,我们继续,看第三句

$router = loader::load(”router”);

简介:

memcached是一个高性能的、分布式内存对象缓存系统。通常被用于降低数据库教程加载压力以提高动态web应用的响应速度。

此扩展使用了libmemcached库提供的api与memcached服务端进行交互。它同样提供了一个session处理器(memcached)。 它同时提供了一个session处理器


关于libmemcached的更多信息可以在http://libmemcached.org/libmemcached.html查看。

memcache 需求:

这个扩展需要libmemcached客户端库。

memcache 安装:

安装此 pecl 扩展相关的信息可在手册中标题为 pecl 扩展的安装 章节中找到。另外的信息,如新的发行版本、下载、源文件、 additional information such as new releases,维护人员信息及变更日志等,都在此处:http://pecl.php教程.net/package/memcached.

如果libmemcached被安装在一个非标准路径,使用--with-libmemcached-dir=dir 来指定路径,dir就是libmemcached安装时的prefix参数。这个路径需要包含文件include/libmemcached/memcached.h。

如果要支持压缩就需要zlib。对于非标准安装的zlib库,使用--with-zlib-dir=dir 来指定zlib安装路径,dir就是zib安装时的prefix参数。

session处理器的支持默认是开启的。如果要关闭它,使用选项--disable-memcached-session 。

预定义常量:

下列常量由此扩展定义,且仅在此扩展编译入 php 或在运行时动态载入时可用。

memcached::opt_compression
开启或关闭压缩功能。当开启的时候,item的值超过某个阈值(当前是100bytes)时,会首先对值进行压缩然后存储,并 在获取该值时进行解压缩然后返回,使得压缩对应用层透明。

类型: boolean, 默认: true.

memcached::opt_serializer
指定对于非标量值进行序列化的序列化工具。可用的值有memcached::serializer_php 和memcached::serializer_igbinary。后者仅在memcached配置时开启 --enable-memcached-igbinary选项并且 igbinary扩展被加载时才有效。

类型: integer, 默认: memcached::serializer_php.

memcached::serializer_php
默认的php序列化工具(即serialize方法)。

html表单上传代码


<form enctype="multipart/form-data" action="upload.php教程" method="post">
<input type="hidden" name="max_file_size" value="100000">
<input name="userfile" type="file">  
<input type="submit" value="上传文件">
</form>

下面 是php文件上传功能代码

 

function uploadfile($type,$name,$ext,$size,$error,$tmp_name,$targetname,$upload_dir)
{
$max_size = 2000000;
$file_mimes = array('image/pjpeg','image/jpeg','image/jpg','image/gif','image/png');
$file_exts = array('.jpg','.gif','.png','.jpg','.gif','.png');
$file_path = $upload_dir.$targetname;
if(!is_dir($upload_dir))
{
if(!mkdir($upload_dir))
die("文件上传目录不存在并且无法创建文件上传目录");
if(!chmod($upload_dir,0755))
die("文件上传目录的权限无法设定为可读可写");
}
if($size>$max_size)
die("上传的文件大小超过了规定大小");
if($size == 0)
die("请选择上传的文件");
if(!in_array($type,$file_mimes) || !in_array($ext,$file_exts))
die("请上传符合要求的文件类型");
if(!move_uploaded_file($tmp_name, $file_path))
die("复制文件失败,请重新上传");
switch($error)
{
case 0:
return ;
case 1:
die("上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值");
case 2:
die("上传文件的大小超过了 html 表单中 max_file_size 选项指定的值");
case 3:
die("文件只有部分被上传");
case 4:
die("没有文件被上传");
}
}

 1. apache的安装。同样适合大多数人的一路next,next过程中可能需要填写server domain,admin email等类似的东西,这个可以跳过,但是要注意端口的选择,默认情况下是只有80与8080端口可供选取,当然安装成功之后可以自己随意修改listen的端口,这个地方避免与iis默认80的重复,可以选择8080端口。next后安装成功之后的情况就不说了。可能有的盆有安装完成之后在apache server monitor中找不到apache服务,在services.msc中也找不到与apache有关的服务,我刚好遇到这个问题,解决方法也很简单:管理员身份运行cmd,切换至目录 $apache2.2$binhttpd.exe -k install 就差不多了,我搞的一次提示error,但还是出现了服务,点击start依旧可以运行,正常情况下提示安装成功并开始testing httped.conf...至此,apache的安装就算完毕,当然大家可以进行测试一下,可以打开httpd.conf,修改大约164行的documentroot配置节,我是这样修改的:documentroot "c:/",注意如果没搞过或者是怕找不回默认的httpd.conf可以先备份一个或者,把你要修改的配置节先注释一个。然后找到大约194行的<directory 节点,修改为<directory "c:/">,也就是你要访问的网站的目录,然后重启apache,在浏览器中输入:http://localhost:8080/testing.html看看吧。

  2.mysql教程的安装。好像mysql的安装没什么太需要注意的吧,就是有个是否允许远程访问,如果你只是做测试,那么就不要选中,如果是服务器,那也慎重考虑一下安全问题。

  3.php教程环境的安装,如上所说,下载php环境解压之后,在c盘根目录下建立名为apahe group的文件夹,在apache group目录下再建立一个文件夹名为php5,因为我下载的php版本为php-5.3.5-win32-vc9-x86.zip,所以5就是当前运行环境的版本号啊,呵呵,我抄一个高人的。然后将下载包里的所有文件拷贝到php5文件夹中,在其中找到名为php.ini-production的文件,将它重命名为php.ini。打开php.ini,找到short_open_tag,将默认为“short_open_tag= off”改为“short_open_tag =on”,即让php支持简短标签写法,如在设置为off时,在写程序时用<?=$xxx;?>会报错,要写成<?phpecho $xxx;?>才行。然后在php.ini中找到extension_dir = "./"这一行,将其修改为extension_dir = "c:/apache group/php5/ext",这样php运行环境就能根据此目录找到其所需要的扩展插件的位置了,注意要删除行前的分好”;“。然后找到windows extensions配置模块,在其下边依次寻找

extension=php_mbstring.dll
extension=php_gd2.dll
extension=php_mysql.dll

然后将前面的分号“;”,打开php环境对mysql等过程的支持,这样php程序中采可以进行连接数据库教程等的操作。最后找到disable_functions = ,将其修改为disable_functions =
passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status。完成之后php运行环境的地址就是:c:apache groupphp5,这个地址将在后续的apache配置中用到。

  4.apache配置以对php的支持。打开$apache2.2$confhttpd.conf,找到#loadmodule ssl_module modules/mod_ssl.so这行,在其后,加入如下几行:

# 指定php.ini文件所在位置

phpinidir "c:apache groupphp5"

# 指定php程序的解析模块

loadmodule php5_module "c:apache groupphp5php5apache2_2.dll"

# 指定所要解析的文件的扩展名

addtype application/x-httpd-php .php

# 指定php源代码扩展名

addtype application/x-httpd-php-source .phps教程 

保存退出,此时apache+mysql+php5的运行环境就搭建完毕,你可以在测试目录中新建一个文件phpinfo.php,其中写入:<?php phpinfo(); ?>,然后通过http://localhost:8080/phpinfo.php进行访问。如果成功的话

   简单的说

    memcache是总的缓存系统项目名称,容易和php教程中的memcache混淆。

    我们常提到memcache其实是php中的memcache,即php的memcached扩展支持。

    我们常提到memcached是服务端主程序文件,服务端安装程序。

    为了让你的程序飞起来,必须安装memcached服务端程序和php的memcached扩展,所以如果您要使用memcache来缓存系统,memcache和memcached两样我们都需要安装。

    安装memcache

# cd /usr/local/src
# wget http://pecl.php.net/get/memcache-2.2.5.tgz
# gzip -d memcache-2.2.5.tgz
# tar xvf memcache-2.2.5.tar
# cd memcache-2.2.5 

    以下几句,是以php所在目录为/usr/local/php为例,如果您的php有变化,请自行替换几句中/usr/local/php的部分

# /usr/local/php/bin/phpize
# ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir
# make && make install 

    将memcache加入php扩展

    # vi /etc/php.ini(/etc/php.ini地址为我的php.ini位置,如果你不知道你的php.ini在哪里,可以用# find / -name php.ini进行查找,或者传个探针phpinfo,找到configuration file (php.ini) path)中php.ini的位置.

    末尾加入

    按键盘上的 i 开始编辑

    ctrl+f翻页拉到最下面在[zend]之前加入

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension=memcache.so 

    按esc键,再输入

    :wq

    保存退出

    重启你的web服务器,比如apache

/etc/init.d/httpd restart 

    下面刷新下php探针,看下是不是有这个了,有的话就是装好了

memcache
version  2.2.5memcache
version  2.2.5 

 

下面安装memcached

    装memcached首先需要安装安装libevent

    如果是centos可以yum安装

# yum install libevent-devel 

    如果不支持yum的系统,可以这样装libevent

# cd /usr/local/src
# wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz
# tar vxf libevent-1.4.12-stable.tar.gz
# cd libevent-1.4.12
# ./configure --prefix=/usr/local/libevent
# make && make install 

    接续安装memcached

# cd /usr/local/src
# wget http://cloud.github.com/downloads/saberma/saberma.github.com/memcached-1.4.4.tar.gz
# tar vxf memcached-1.4.4.tar.gz
# cd memcached-1.4.4
# ./configure --prefix=/usr/local/memcached
# make && make install 

    安装完后启动memcached并分配32m内存(32为使用内存数,可按自身情况修改)

/usr/local/memcached/bin/memcached -d -m 32 -l 127.0.0.1 -p 11211 -u root 

    将memcached加入启动项

# vi /etc/rc.d/rc.local 

    按键盘上的 i 开始编辑

    在最后加入

/usr/local/memcached/bin/memcached -d -m 32 -l 127.0.0.1 -p 11211 -u root 

    按esc键,再输入

    :wq

    保存退出

    如果需要,可以reboot一下,不过不用reboot应该已经生效~

    加速效果测试

    用没有什么负载的discuz x1做个测试,未启用时

gmt+8, 2010-9-12 09:08, processed in 0.038893 second(s), 2 queries. 

    缓存启用后的效果,不过总体感觉vps教程上效果不如用eaccelerato缓存加入效果那么明显

gmt+8, 2010-9-12 09:08, processed in 0.008383 second(s), 2 queries, memcache on. 

    完成

下面安装memcached

    装memcached首先需要安装安装libevent

    如果是centos可以yum安装

# yum install libevent-devel 

    如果不支持yum的系统,可以这样装libevent

# cd /usr/local/src
# wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz
# tar vxf libevent-1.4.12-stable.tar.gz
# cd libevent-1.4.12
# ./configure --prefix=/usr/local/libevent
# make && make install 

    接续安装memcached

# cd /usr/local/src
# wget http://cloud.github.com/downloads/saberma/saberma.github.com/memcached-1.4.4.tar.gz
# tar vxf memcached-1.4.4.tar.gz
# cd memcached-1.4.4
# ./configure --prefix=/usr/local/memcached
# make && make install 

    安装完后启动memcached并分配32m内存(32为使用内存数,可按自身情况修改)

/usr/local/memcached/bin/memcached -d -m 32 -l 127.0.0.1 -p 11211 -u root 

    将memcached加入启动项

# vi /etc/rc.d/rc.local 

    按键盘上的 i 开始编辑

    在最后加入

/usr/local/memcached/bin/memcached -d -m 32 -l 127.0.0.1 -p 11211 -u root 

    按esc键,再输入

    :wq

    保存退出

    如果需要,可以reboot一下,不过不用reboot应该已经生效~

    加速效果测试

    用没有什么负载的discuz x1做个测试,未启用时

gmt+8, 2010-9-12 09:08, processed in 0.038893 second(s), 2 queries. 

    缓存启用后的效果,不过总体感觉vps上效果不如用eaccelerato缓存加入效果那么明显

gmt+8, 2010-9-12 09:08, processed in 0.008383 second(s), 2 queries, memcache on. 

    完成

[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • vscode搭建STM32开发环境的详细过程

    这篇文章主要介绍了vscode搭建STM32开发环境的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-02
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • 安卓开发之Intent传递Object与List教程

    下面我们一起来看一篇关于 安卓开发之Intent传递Object与List的例子,希望这个例子能够为各位同学带来帮助。 Intent 不仅可以传单个的值,也可以传对象与数据集合...2016-09-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • 如何设计一个安全的API接口详解

    在日常开发中,总会接触到各种接口,前后端数据传输接口,第三方业务平台接口,下面这篇文章主要给大家介绍了关于如何设计一个安全的API接口的相关资料,需要的朋友可以参考下...2021-08-12
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • 微信开发生成带参数的二维码的讲解

    在微信公众号平台开发者那里,在“账号管理”那里,有一项功能是“生成带参数的二维码”,通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微...2016-05-19
  • 快速理解MySQL中主键与外键的实例教程

    主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php&#63;id=1 表示我要访问的是帖子...2015-11-24
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • c# 接口使用实例

    这篇文章主要介绍了c#接口使用的实例,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-17
  • yii添删改查实例

    一、数据访问对象 (DAO)YiiDAO 基于 PHP Data Objects (PDO) 构建。它是一个为众多流行的DBMS提供统一数据访问的扩展,这些 DBMS 包括MySQL, PostgreSQL 等等。因此,要使用 Yii DAO,PDO 扩展和特定的 PDO 数据库驱动(例如...2015-11-24
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • 分享我对JS插件开发的一些感想和心得

    这篇文章主要给大家分享我对JS插件开发的一些感想和心得的相关资料,需要的朋友可以参考下...2016-02-09