php技巧

如何在Laravel中验证zip里的文件

2021-05-28
目录 概述 PHP 的libzip扩展 如何操作 ZIP 文件 集成到 Laravel 程序中 最佳实践 概述 如果我们希望用户上载 ZIP 文件,我们可以结合规则并像如下所示的内容使用: return [ 'file' => 'required|file|mimes:zip|size:3072' ]; 但是与图片.文本或 pdf 文件不同,ZIP 是一个压缩文件,可以在其中保存多个不同的文件. 假设我们希望用户上传一个 ZIP 文件,但带有特定的必需文件和文件夹结构. 举一个真实的例子,如果您

详解Swoole跟传统的web开发的区别

2021-05-28
一.swoole的运行模式 1.1.传统web开发模式 PHP web开发采用的方式是LAMP/LNMP架构,即Linux.Nginx,Mysql和PHP.这里以nginx来举例,大致结构为: 当请求进入时,web server将请求转交给PHP-FPM,PHP-FPM是一个进程池架构的FastCGI服务,内置PHP解释器.FPM负责解释执行PHP文件生成响应,最终返回给web server,展现至前端.PHP文件中实现了许多业务逻辑,包括Mysql和Nosql的访问,调用第三方应用等等. 这样

如何使用PHP依赖管理工具Composer

2021-05-28
前言 别再到处搜PHP类扩展包了,对于现代语言而言,包管理器基本上是标配.Java 有 Maven,Python 有 pip,Ruby 有 gem,Nodejs 有 npm.PHP 的则是 PEAR,不过 PEAR 坑不少: 依赖处理容易出问题 配置非常复杂 难用的命令行接口 好在我们有 Composer,PHP依赖管理的利器.它是开源的,使用起来也很简单,提交自己的包也很容易. 举个例子,平时我们开始的时候如果不是用框架,想要一个验证码,就要先去Gihutb或者其他地方找一个验证码类,然后在项

详解PHP框架EasySwoole

2021-05-28
安装 使用 Composer 安装 composer require easyswoole/easyswoole=3.xphp vendor/bin/easyswoole install 启动框架 php easyswoole start nginx转发 server { root /data/wwwroot/; server_name local.easyswoole.com; location / { proxy_http_version 1.1; proxy_set_header Conn

浅谈Laravel中使用Slack进行异常通知

2021-05-28
概述 通常,我们可以依靠用户反馈.经常查看程序日志来发现程序存在的问题.但这要么不可靠要么不及时,所以下面我们介绍一种比较有效的做法--使用 Slack 通知程序跑出的异常信息. Slack 是一款即时通信软件,类似于 QQ,它提供开放的 API,可以调用它向自己团队中指定的个人或者频道(Channel)发送消息,因此用它来进行异常通知是再合适不过的. 安装 maknz/slack-laravel 包 具体的安装方法请参考 Github 上的 [readme](https://github.co

如何理解PHP核心特性命名空间

2021-05-28
提出 PHP 在 5.3 后提出了命名空间用来解决组件之间的命名冲突问题,主要参考了文件系统的设计: 同一个目录下不允许有相同的文件名 - 同一个命名空间下不允许有相同的类: 不同的目录可以有同名文件 - 不同的命名空间可以有相同的类: 定义 使用namespace关键字来定义一个命名空间.其中,顶层命名空间通常为厂商名,不同开发者的厂商命名空间是唯一的.命名空间不需要与文件目录一一对应,但是最好遵守PSR-4规范. <?php namespace Symfony\Component\HttpF

详解Go与PHP的语法对比

2021-05-28
概述 Go 是由 Google 设计的一门静态类型的编译型语言.它有点类似于 C,但是它包含了更多的优点,比如垃圾回收.内存安全.结构类型和并发性.它的并发机制使多核和网络机器能够发挥最大的作用.这是 GoLang 的最佳卖点之一.此外,Go 速度快,表现力强,干净且高效.这也是 Go 如此吸引开发者学习的原因. PHP 是一种动态类型语言,它使新手更容易编写代码.现在的问题是,PHP 开发人员能否从动态类型语言切换到像 Go 这样的静态类型语言?为了找到答案,让我们对比一下 Go 和 PHP

浅谈swoole的作用与原理

2021-05-28
PHP 中的 Node ?Swoole 到底是什么? 我先从官方文档中引用下 Swoole 的定义: Swoole:面向生产环境的 PHP 异步网络通信引擎. 使 PHP 开发人员可以编写高性能.可拓展的异步并发 TCP.UDP.Unix Socket.HTTP,WebSocket 服务,而无需深入了解非阻塞 I/O 编程和初级 Linux 内核. Swoole 使用 C 语言编写,作为 PHP 的基本扩展存在.听起来可还行,是吧?用 PHP 来运行 HTTP 服务?用 PHP 实现 Webso

浅谈如何提高PHP代码质量之端到端集成测试

2021-05-27
概述 在这里,我们可以使用为行为驱动开发构建的工具--官方 PHP 的 Cucumber 实现--Behat.我们可以通过运行以下代码来安装它: $ php composer.phar require --dev behat/behat 增加一个目标到 build.xml(在本文的第一部分中描述了 Phing 设置) <target name="behat"> <exec executable="bin/behat" passthru="

浅谈一种Laravel路由文件划分方式

2021-05-27
最初,我想到了利用路由组方法可以接收文件,这就是 laravel 在 RouteServiceProvider 处拆分路由的方式. <?php namespace App\Providers; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Route; class RouteServiceProvider ext

如何使用Casbin作为ThinkPHP的权限控制中间件

2021-05-27
概述 PHP-Casbin是一个强大的.高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理. Think-Casbin是一个专为 ThinkPHP5.1 定制的 Casbin 的扩展包,使开发者更便捷的在 thinkphp 项目中使用 Casbin. 安装 创建 thinkphp 项目(如果没有): composer create-project topthink/think=5.1.* tp5 在ThinkPHP项目里,安装Think-Casbin扩展: composer requi

如何让PHP的代码更安全

2021-05-27
概述 攻击者通过构造恶意SQL命令发送到数据库,如果程序未对用户输入的 SQL命令执行判断过滤,那么生成的SQL语句可能会绕过安全性检查,插入其他用于修改后端数据库的语句,并可能执行系统命令,从而对系统造成危害 例如删除 id 为 1 的帖子,sql 如下: $post_id = $_POST['post_id']; $sql = "DELETE FROM posts WHERE user_id = 1 AND id = $post_id"; \DB::statement($sql);

如何理解PHP程序执行的过程原理

2021-05-27
概述 Web环境我们假设为Apache.在编译PHP的时候,为了能够让Apache支持PHP,我们会生成一个mod_php5.so的模块.Apache加载这个模块,在url访问.php文件的时候,就会转给mod_php5.so模块来处理. 这个就是我们常说的SAPI.英文名字是:Server Application Programming Interface.SAPI其实是一个统称,其下有 ISAPI,CLI SAPI,CGI等.有了它,就可以很容易的跟其他东西交互,比如APACHE,IIS,C

详解Laravel框架的依赖注入功能

2021-05-27
概述 任何时候,你在一个控制器类中请求一个依赖,这个服务容器负责: 1.自动地在构造函数中检测依赖关系 2.如果需要构建这个依赖关系 3.通过构造函数创建对象形成依赖关系 来看一个非常简单的例子. <?php namespace App\Http\Controllers; use App\User; use App\Repositories\UserRepository; use App\Http\Controllers\Controller; class UserController exte

如何在Mac上通过docker配置PHP开发环境

2021-05-27
使用docker-compose配置开发环境 一般一个基本的PHP开发环境包括PHP.PHP-FPM.WEB服务器.MySQL数据库,另外还会有Redis或memcache等相关NoSQL服务.我主要是通过docker-compose来配置服务. 什么是docker-compose docker-compose是一个通过YAML文件来定义项目,项目中包含单个或多个容器服务.一般配置文件名为:docker-compose.yml. 目录结构 你可以按自己的喜好组织项目,下面是我用的方法,app 目

分析Composer实现自动加载原理

2021-05-27
1. 入口文件 (/public/index.php)中引入了 autoload.php require __DIR__.'/../vendor/autoload.php'; 2.  autoload.php require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInit1215780529014c2b50a6fca7ce889273::getLoader(); 3. autoload_rea

浅谈如何提高PHP代码的质量

2021-05-27
概述 我们可以将此归咎于许多原因,但这肯定不仅仅是因为 PHP 生态系统缺乏适当的测试工具.在本文中,我想向您展示一个简单的设置,用于项目的基本质量测试. 我不会详述任何特定的工具,而是专注于设定测试环境. 本文中有一个演示代码可以在 GitHub 上找到:https://github.com/mkosiedowski/php-testing-demo如果你对这篇文章中的例子有任何问题,可以参考. 1 必备条件 我假设您熟悉 PHP 7.1 语法,您可以使用 Composer 和 PSR-4 来

浅谈laravel中间件的创建思路

2021-05-26
Laravel 中间件提供了一种机制在不修改逻辑代码的情况下,中断原本程序流程,通过中间件来处理一些事件,或者扩展一些功能.比如日志中间件可以方便的记录请求和响应日志,而不需要去更改逻辑代码. 那么我们简化一下软件执行过程,现在有一个核心类kernel,下面是它的laravel代码 #捕获请求 $request = Illuminate\Http\Request::capture() #处理请求 $response = $kernel->handle($request); 代码的作用是 捕获一个

浅谈如何提高PHP代码质量之单元测试

2021-05-26
1.单元测试 通过实现单一责任原则(我们的代码应该只关注功能的单个部分),我们将确保在测试期间,我们只会同时关注项目的一小部分 通过使用 Liskov 替换原则和依赖倒置原则,我们的代码不会关心我们是否注入模拟依赖关系,只要它们实现了适当的接口 在单元测试中,我们确实希望用模拟对象替换所有依赖的服务,因此我们一次只测试一个类.但模拟是什么?它们是实现与其他对象相同的接口的对象,但它们的行为是受控的.例如,假设我们在创建一个价格比较服务,我们利用另一个服务来获取当前的汇率.在测试我们的比较器时,我

如何使用Zephir轻松构建PHP扩展

2021-05-26
简介 比如,在 PHP 中需要与 SQLite3 交互,我们可以自己写方法与之进行连接,再写 SQL 语句请求数据.然而,这都是些既琐碎又重复度相当高的工作,因此,所有开发者对插件的需求呼之欲出. 现在,这款插件已经诞生了.你只需像安装其他扩展一样进行安装,然后在 'php.ini' 文件执行 'extension=sqllite3.so',就可以在你的 php 项目里对 sqlite3 进行访问了. 你该安装的第一个扩展 Zephir 官网文档给出的定义是: 一种开源的高级语言,旨在简化 PH