apache php 5.x 扫描,ThinkPHP5.x + Apache配置及详细使用

一 : ThinkPHP配置前准备:

配置前需要安装PHP5.4.0以上版本

ThinkPHP5.0完全开发手册

3 : 下面以本地电脑为例:

打开: http://localhost 显示 it works ! 说明Apache配置ok,

复制一个info.php文件到根目录下,http://localhost/info.php显示PHP相关信息说明php环境ok.

在上面步骤3条件下,继续往下

二 : ThinkPHP文件下载

6e9ee9f7ce38

图片.png

(2) : 找到你的Apache的web根目录,

比如我的是

/Library/WebServer/Documents/

将下载的文件直接解压到该路径下:

6e9ee9f7ce38

图片.png

注意: 如果你的项目不是在根路径下,比如在创建项目/thinkPHPPro/下

那么路径应该是http://你的域名/thinkPHPPro/public)

显示如下,说明基础环境ok:

6e9ee9f7ce38

图片.png

如果不成功,给runtime文件设置一下权限:

chmod -R 777 /Library/WebServer/Documents/runtime

下载方式二 : 通过git 下载(4行语句) git安装文档

(将thinkphp5移动到framework文件夹下)

简单下载示例(可忽视):

-bash: php-version: command not found

localhost:niexiaobo niexiaobo$ cd /Users/niexiaobo/Downloads/php5

localhost:php5 niexiaobo$ git init

Initialized empty Git repository in /Users/niexiaobo/Downloads/php5/.git/

localhost:php5 niexiaobo$ git clone https://git.coding.net/liu21st/thinkphp5.git

Cloning into 'thinkphp5'...

remote: Counting objects: 13519, done.

remote: Compressing objects: 100% (19/19), done.

remote: Total 13519 (delta 10), reused 0 (delta 0)

Receiving objects: 100% (13519/13519), 5.76 MiB | 3.20 MiB/s, done.

Resolving deltas: 100% (8588/8588), done.

localhost:php5 niexiaobo$ git clone https://git.coding.net/liu21st/framework.git

Cloning into 'framework'...

remote: Counting objects: 43528, done.

remote: Compressing objects: 100% (16100/16100), done.

remote: Total 43528 (delta 26953), reused 42770 (delta 26499)

Receiving objects: 100% (43528/43528), 10.67 MiB | 2.88 MiB/s, done.

Resolving deltas: 100% (26953/26953), done.

localhost:php5 niexiaobo$

三 : ThinkPHP文件目录结构

ThinkPHP 5相对于以往3的版本做了一些改变:

project 应用部署目录

├─application 应用目录(可设置)

│ ├─common 公共模块目录(可更改)

│ ├─index 模块目录(可更改)

│ │ ├─config.php 模块配置文件

│ │ ├─common.php 模块函数文件

│ │ ├─controller 控制器目录

│ │ ├─model 模型目录

│ │ ├─view 视图目录

│ │ └─ ... 更多类库目录

│ ├─command.php 命令行工具配置文件

│ ├─common.php 应用公共(函数)文件

│ ├─config.php 应用(公共)配置文件

│ ├─database.php 数据库配置文件

│ ├─tags.php 应用行为扩展定义文件

│ └─route.php 路由配置文件

├─extend 扩展类库目录(可定义)

├─public WEB 部署目录(对外访问目录)

│ ├─static 静态资源存放目录(css,js,image)

│ ├─index.php 应用入口文件

│ ├─router.php 快速测试文件

│ └─.htaccess 用于 apache 的重写

├─runtime 应用的运行时目录(可写,可设置)

├─vendor 第三方类库目录(Composer)

├─thinkphp 框架系统目录

│ ├─lang 语言包目录

│ ├─library 框架核心类库目录

│ │ ├─think Think 类库包目录

│ │ └─traits 系统 Traits 目录

│ ├─tpl 系统模板目录

│ ├─.htaccess 用于 apache 的重写

│ ├─.travis.yml CI 定义文件

│ ├─base.php 基础定义文件

│ ├─composer.json composer 定义文件

│ ├─console.php 控制台入口文件

│ ├─convention.php 惯例配置文件

│ ├─helper.php 助手函数文件(可选)

│ ├─LICENSE.txt 授权说明文件

│ ├─phpunit.xml 单元测试配置文件

│ ├─README.md README 文件

│ └─start.php 框架引导文件

├─build.php 自动生成定义文件(参考)

├─composer.json composer 定义文件

├─LICENSE.txt 授权说明文件

├─README.md README 文件

├─think 命令行入口文件

四 : ThinkPHP简单使用

(1) : 修改默认页面

上文中有介绍,打开连接: http://localhost/public/显示一段默认页面.

那么该页面具体位置在哪呢?

对默认项目的

application/index/controller/index.php

做一些简单的修改:

默认代码:

namespace app\index\controller;

class Index

{

public function index()

{

return '

:)

ThinkPHP V5十年磨一剑 - 为API开发设计的高性能框架

[ V5.0 版本由 七牛云 独家赞助发布 ]
';

}

}

修改后:

namespace app\index\controller;

class Index

{

public function index()

{

return 'Hello,World! this is default page !';

}

}

保存后http://localhost/public链接显示的就是 'Hello,World! this is default page !'这句话了.

(2) : 模板渲染

修改项目的application/index/controller/index.php文件:

主要修改有:引用Controller类 , 扩展index类方法 , 添加方法hello.

修改后如下:

namespace app\index\controller;

use think\Controller;//引入Controller类

class Index extends Controller

{

public function index()

{

return 'Hello,World! this is default page !';

}

public function hello()

{

return 'hello';

}

}

6e9ee9f7ce38

图片.png

上述只是通过修改模板,无需创建相应文件就可以返回.

(3) : 模板渲染, 并创建文件

还是修改项目的application/index/controller/index.php文件:

index方法,结果如下:

namespace app\index\controller;

use think\Controller;//引入Controller类

class Index extends Controller

{

public function index($name='聂小波')

{

$this->assign('name',$name);

return $this->fetch();

}

public function hello()

{

return 'hello';

}

}

修改后index需要获取变量的,此时打开http://localhost/public链接会报错的,因为还没有index.html文件.

进入项目的application/index/下创建view文件夹,再进入view下创建index文件夹进入再创建index.html.(如下图所示)

6e9ee9f7ce38

图片.png

编辑index.html:

hello {$name}

hello {$name}!

6e9ee9f7ce38

图片.png

index.html展示时需要一个name变量值,而该值是通过index.php中模板方法传递过来的.

(5) : 通过参数param获取内容

修改上面index.php中的hello方法:

public function hello(Request $request)

{

echo 'hello :'.$request->param('name').'!';

echo '你今年'.$request->param('age').'岁 !';

}

参数有姓名和年龄,结果如图:

6e9ee9f7ce38

图片.png

(4) : 链接数据库mysql

还是修改项目的application/index/controller/index.php文件:

准备工作:

安装mysql,创建数据库testDB,创建表testTable,表里面添加几条数据,包含字段id, uname,等等

添加dbTest方法(域名localhost不行的话要用127.0.0.1),

use think\Db;//引入数据库

结果如下:

namespace app\index\controller;

use think\Controller;//引入Controller类

use think\Db;//引入数据库

class Index extends Controller

{

public function index($name='聂小波')

{

$this->assign('name',$name);

return $this->fetch();

}

public function hello()

{

return 'hello';

}

public function dbTest()

{

return Db::connect([

'type'=>'mysql',

'hostname'=>'127.0.0.1',

'database'=>'testDB',

'username'=>'root',

'password'=>'root',

])

->table('testTable')

->where('id','2')

->value('uname');

}

}

6e9ee9f7ce38

图片.png

(6) : 统一配置数据库mysql信息

在上面dbTest(): 中我们需要设置登录信息, 下面开始在公共文件统一配置:

进入项目文件编辑: /application/database.php

return [

// 数据库类型

'type' => 'mysql',

// 服务器地址

'hostname' => '127.0.0.1',

// 数据库名

'database' => 'testA',

// 用户名

'username' => 'root',

// 密码

'password' => 'root',

// 端口

'hostport' => '3306',

// 连接dsn

'dsn' => '',

// 数据库连接参数

'params' => [],

// 数据库编码默认采用utf8

'charset' => 'utf8',

// 数据库表前缀

.

.

.

还是修改项目的application/index/controller/index.php文件:

添加dbTest2方法(查询testTable表下id=2的整条数据):

public function dbTest2()

{

$res = Db::table('testTable')->where('id',2)->find();

dump(is_null($res)?'没有查到':$res);

}

6e9ee9f7ce38

图片.png

(https://www.cnblogs.com/samphp/p/8594291.html)

//1、单条查询

public function dbTest4()

{

$res = Db::table('pzq_article')

->field(['title'=>'标题','id'=>'编号'])//可添加别名

->where('id','=',20)//如果是等号,=可以省略

->find();//如果是主键查询,可省略上面where,这行写->find(20);

dump(is_null($res)?'没有查到':$res);

}

//2、多条查旬

public function dbTest5()

{

$res = Db::table('pzq_article')

->field(['id','cat_id','title'])

->where([

['id','>',20],

['cat_id','=',2],

])//一个条件,直接用表达式->where('id','>',20)。多个条件用数组

->order('id desc')->limit(3)->select();

if(empty($res)){

return '没有查到';

}else{

dump($res);

}

}

//3、数据添加

public function dbTest6()

{

$data = [

'name'=>'Sam2',

'age'=>'29',

'posttime'=>time()

];

$dataall=[

['name'=>'Sam3','age'=>'29','posttime'=>time()],

['name'=>'Sam4','age'=>'30','posttime'=>time()],

];

//(1)单条插入

//return Db::table('test')->data($data)->insert();

//(2)插入同时返回新增主键id

//return Db::table('test')->insertGetId($data);

//(3)插入多条数据

return Db::table('test')->data($dataall)->insertAll();

}

//4更新数据

public function dbTest7()

{

// return Db::table('test')

// ->where('id','=',4)

// ->update(['name'=>'SamC','age'=>'31']);

//如果where条件是主键,还可以如下使用

return Db::table('test')

->update(['name'=>'SamCheng','age'=>'30','id'=>4]);

}

//5删除操作

public function dbTest8()

{

//return Db::table('test')->delete(6);

//或者

return Db::table('test')->where('id',5)->delete();

}

//mysql原生语句 查询

public function dbTest9()

{

$sql = "select name,age from test where id>2";

dump(Db::query($sql));

}

//mysql 增、删、改 用Db::execute($sql)

public function dbTest10()

{

//$sql = "update test set name='samC' where id=4";

//$sql = "insert test set name='Yan',age='30'";

$sql = "delete from test where id=4";

return Db::execute($sql);

}

五 : ThinkPHP路由设置

(7) : 路由: 隐藏真实路径

修改项目路径下 /application/route.php

修改前初始代码:

// +----------------------------------------------------------------------

// | ThinkPHP [ WE CAN DO IT JUST THINK ]

// +----------------------------------------------------------------------

// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.

// +----------------------------------------------------------------------

// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )

// +----------------------------------------------------------------------

// | Author: liu21st

// +----------------------------------------------------------------------

return [

'__pattern__' => [

'name' => '\w+',

],

'[hello]' => [

':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],

':name' => ['index/hello', ['method' => 'post']],

],

];

添加一段代码:

return [

'__pattern__' => [

'name' => '\w+',

],

'[hello]' => [

':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],

':name' => ['index/hello', ['method' => 'post']],

],

'__alias__' => [

'home' => 'index/index',

],

];

或者这样写:

use think\Route;

Route::alias('home','index/index');

(8) : 路由: 页面跳转

下面以登录为例,登录成功后跳转到首页index,失败后跳转错误页面

还是修改项目的application/index/controller/index.php文件:

添加login方法和check()方法:

// 显示登录页面

public function login(){

return $this->fetch();

}

//提交登录

public function check(){

//获取参数

$user=$_POST['username'];

$pwd=$_POST['password'];

// 判断登陆成功失败的逻辑

if($user=='admin' && $pwd=='123'){

//如果成功则跳到index/index页面

$this->success('登陆成功',url('/index/index'));

}else{

$this->error('登陆失败');

}

}

下面路径下创建login.html登录验证页面:

/application/index/view/index/login.html

代码:

登陆

账号:

密码:

6e9ee9f7ce38

图片.png

输入错误的username,点击提交按钮:

登录失败, 跳转错误页面(默认3秒倒计时):

6e9ee9f7ce38

错误页面

输入正确账号密码admin 和 123.

跳转成功页面(默认3秒倒计时),然后回到index页面:

6e9ee9f7ce38

图片.png

(9) : 路由: 页面重定向

打开某个链接时,直接跳转到其他地址

还是修改项目的application/index/controller/index.php文件:

添加跳转方法:

// 页面重定向

public function jumpto(){

$this->redirect('https://www.baidu.com');

}

6e9ee9f7ce38

图片.png

(10-A) : 模型的使用 : 查询表

目的 : 通过创建使用Model来查询表数据

1 : 首先数据库有一张表chat.

2 : 在/application/index/下新建model文件夹,并创建一个Chat.php文件(根据表名, 驼峰命名,首字母大写)

Chat.php :

namespace app\index\model;

use think\Model;

class Chat extends Model{

// 设置当前模型对应的完整数据表名称

protected $table="chat";

}

?>

3 : 还是修改项目的application/index/controller/index.php文件:

添加跳转方法:

//模型

public function user()

{

// 实例化数据模型

$user=new \app\index\model\Chat;

//get(3): 查询主键为3的数据,并转成array返回

dump($user::get(3)->toArray());

}

6e9ee9f7ce38

图片.png

(10-B) : 模型的理解

通过上述对模型的简单使用之后,接着对模型做一个简单是介绍:

1 这里的模型model到底是什么?

根据使用方法:

use think\Model;

class Chat extends Model

知道: 我们新建的Chat模型文件,其实是继承了think\Model文件的功能和方法,说明Chat模型在创建初始化结束后,就拥有了think下Model的功能.

修改上述控制器方法

//模型

public function user()

{

// 实例化数据模型

$user=new \app\index\model\Chat;

//直接打印模型

dump($user);

}

object(app\index\model\Chat)#10 (35) {

["table":protected] => string(10) "think_user"

["connection":protected] => array(0) {

}

["parent":protected] => NULL

["query":protected] => NULL

["name":protected] => string(4) "Chat"

["class":protected] => string(20) "app\index\model\Chat"

["error":protected] => NULL

["validate":protected] => NULL

["pk":protected] => NULL

["field":protected] => array(0) {

}

["except":protected] => array(0) {

}

["disuse":protected] => array(0) {

}

["readonly":protected] => array(0) {

}

["visible":protected] => array(0) {

}

["hidden":protected] => array(0) {

}

["append":protected] => array(0) {

}

["data":protected] => array(0) {

}

["origin":protected] => array(0) {

}

["relation":protected] => array(0) {

}

["auto":protected] => array(0) {

}

["insert":protected] => array(0) {

}

["update":protected] => array(0) {

}

["autoWriteTimestamp":protected] => bool(false)

["createTime":protected] => string(11) "create_time"

["updateTime":protected] => string(11) "update_time"

["dateFormat":protected] => string(11) "Y-m-d H:i:s"

["type":protected] => array(0) {

}

["isUpdate":protected] => bool(false)

["force":protected] => bool(false)

["updateWhere":protected] => NULL

["failException":protected] => bool(false)

["useGlobalScope":protected] => bool(true)

["batchValidate":protected] => bool(false)

["resultSetType":protected] => string(5) "array"

["relationWrite":protected] => NULL

}

返回的一堆信息中:

第一条:

["table":protected] => string(10) "think_user" 意思是该模型设置的需要修改的表是think_user.

中间某条:

["append":protected] 意思是具有追加数据的功能

中间某条:

["data":protected] 专门存储数据的

比如下面操作修改的就是这个data:

$user = new User;

$user->data([

'name' => 'thinkphp',

'email' => 'thinkphp@qq.com'

]);

所以,模型文件能够更好的帮我们处理一些数据库相关的操作逻辑

(11) : 控制器 : 创建新的控制器

目前为止都是在项目的application/index/controller/index.php修改,这个默认控制器文件index.php .

创建文件login.php:

application/index/controller/login.php

写法和index.php一样:

namespace app\index\controller;

class login

{

public function index()

{

return 'login !';

}

public function hello()

{

return 'hello';

}

}

(11) : 后台目录文件

同默认控制器,在 application/下创建admin文件,专门用来存放和管理后台页面代码(开发方式和上文基本一致):

控制器:

application/admin/controller/index.php

前端html入口(view下存放):

application/admin/view/index.html

6e9ee9f7ce38

图片.png

前端html 的CSS,js,image等静态文件存储路径:

/public/static/

6e9ee9f7ce38

图片.png

前端html 的CSS,js,image静态文件生效设置:

编辑/application/config.php:

// 视图输出字符串内容替换

'view_replace_str' => [

'__PUBLIC__'=>'/public/static', //将__PUBLIC__指向public/static

'__ROOT__' => '/',

],

引用/public/static下home/css文件:

ThinkPHPPHP开源框架)v5.0.24 核心版 更新日志改进关联的save方法改进模型数据验证Collection增加values方法改进unique验证方法改进Request类的method方法ThinkPHP简介ThinkPHP核心版本仅包含核心必须类库和文件,支持标准模式和SAE模式。ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用 开发和简化企业级应用开发而诞生的。拥有众多的优秀功能和特性,经历了三年多发展的同时,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和 改进,众多的典型案例确保可以稳定用于商业以及门户级的开发。ThinkPHP借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,采用单一入口模式等,融合了Struts的 Action思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,在项目配置、类 库导入、模版引擎、查询语言、自动验证、视图模型、项目编译、缓存机制、SEO支持、分布式数据库、多数据库连接和切换、认证机制和扩展性方面均有独特的 表现。使用ThinkPHP,你可以更方便和快捷的开发和部署应用。当然不仅仅是企业级应用,任何PHP应用开发都可以从ThinkPHP的简单 和快速的特性中受益。ThinkPHP本身具有很多的原创特性,并且倡导大道至简,开发由我的开发理念,用最少的代码完成更多的功能,宗旨就是让WEB应 用开发更简单、更快速。为此ThinkPHP会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应用开发的最佳实践! ThinkPHP遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产 品发布/销售。ThinkPHP页面展示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值