首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
183 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
31
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
560
篇与
的结果
2023-12-28
PHP的局限性怎么破?PHP与GO可完美结合
PHP的局限性怎么破?PHP与GO可完美结合PHP语言已经成为进行web开发的主力军,随着对技术的要求越来越高,很多团队在项目运作中,会引入 Golang到开发框架中,这不仅会提升产品性能,还能在原有基础上改变可扩展性,并且运行速度提高将近几十倍。将GO语言与PHP相结合,两者间相互取长补短,为项目的完成带来圆满收官。Go语言微服务的优势: GO语言的微服务将单个应用程序中所有系统的特性之间的关系分离出来,使得每个程序包都保存到独立的、可运行的代码库中。程序的大块代码被分割成多个微服务,成了小模块,解决了系统升级中潜在BUG、集成难度高等问题。值得一提的是,微服务可以进行横向扩展,在扩大服务模块后,给云计算带来极大的帮助。微服务仅仅只是一种概念,所以大部分语言都支持微服务,GO语言的特性直接表明了它是最适合的语言。GO语言具有并发性、运行速度快、支持高并发等优势,拥有强大的标准库,这些都是微服务选择它的理由。Go语言和PHP相辅相成: 当在PHP开发中用到GO语言,不仅完全消除了 502 错误的发生,而且将服务器总数减少了近三分之二,节省了大量工作成本和服务器成本。PHP不再被认为缓慢的语言,通过与Go语言等其他语言配对,创建出的PHP语言成为众多开发者的选择,未来也将继续在其中寻找更高效率的方法。GO语言与PHP的结合渐渐成为一种趋势,在Web应用、API应用、下载应用中都能见到身影。随着两者的发展应用,PHP渐渐在大型项目中崭露头角,在内存数据库和云平台领域都有所涉及。国内很多一线互联网企业,都会使用这个来进行项目开发,如京东商场、百度BFE、小米视频等项目,当然还有其他中小型公司也会利用此功能,进行项目的研发。对于PHP的未来可预见的是,它将会摒弃自身不足,不断创新,真正成为最好的语言,而不仅仅存在一个梗中。
2023年12月28日
6 阅读
0 评论
0 点赞
2023-12-28
PHP设置脚本最大执行时间的三种方法
PHP设置脚本最大执行时间的三种方法php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,如果脚本需要跑很长时间;这种情况就要更改php脚本最大执行时间。1、在php.ini里面设置max_execution_time = 120;2、通过PHP的ini_set函数设置ini_set("max_execution_time", "120");3、通过set_time_limit 函数设置set_time_limit(120);方法一主要适用于网站已经做好了,后期维护人员对代码结构不熟悉,方法二和三适用于写代码时候,不过不推荐使用方法二,因为要注意ini_set函数是否会被禁用。
2023年12月28日
7 阅读
0 评论
0 点赞
2023-12-28
thinkphp Hook行为的使用案例
thinkphp Hook行为的使用案例行为,官方是如下介绍:行为(Behavior)是ThinkPHP扩展机制中比较关键的一项扩展,行为既可以独立调用,也可以绑定到某个标签中进行侦听,在官方提出的CBD模式中行为也占了主要的地位,可见行为在ThinkPHP框架中意义非凡。这里指的行为是一个比较抽象的概念,你可以把行为想象成在应用执行过程中的一个动作或者处理。在框架的执行流程中,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测、多语言检测等等都可以当做是一个行为,甚至说你希望给你的网站用户的第一次访问弹出Hello,world!这些都可以看成是一种行为,行为的存在让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。而不同的行为之间也具有位置共同性,比如,有些行为的作用位置都是在应用执行前,有些行为都是在模板输出之后,我们把这些行为发生作用的位置称之为标签(位),当应用程序运行到这个标签的时候,就会被拦截下来,统一执行相关的行为,类似于AOP编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。使用行为的定义很简单,只是在某些场景下的应用,可能有点难以理解。在 laravel 中, 类似于其事件监听器, 当触发了某一行为进行自动触发相关的操作方法举个例子来说一个登录的功能,前期我们只需要校验密码即可,按照以往的方法可以这样做function checkLogin() { $this->checkPass(); // -- 新增加的功能 $this->checkMobile(); $this->checkCaptcha(); //... 等等 echo '登录成功'; }在如上操作中,是不是很麻烦,针对一个登录行为, 如果后期功能的增加我们需要不断的去增加功能就必须得去修改控制器代码我们进行解耦该怎么做呢?即将行为,逻辑(钩子)分离开, 让代码更加易于管理使用如下,我们直接上图如上,我们定义了三个不同的即将发生的行为, 分别为连接网络 、 关闭电脑、使用电脑// Connect.php namespace app\index\behavior; class Connect { public function run() { echo '连接网络'; } public function __destruct() { echo '<br/>'; } } // End.php namespace app\index\behavior; class End { public function run() { echo '关闭电脑'; echo '<br/>'; } } // On.php namespace app\index\behavior; class On { public function run() { echo '开启电脑'; echo '<br/>'; } public function qq() { echo '打开QQ'; echo '<br/>'; } public function opBrowser() { echo '打开浏览器'; echo '<br/>'; } public function app_end(&$param) { $param = '结束了'; } }控制器文件 Index.phpnamespace app\index\controller; use think\Hook; class Index { public function __construct() { // 开始绑定使用电脑需要进行的操作 Hook::add('app_init', [ 'app\\index\\behavior\\On', 'app\\index\\behavior\\Connect', ] ); // 批量绑定 Hook::add('qq', 'app\\index\\behavior\\On'); // 自定义标签名 Hook::add('opBrowser', 'app\\index\\behavior\\On'); // 自定义标签名 // Hook::add('app_end', 'app\\index\\behavior\\End'); // 系统标签位,无需绑定,自动执行 } public function index() { echo '我现在需要使用电脑进行社交'; echo '<br/>'; Hook::listen('app_init'); // 手动初始化 Hook::listen('qq'); // 打开qq Hook::listen('opBrowser'); // 打开浏览器 } }输出结果1) 解析首先,我们可以在一个全局中,例如控制器初始化中可以使用 Hook::add 开始进行绑定, 绑定完成后就可以使用 Hook::listen() 执行相关绑定的方法,尽量不要使用Listen音译去理解这个方法他实际上不算监听,实际上是运行的意思, 当Listen的时候,会执行相关在前面绑定的方法, 例如 Hook::listen('app_init') 后便会执行 'app\index\behavior\On', 'app\index\behavior\Connect'中的 run 方法如果 执行的行为标签 app_init 非系统标签或者在 app\index\behavior\On 中有 app_init 方法,则会就会执行其中app_init的方法,而不是执行run2) 自定义标签使用自定义标签必须满足两个条件, 1、Hook::add('qq') 对自定义标签 qq 进行绑定了, 2、对应的行为类中必须存在 qq 这个方法, 否则自动运行 run 方法3) tags.php 行为绑定// ..tags.php <?php return [ 'app_init'=> [ 'app\\index\\behavior\\On', 'app\\index\\behavior\\Connect', ], 'app_end'=> [ 'app\\index\\behavior\\End' ] ];可以在控制器下目录下使用 tags.php 进行绑定。
2023年12月28日
10 阅读
0 评论
0 点赞
2023-12-28
5个PHP+Swoole/Go的问答
5个PHP+Swoole/Go的问答一、Swoole协程的原理?Swoole 和 Go 都支持协程,它们的协程实现原理是不同的:Swoole原理:Swoole是一个基于 C++ 实现的 PHP 协程框架,通过底层的 epoll、reactor、worker 等技术实现协程的调度和事件驱动。在 Swoole 中,通过协程的方式可以实现超常规的并发处理。在 Swoole 中,协程是通过扩展了的 PHP 内核实现的,它底层依托于 epoll、reactor、worker 等技术对 PHP 协程进行调度。对于一个协程任务,Swoole 采用了状态机的设计方式,将任务的每个状态封装成一个函数,从而达到了对协程的全程控制。Go原理:Go语言内置支持协程,通过利用 Go 的调度器实现协程的调度。Go 语言实现中,使用的是基于 M:N 的调度器,其中,M 表示系统线程,N 表示用户级线程(协程),调度器会将多个协程与少量的线程绑定在一起。在 Go 中,协程的实现方式被称为 goroutine。Goroutine 根据需要动态增减系统线程,这使得 Goroutine 的调度能够更加灵活和高效。当一个 Goroutine 阻塞时,调度器会将其挂起,然后继续调度其他 Goroutine,从而提高 Goroutine 的执行效率。同时,Go 的调度器会将多个 Goroutine 绑定在一个 M 上,并将多个 M 绑定在多个系统线程上,这样可以有效提高性能。总体来说,Swoole 和 Go 的协程实现原理都是基于事件循环的原理,底层实现方式略有不同。二、swoole 协程需要注意的点?1、协程不能进行阻塞操作:协程的设计本意就是为了避免线程或进程阻塞,因此在协程中也不能进行阻塞操作,如网络操作应该使用异步非阻塞的方式。2、避免多次切换:协程切换的开销很小,但是多次切换会累加开销,影响性能。因此,应该尽量减少协程的切换。3、注意内存管理:协程之间共享内存空间,需要特别注意内存管理,避免出现内存泄漏等问题。4、禁止在协程内关闭 socket:因为协程之间共享 socket,如果在协程内关闭 socket,会导致其他协程无法继续使用该 socket,从而导致程序出现异常。5、不能使用全局变量:协程之间共享内存空间,如果使用全局变量,可能会导致同时访问全局变量时出现冲突。6、警惕死循环:协程的退出需要使用 co::exit 或者 return 语句,避免出现死循环等异常情况。7、依赖 Swoole 扩展:在使用 Swoole 协程的过程中,需要确保 Swoole 扩展已经正常安装和加载,否则会导致出现错误或无法使用。三、Swoole和Workerman的区别?1、Swoole是异步编程框架,而Workerman使用的是多进程编程。由于异步编程技术的高效性和稳定性,Swoole在性能和负载均衡方面具有明显的优势。2、在异步编程的情况下,Swoole的事件循环机制具有更好的性能和可扩展性,而Workerman的多进程方案可以充分利用多核处理器的性能。3、从代码设计的角度来看,Swoole提供了更多的API和功能,可以方便地实现高性能网络应用。Workerman的API更加简洁明了,更适合初学者。4、Swoole支持协程,可以充分利用CPU资源。workerman虽然在进程间可以共享数据,但是在进程间的内存共享上并不是很好。四、Swoole 协程之间多种方式进行通信?1、协程上下文2、Swoole 协程通讯 API:Swoole 提供了一些协程通信的 API,例如 chan,go 等,可以用于协程之间的任务分配和结果返回等。3、全局变量:Swoole 协程之间也可以通过 PHP 的全局变量进行数据交换,这需要确保变量不会被多个协程同时修改、访问,可以使用 Swoole 提供的 Lock、Condition 等工具来实现协程之间对共享变量的同步访问。4、Topic/Channel:类似于消息队列,Swoole 的 Topic/Channel 可以用于协程之间的消息发送和接收,可以分发异步任务,广播事件消息等。5、MySQL 等 I/O 操作的协程等待和唤醒机制:当使用 Swoole 协程进行 MySQL 等 I/O 操作时,可以使用 Swoole 协程提供的协程等待和唤醒机制,使得程序在等待 I/O 操作时可以立即切换到其它协程,提高程序的并发性能。五、PHP代码常见的优化方法?1、使用swoole等常驻内存的框架,使用协程、连接池提高并发2、减少数据库查询:尽量避免重复查询数据库,可以使用缓存技术,如 memcached、Redis 来存储查询结果。3、代码缓存:使用 APC(Alternative PHP Cache)、OPcache、XCache 等缓存工具可以大幅度提高 PHP 程序的性能。这种方法可以将编译后的 PHP 脚本缓存到内存中,以便下一次执行时能够直接读取。4、减少 HTTP 请求:合并 CSS、JavaScript,图片 CSS Sprites、延迟加载等方法可以减少 HTTP 请求,从而提高网页性能。5、减少代码重复:抽象出相同部分的代码,使其能够多次被调用。这样可以减少代码的重复性,增加 PHP 程序的速度。6、减少正则表达式的使用:正则表达式虽然很强大,但它的运行效率比较低,在 PHP程序中尽可能少使用正则表达式。7、避免过度加载:如果只需要使用一个函数,就不要加载整个类。只加载必要的 PHP 扩展。8、将 PHP 代码中的变量尽可能压缩在局部环境中,避免全局变量的使用。9、使用缓存的模板:Smarty 等缓存模板可以减少服务器的压力,提高页面的显示速度。10、使用高效的字符串函数:PHP 提供了很多高效的字符串处理函数,如 str_replace、substr、preg_match 等。使用这些函数可以提高 PHP 程序的速度。11、使用最新版本的 PHP:每一个新版本的 PHP 都有新的性能优化,使用最新版本的 PHP 能够大幅度提高 PHP 程序的运行速度。
2023年12月28日
7 阅读
0 评论
0 点赞
2023-12-28
php.ini 路径的查找获取方法
PHP配置文件 php.ini 路径的查找获取方法目的:查看当前 PHP 开启了哪些扩展模块笨方法 新建个目录,里面创建一个 index.php 文件,写上如下代码:<?php echo phpinfo();保存后,然后用 PHP 开启一个临时访问 web 端口:php -S localhost:2233用浏览器访问 localhost:2233 就能看到配置.推荐使用方法php -m这个命令能看到当前安装的扩展模块,快且直观:$ php -m [PHP Modules] bcmath bz2 calendar Core ctype curl date dba dom exif FFI ....php.ini 路径怎么找可以通过上面的 笨方法,直接在页面上查看到 php.ini 文件路径,但笨方法始终是笨方法.推荐使用 php --ini效果:$ php --ini Configuration File (php.ini) Path: /usr/local/etc/php/8.1 Loaded Configuration File: /usr/local/etc/php/8.1/php.ini Scan for additional .ini files in: /usr/local/etc/php/8.1/conf.d Additional .ini files parsed: /usr/local/etc/php/8.1/conf.d/ext-opcache.ini #或者使用linux的find # find / -name php.ini这样,就能知道 它的路径 /usr/local/etc/php/8.1/php.ini
2023年12月28日
9 阅读
0 评论
0 点赞
1
...
29
30
31
...
112