PHP中MVC框架之文件入口实例详解
MVC的文件入口怎么写,完全是根据程序员的引擎设计来做,也是根据程序员喜好来做,但我们的最终目的却是通过简单的代码引入引擎来处理其它的事务,就像我们要开车一样,我们首先要点火,发动机才能发动一样。在写入口之前我们需要考虑几个方面,URL解析方式,需要哪些用户参数或系统需要带入,用户参数需要更改的地方,我们需要统一用一个文件来引入,文件可以是xml,也可以的PHP,也可以是其它的想到的方法,但keheng这里用的却是php里面数组形式引入,这种形式貌似写缓存的形式,从数据库读取了数据再生成一个php文件,再require此文件即可。当然,也可以在写引擎的过程中再写入口也行,只要能达到我们的目的就行。
就我们平常见到的文件入口来看,文件入口一般分为单文件入口和多文件入口,当然也有可能有其它的文件入口没见过。
单文件入口当然是指网站访问始终都是有访问index.php这个文件,但关系到里面显示的内容却是根据后台的参数来加载,
比如:http://www.XXXX.com/index.php? Conttoller=index&action=show&id=1
这里的Conttoller就是我们需要显示的页面,通过获取Conttoller的值来确实我们的MVC加载的是哪个模型,显示的是哪个视图,一般都需要建立一个专用的路由类来进行地址的判断。action则是此模型的哪个操作,比如是显示数据,或者添加数据,或者显示文章类的,至于ID的作用是什么这里就不用说了。
多文件入口当然是指网站里面除了index.php文件名,还有其它文件访问,比如同一个网站下有index.php,about.php………..等。
但还有另外一种URL方式http://localhost/control/ index / action/1,这种方式并未指定访问这个目录下的哪个文件,一般默认的当然是index.php或者index.html,个人认为这种方式不管是程序制作或维护都较麻烦点,所以现在也很少见到有这种形式的URL,以前看过有关SEO的文章,貌似入口为这种类型的对SEO优化不太好(keheng个人愚见)。其实是不是不太好我们平常就可以观察到,比如我们百度下,随便输入一个关键词,在开头几页基本不到类似的地址被搜索出来。在SEO优化中就有一条为地址url的层级结构保持在三层内为宜。我们做WEB项目前当然要考虑到这些问题了。
以下为网上下载的一个模板的文件入口:
代码如下 | 复制代码 |
define('UPLOAD_PATH', './Uploads/'); |
它的核心是THINK,入口指定了程序版本,更新日期等,真正的处理文件却是在Core.php文件里。由于PHP模板都是开源的,个人认为可能有些网络公司为了不让别完全搞清楚他的产品,故意在PHP代码里面多层次调用,来迷惑想学习他代码思路的程序员,让程序员跟来跟去跟的一头雾水,其实我就这样过,也可能是自己阅历不够造成的。
代码如下 | 复制代码 |
<?php |
加载了引擎文件后,在告诉$views类显示哪一个视图文件,这样确实是直观很多,但我个人不怎么喜欢这种方法,虽然如果修改文件模板直接在对应的文件进行修改,感觉不太好控制,而且貌$views到最后没关闭,占着内存。
看了些别人的入口后keheng自己也有了入口的思路。不管是单文件还是多文件,全都用这入口,总之网站根目录下文件内容全都是这个
代码如下 | 复制代码 |
<?php |
实际上我的对像模型是在config.php里设置好的
代码如下 | 复制代码 |
<?php |
分析地址调用相应的视图,这样我就可以专门用一个文件来进行模型与视图对应设置,在用的时候即可用require 'command/config.php';加载这个数组。
可能有高人会认为这种方法貌似不太好,可能是keheng见识太少阅历不够或技术还不够,现在还没想到更好一些的方法
在我使用php json_encode()时,如果是英文或数字没一点问题,但是用到中文是居然出现不可识别的中文乱码了,下面看我解决json_encode中文乱码方法。在网上找到一种解决方法:
代码如下 | 复制代码 |
<?php /* 处理json_encode中文乱码 */ $data = array ('game' => '冰火国度', 'name' => '刺之灵', 'country' => '冰霜国', 'level' => 45 ); echo json_encode ( $data ); echo "<br>"; $newData = array (); foreach ( $data as $key => $value ) { $newData [$key] = urlencode ( $value ); } echo urldecode ( json_encode ( $newData ) ); ?> |
后来请教了别人,还可以用base64编码,不过base64编码不可以放在URL中,百度是这样解释的:
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
不过我的数据是要通过POST发送的,并不在HTTP 的head中,而在message-body里,所以不受影响。
json_encode 只能接受utf-8格式的数据
例如:'胥'经过json_encode处理后变为'u80e5',最终的json中中文部分被替换为unicode编码。我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的。
我的解决方法:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文!
测试代码如下:
代码如下 | 复制代码 |
<?php class myClass { public $item1 = 1; public $item2 = '中文'; function to_json() { //url编码,避免json_encode将中文转为unicode $this->item2 = urlencode($this->item2); $str_json = json_encode($this); //url解码,转完json后将各属性返回,确保对象属性不变 $this->item2 = urldecode($this->item2); return urldecode($str_json); } } $c = new myClass(); echo json_encode($c); echo '<br/>'; echo $c->to_json(); echo '<br/>'; echo json_encode($c); echo '<br/>'; echo json_encode('胥'); ?> |
程序输出结果:
代码如下 | 复制代码 |
{"item1":1,"item2":"u4e2du6587"} {"item1":1,"item2":"中文"} {"item1":1,"item2":"u4e2du6587"} "u80e5" |
了查看这个值,你须要建树一个空的php文件,比如view-php-info.php。然后将一下代码贴到里面。
列表页面:
修改页面:
留言板的sql文件,可直接导入到mysql
代码如下 | 复制代码 |
create database form; use form; CREATE TABLE `message` ( `id` tinyint(1) NOT NULL auto_increment, `user` varchar(25) NOT NULL, `title` varchar(50) NOT NULL, `content` tinytext NOT NULL, `lastdate` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=1 ; |
conn.php 数据库连接文件
代码如下 | 复制代码 |
<?php $conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误"); mysql_select_db("form", $conn); mysql_query("set names 'gbk'"); ?> |
add.php 根据用户提交的留言信息保存到数据库
代码如下 | 复制代码 |
<?php |
list.php 以列表形式输出留言
代码如下 | 复制代码 |
<?php |
delete.php 删除留言,根据用户提交的数据,我们以获取留言内容的ID进行删除操作
代码如下 | 复制代码 |
<?php include 'conn.php'; $id = $_GET['id']; $query="delete from message where id=".$id; mysql_query($query); ?> <?php //页面跳转,实现方式为javascript $url = "list.php"; echo "<script language='javascript' type='text/javascript'>"; echo "window.location.href='$url'"; echo "</script>"; ?> |
preEdit.php 编辑就是利用update更新用户重新提交的数据并替换以前的记录以id为唯一标识
代码如下 | 复制代码 |
<?php <?php |
总结
这是一个完整的留言板系统,只要根据上面的提示保存成文件就可以很好的实现留言功能了,留言板主要有对数据的读取,分页以及数据的删除,编辑,我们分用到sql delete,update,insert 这三种语句,相对来说是基础知识了。
在用户登录时有很多种有我实例一样的最基本的用户登录跑到指定页面这个不安全如果用户知道你这个地址就不需要登录了,实例二利用了session也是较常用的在操作页面加了session验证,但是无法记住下次登录,实例三就利用了session和cookie同时登录并可以自动记录下次自动登录功能。
我们先来看个最简单的实例
以下附简单的login.htm内容
代码如下 | 复制代码 |
<html> |
login.php内容如下:
代码如下 | 复制代码 |
<? if ($name && $passowrd){ ?> |
下面还有一个我刚学php 是写的
这是一个登录页面的效果图,其它登陆别名与密码
代码如下 | 复制代码 |
<input name="myname" type="text" id="myname" style="border:solid 0px;" /> <input name="mypass" type="password" id="mypass" style="border:solid 0px;" /> |
php代码
代码如下 | 复制代码 |
<? session_start();//这个一定要申明喽,给个小提示:在session之前不能有任何输出哦,在php.5以下的版本会有问题. ?> |
上面的实例我都只保存信息到了session下面来看个同时应用session和cookie来保存用户登录信息
1、数据库连接设备页面:connectvars.php
代码如下 | 复制代码 |
<?php |
2、登录页面:logIn.php
代码如下 | 复制代码 |
<?php //开启一个会话 $error_msg = ""; if(!empty($user_username)&&!empty($user_password)){ <label for="username">Username:</label> <br/> <label for="password">Password:</label> </fieldset> |
3、登入页面:loged.php
代码如下 | 复制代码 |
<?php |
4、刊出session与cookie页面:logOut.php(刊出后重定向到lonIn.php)
代码如下 | 复制代码 |
<?php |
用户注册登录涉及到用户信息与数据库的交互,因此要特别注意用户提交的信息不能为非法信息,本例中注册部分已经使用正则表达式做了限制,对登录部分只简单使用了 htmlspecialchars() 处理,实际应用时可更严格一些。
本教程只是简单演示用户注册与登录的过程,其代码仅供学习参考,不可直接用于项目生产。
本教程中对于用户登录成功后采用 session 来管理,也可以采用 cookie 来管理,尤其对于有时限要求的情况。
为了提高用户体验,用户注册部分可以结合 AJAX 来检测用户输入的信息而不必等点击提交后再检测。
相关文章
- 下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
Jupyter Notebook读取csv文件出现的问题及解决
这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06- 有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
这篇文章主要介绍了基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍 的相关资料,需要的朋友可以参考下...2016-05-14php无刷新利用iframe实现页面无刷新上传文件(1/2)
利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25- 要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
- 又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
- 今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
- 这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
- 这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
ant design中upload组件上传大文件,显示进度条进度的实例
这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29- 举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
- 通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31