首页
关于
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-08-08
Swoole介绍
PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。Swoole可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网、车联网、智能家居等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。优势纯C编写性能极强简单易用开发效率高事件驱动异步非阻塞并发百万TCP连接TCP/UDP/UnixSock服务器端/客户端全异步/半异步半同步多进程/多线程SSL/TLS隧道加密IPv4/IPv6网络案例swoole目前已被多家移动互联网、物联网、网络游戏、手机游戏企业使用,替代了C++、Java等复杂编程语言来实现网络服务器程序。 使用PHP+Swoole,开发效率可以大大提升。官方提供了基于swoole扩展开发的 PHP网络框架 , 支持Http,FastCGI, WebSocket ,FTP,SMTP,SOA等网络协议。swoole在美国,英国,法国,印度等国家都有用户分布,在国内的腾讯、阿里、YY语音等多家知名互联网公司均有使用。
2023年08月08日
37 阅读
0 评论
0 点赞
2023-08-08
非常实用的15款开源PHP类库
非常实用的15款开源PHP类库PHP库给开发者提供了一个标准接口,它帮助开发者在PHP里充分利用面向对象编程。这些库为特定类型的内置功能提供了一个标准的API,允许类可以与PHP引擎进行无缝的交互。此外,开发者使用这些类库还可以简化工作流程,提供工作效率。下面就一起来看看这些非常实用且免费的类库吧,希望它们能助你一臂之力。1.RequestsRequests是一个用PHP编写的HTTP库,遵循ISC开源协议,托管在GitHub上。Requests取代了Python HTTP/1.1以外的一切工作———让你与Web服务可以无缝的结合。Requests提供了一致的API,并且使用cURL或fsockopen(具体取决于可用性),它还简化了发送请求,接受HEAD、GET、POST、PUT、DELETE或PATCH并且添加标头、表单数据和多个部分组成的文件。其次,该库还适用于国际域名、身份验证、自动压缩gzip压缩响应等。综上所述可以看出,Requests是一个非常好用且可以友好托管HTTP请求的标签。2.MuneeMunee是一个集图片尺寸调整、CSS-JS合并/压缩、缓存等功能于一身的PHP库。可以在服务器端和客户端缓存资源。它集成了PHP图片操作库Imagine来实现图片尺寸调整和剪切,之后进行缓存。Munee可以自动编译LESS、SCSS和CoffeeScript,并且可以把CSS+JS文件合并成一个单一的请求,此外,还可以对这些CSS-JS文件进行精缩,让其拥有更好的性能表现。该库还可以轻易地与任何代码集成。3.RatchetRatchet是一个PHP库、WebSockets工具包,开发者可以使用它在客户端和服务器端之间构建实时、双向的App应用,并且可以快速简单地构建事件驱动应用程序(而不是传统的HTTP 请求/响应应用程序)。4.Swift MailerSwift Mailer是一个功能丰富的PHP邮件库,不依赖于PHP自带的mail() 函数,因为该函数在发送多个邮件时占用的系统资源很高。Swift直接与SMTP服务器通讯,具有非常高的发送速度和效率。5.UnirestUnirest是一个轻量级的HTTP开发库,可用于PHP、Ruby、Python、Java、Objective-C等开发语言。支持GET、POST、PUT、UPDATE、DELETE操作,它的调用方法与返回结果对所有开发语言来说,都是相同的。6.DetectorDetector是一个开源的PHP类库,用于检测用户的浏览器环境。它可以获得浏览器的使用情况和浏览器的HTML5 CSS3功能、并分析是否是移动、平板电脑、桌面或网页爬虫和其他项,如:颜色深度、 视频尺寸、Cookie等。该库对每个浏览器用户都使用单一的用户代理字符串来自动适应新浏览器、版本和设备。7.PHP ThumbPHP Thumb是一个PHP类,用来生成图片的缩略图。 只需数行代码即可,支持多种图片来源,包括文件系统或者数据库,支持大多数图片格式。并可对图片进行旋转、剪切、加水印等等。可自定义缩略图的质量,提供内建的缓存以降低服务器的负载。8.Zebra ImageZebra Image是一个开源的轻量级图像处理库,并且是一款面向对象库,只需PHP GD2扩展,并支持缩放、裁剪、旋转和翻转操作。它可以用于.jpg、.gif、.png等格式。9.Hybrid AuthHybridAuth是一个开源PHP类库,用于通过微博/社交网站和ID来提供验证功能实现同步登录网站功能。它能够很方便的与现有网站相集成,只要引用一个文件并添加几行代码就能够实现登录。一旦验证,HybridAuth会提供连接用户的标准化相关资料。此外,除了验证功能,这个类库能够让我们与用户连接的social API客户端相交互。10. Gantt ChartsGantti是一个开源的PHP类,帮助用户即时生成Gantt图表。使用Gantti创建图表无需使用JavaScript,是纯HTML5-CSS3。图表默认输出非常漂亮,但用户可以自定义样式进行输出(SASS样式表)。11.Mobile DetectMobile Detect是一个PHP类,通过User-Agent检测各种手机设备,并结合HTTP Header来检测移动设备环境。该类库最强大的地方是,它有一个非常完整的库,可以检测出所用的设备类型(包括操作类型、以及手机品牌等都能检测)和浏览器的详细信息。12.ImageWorkshop顾名思义,ImageWorkshop是一个管理和操作图片的PHP类库,这个类拥有类似图片编辑软件的逻辑:基于层的概念,可以叠加很多层或层组(每一层不同的操纵选项)。它还支持许多功能,比如水印、裁剪、移动、缩放、旋转、叠加等。13.JqmPhpJqmPhp是一个PHP开源类库,旨在简化jQuery与PHP来进行移动开发,用于生成使用jQuery Mobile框架所需要的HTML文件。该类库的文件是独立的,所以你可以根据需要来选择使用。14.PHP Image CacheImage Cache是一个轻量级的PHP类,可以在用户浏览器里压缩、移动、缓存图片。这个类提供一些简单的设置如:目录、根路径URL等,然后针对每一张图片调用压缩功能。15.ImagineImagine是一个面向对象的PHP类库,用于图片操作。这个类库能够处理一些经常用到的操作如:缩放、裁剪、应用过滤等。其Color类库可用于对任意特定的颜色生成RGB值。并且还提供一些方法来绘制图形如:圆弧、椭圆、线、片等。
2023年08月08日
13 阅读
0 评论
0 点赞
2023-08-08
php中的数种依赖注入
php中的数种依赖注入经常看到却一直不甚理解的概念,依赖注入(DI)以及控制器反转(Ioc),找了几篇好的文章,分享一下。 自己理解的,依赖注入就是组件通过构造器,方法或者属性字段来获取相应的依赖对象。举个现实生活中的例子来理解, 比如我要一把菜刀 如何获得1.可以自己造一把,对应new一个。2.可以找生产菜刀的工厂去买一把,对应工厂模式。3.可以打电话 让店家送货上门,对应依赖注入。再比如我是一个演员,我不可能要求某个导演,我要演某某剧的男一号,相反,导演可以决定让谁来演。而我们的object就是这个演员。注入的几个途径:1.construct注入帮助<?phpclass Book { private $db_conn; public function __construct($db_conn) { $this->db_conn = $db_conn;}}但是如果依赖过多,那么在构造方法里必然传入多个参数,三个以上就会使代码变的难以阅读。2.set注入帮助<?php $book = new Book(); $book->setdb($db); $book->setprice($price); $book->set_author($author);?>代码很清晰,但是当我们需要注入第四个依赖时,意味着又要增加一行。比较好的解决办法是 建立一个class作为所有依赖关系的container,在这个class中可以存放、创建、获取、查找需要的依赖关系帮助<?phpclass Ioc { protected $db_conn; public static function make_book() { $new_book = new Book(); $new_book->set_db(self::$db_conn); //... //... //其他的依赖注入 return $new_book;}}此时,如果获取一个book实例,只需要执行$newone = Ioc::makebook();以上是container的一个具体实例,最好还是不要把具体的某个依赖注入写成方法,采用registry注册,get获取比较好。帮助<?phpclass Ioc {/**@var 注册的依赖数组*/ protected static $registry = array(); /**添加一个resolve到registry数组中@param string $name 依赖标识@param object $resolve 一个匿名函数用来创建实例@return void */public static function register($name, Closure $resolve) {static::$registry[$name] = $resolve;} /**返回一个实例@param string $name 依赖的标识@return mixed */public static function resolve($name) { if ( static::registered($name) ) { $name = static::$registry[$name]; return $name(); } throw new Exception('Nothing registered with that name, fool.');} /**查询某个依赖实例是否存在@param string $name id@return bool */public static function registered($name) {return array_key_exists($name, static::$registry);}}现在就可以通过如下方式来注册和注入一个依赖帮助<?php$book = Ioc::registry('book', function(){$book = new Book;$book->setdb('...');$book->setprice('...');return $book;});//注入依赖$book = Ioc::resolve('book');?>http://net.tutsplus.com/tutorials/php/dependency-injection-huhhttp://scriptogr.am/mattsah/post/dependencies-in-phphttp://martinfowler.com/articles/injection.htmlhttp://www.potstuck.com/2009/01/08/php-dependency-injection/http://www.potstuck.com/2010/09/09/php-dependency-a-php-dependency-injection-framework/http://www.cnblogs.com/Seekr/archive/2012/06/20/2556463.html
2023年08月08日
10 阅读
0 评论
0 点赞
2023-08-08
PHP非阻塞模式
PHP非阻塞模式让PHP不再阻塞当PHP作为后端处理需要完成一些长时间处理,为了快速响应页面请求,不作结果返回判断的情况下,可以有如下措施:一、若你使用的是FastCGI模式,使用fastcgi_finish_request()能马上结束会话,但PHP线程继续在跑。帮助echo "program start.";file_put_contents('log.txt','start-time:'.date('Y-m-d H:i:s'), FILE_APPEND);fastcgi_finish_request();sleep(1);echo 'debug...';file_put_contents('log.txt', 'start-proceed:'.date('Y-m-d H:i:s'), FILE_APPEND);sleep(10);file_put_contents('log.txt', 'end-time:'.date('Y-m-d H:i:s'), FILE_APPEND);这个例子输出结果可看到输出program start.后会话就返回了,所以debug那个输出浏览器是接收不到的,而log.txt文件能完整接收到三个完成时间。二、使用fsockopen、cUrl的非阻塞模式请求另外的网址帮助$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);if (!$fp) die('error fsockopen');stream_set_blocking($fp,0);$http = "GET /save.php / HTTP/1.1\r\n"; $http .= "Host: www.example.com\r\n"; $http .= "Connection: Close\r\n\r\n";fwrite($fp,$http);fclose($fp);利用cURL中的curl_multi_*函数发送异步请求帮助$cmh = curl_multi_init();$ch1 = curl_init();curl_setopt($ch1, CURLOPT_URL, "http://localhost:6666/child.php");curl_multi_add_handle($cmh, $ch1);curl_multi_exec($cmh, $active);echo "End\n";三、使用Gearman、Swoole扩展Gearman是一个具有php扩展的分布式异步处理框架,能处理大批量异步任务;Swoole最近很火,有很多异步方法,使用简单。(尘缘注:号称重新定义PHP,把NodeJS喷得体无完肤。Swoole工具虽好,却感觉是扩展本身跟NodeJS没可比性)四、使用redis等缓存、队列,将数据写入缓存,使用后台计划任务实现数据异步处理。这个方法在常见的大流量架构中应该很常见吧五、极端的情况下,可以调用系统命令,可以将数据传给后台任务执行,个人感觉不是很高效。帮助12$cmd = 'nohup php ./processd.php $someVar >/dev/null &';$cmd六、外国佬的大招,没看懂,php原生支持http://nikic.github.io/2012/12/22/Cooperative-multitasking-using-coroutines-in-PHP.html七、安装pcntl扩展,使用pcntl_fork生成子进程异步执行任务,个人觉得是最方便的,但也容易出现zombie process。帮助if (($pid = pcntl_fork()) == 0) {child_func(); //子进程函数,主进程运行} else {father_func(); //主进程函数}echo "Process " . getmypid() . " get to the end.\n";function father_func() {echo "Father pid is " . getmypid() . "\n";}function child_func() {sleep(6); echo "Child process exit pid is " . getmypid() . "\n"; exit(0);}
2023年08月08日
8 阅读
0 评论
0 点赞
2023-08-08
TCP的三次握手与四次挥手理解
TCP的三次握手与四次挥手理解
2023年08月08日
12 阅读
0 评论
0 点赞
1
...
86
87
88
...
112