为什么使用框架 框架是什么
.框架帮组快速、稳定、高效搭建程序系统
.框架本身维护性、灵活性、适应客户需求方面得到最大化的增强
.注意力集中业务层面,无需关心程序的底层架构
.框架节省50-60%的工作量
项目开发中的问题
多人协作开发项目,分工合理、效率有提高 测试阶段 上线运行
项目维护、升级(单个人维护项目,十分困难,代码风格不一样)
项目稳定的运行阶段 项目停止运行 新人开发新项目
问题
.多人开发项目,分工不合理,(html php mysql)
.代码风格不一样,后期维护十分困难
.项目生命周期十分短,项目生命没有延续性,造成资源浪费、人员浪费
.项目不能很好适应客户需求,牵一发而动全身。
PHP市场认可的框架
.zendframework zend php官方的框架,重量级(功能多)
.yii 美国华人开发的框架 重量级框架,纯OOP框架
.CI CodeIgniter轻量级框架,开发速度快,部署灵活
.cakephp 外国框架,重量级,速度慢
.symfony 外国重量级框架
.ThinkPHP 轻量级 国人框架,入门容易
MVC 基于多层模型(M)、视图(V)、控制器(C)的设计模式
ORM 全功能和高性能的ORM支持,支持大部分数据库
模板引擎 内置了高性能的基于标签库和XML标签的编译型模板引擎
RESTFul 通过REST控制器扩展提供了RESTFul支持,打造全新的URL设计和访问体验
云平台 新浪SAE平台和百度BAE平台的强力支持,横跨性 和 平滑性 ,本地化开发调试及部署切换,打造全新的开发体验
CLI 基于命令行的应用开发
RPC 包括PHPRpc、HProse、jsonRPC和Yar在内远程调用解决方案
MongoDb 提供NoSQL的支持
缓存 提供了包括文件、数据库、Memcache、Xcache、Redis等多种类型的缓存
安全性 框架在系统层面提供了众多的安全特性,确保网站和产品安全无忧
XSS安全防护 表单自动验证 强制数据类型转换 输入数据过滤 表单令牌验证 防SQL注入 图像上传检测
PHP >= 5.6.0 / PDO PHP Extension / MBstring PHP Extension
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composerWindows 运行 Composer-Setup.exe
composer config -g repo.packagist composer https://packagist.phpcomposer.com
composer create-project topthink/think tp5
目录名任意更改 ,当前目录下,最新版本的ThinkPHP ,这个目录就是应用根目录,更新
composer update topthink/framework
composer 安装的是最新的稳定版本,如果需要安装实时更新的版本(适合学习过程) 安装dev版本
composer create-project topthink/think=5.1.x-dev tp5
应用项目 https://github.com/top-think/think
核心框架 https://github.com/top-think/framework
git clone https://github.com/top-think/framework thinkphp
国内GIT仓库
应用项目:https://gitee.com/liu21st/thinkphp5.git 核心框架:https://gitee.com/liu21st/framework.git
应用项目:https://git.coding.net/liu21st/thinkphp5.git 核心框架:https://git.coding.net/liu21st/framework.git
git checkout 5.1
git pull
不在应用目录下执行git更新操作,最后一步验证是否正常运行在浏览器中输入地址
http://localhost/tp/public/
部署是绑定域名访问到public目录 确保其它目录不在WEB目录
thinkphp出现no input file specified
Fastcgi模式php不支持rewrite的目标网址的 PATH_INFO 解析
ThinkPHP运行在URL_MODEL=2时 出现 No input file specified
修改网站目录的.htaccess文件
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
改为 RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
.htaccess的内容为:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>
千年的回眸
ThinkPHP 接收 Post Json 参数
Postman 测试 API 某 Post 接口
发送请求提示参数验证失败
调试的过程中某次采用通过 Body 表传递参数的方法,API 神奇地通了
TP5通过 strpos 函数在 Header 的 content-type 值中查找 app/json 字符串
必须设置 Header 的 content-type 值为 app/json 才行
否则 TP5 不会认为 传入 Json 参数 并给 Request::post 设值为空
两个知识点
content-type 为 "application/json" 的数据 php 不能直接识别的
导致 $_POST 数组为空
解决办法
用 $GLOBALS['HTTP_RAW_POST_DATA'] 把原始数据取出来
然后再 json_decode 就行了
此方法,需要设置 php.ini 中的always_populate_raw_post_data 值为 On
$HTTP_RAW_POST_DATA 包含了 POST 的原始数据
但这不是一个超全局变量,要在函数中使用它 必须声明为 global
或使用 $GLOBALS['HTTP_RAW_POST_DATA'] 代替
通过 file_get_contents('php://input') 代替上面的方法直接获取到传入的 Json 参数