首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
185 阅读
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
篇文章
累计收到
33
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
560
篇与
的结果
2023-08-09
PHP处理json的注意点
PHP处理json的注意点代码说明:<?php $json=json_encode($messagebody,JSON_UNESCAPED_UNICODE);//把数据转换成json格式时要加 JSON_UNESCAPED_UNICODE参数,不要把中文转换成 unicode $data =file_get_contents('php://input', 'r'); $data=ltrim($data,"\XEF\XBB\XBF");//去bom $json=json_decode($data,false,512,JSON_BIGINT_AS_STRING); //解析json时,记得加 JSON_BIGINT_AS_STRING参数,把大数字转为字符串,防止传入大的数字而解析不完整。 if (json_last_error() === JSON_ERROR_NONE) { //json格式检查 //没错误可以继续了 } else { //不是一个json格式,记录错误日志 $mmsg=json_last_error_msg(); error_log('not a json:'.$mmsg."\n".$data."\n",3,'errorjson.log'); }
2023年08月09日
10 阅读
0 评论
0 点赞
2023-08-09
php-fpm优化方法详解
php-fpm优化方法详解php-fpm存在两种方式,一种是直接开启指定数量的php-fpm进程,不再增加或者减少;另一种则是开始时开启一定数量的php-fpm进程,当请求量变大时,动态的增加php-fpm进程数到上限,当空闲时自动释放空闲的进程数到一个下限。这两种不同的执行方式,可以根据服务器的实际需求来进行调整。要用到的一些参数,分别是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。下面4个参数的意思分别为:pm.max_children:静态方式下开启的php-fpm进程数量,在动态方式下他限定php-fpm的最大进程数(这里要注意pm.max_spare_servers的值只能小于等于pm.max_children)pm.start_servers:动态方式下的起始php-fpm进程数量。pm.min_spare_servers:动态方式空闲状态下的最小php-fpm进程数量。pm.max_spare_servers:动态方式空闲状态下的最大php-fpm进程数量。如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置的数量个php-fpm进程。如果dm设置为dynamic,4个参数都生效。系统会在php-fpm运行开始时启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
2023年08月09日
12 阅读
0 评论
0 点赞
2023-08-09
关于PHP的回调函数及事件回调的用法
关于PHP的回调函数及事件回调的用法PHP的回调机制,是通过使用 call_user_func(call_user_func_array)实现的。回调函数可以很好地将一些功能从核心功能剥离开。回调机制类似于一种通知机制,在异步编程中经常用到。 就是 我让你做一件事情,你做好了,通过我提供的接口通知我。代码如下。<?php//php 回调函数示例class Callback{public function call(callable $Callback,$args) { call_user_func($Callback, $args);//核心实现 }}$Callback = new Callback();$Callback->call(function ($success) {//传入回调函数,这里以匿名函数实现,也可以传入函数名,或对象的方法名等echo "call $success" ;},999);//call 999//下面再看一个事件回调的示例,利用观察者模式,在事件编程中经常用到。class Event{public $eventMap = array(); function on($evtname , callable $callable ){ //注册一个事件上的响应回调函数 $this->eventMap[$evtname][]=$callable; } function trigger($evtname , $args=null){ //触发一个事件,也就是循环调用所有响应这个事件的回调函数 foreach ($this->eventMap[$evtname] as $key => $value) { call_user_func_array( $this->eventMap[$evtname][$key] , $args); } }}$MyClass = new Event();$MyClass->on('post' , function($a , $b ){echo " a = $a ; \n "; echo " b = $b ; \n "; echo " a + b = ".( $a + $b) . ";\r\n ";} );$MyClass->on('post' , function($a , $b ){echo " a = $a ; \n "; echo " b = $b ; \n "; echo " a * b = ".( $a * $b) . ";\r\n ";} ); $MyClass->trigger('post' , array( 123 , 321 ) );//触发事件 //a = 123 ; //b = 321 ; //a + b = 444;//a = 123 ; //b = 321 ; //a * b = 39483;
2023年08月09日
14 阅读
0 评论
0 点赞
2023-08-09
PHP 错误与异常的日志记录
PHP 错误与异常的日志记录提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志、error 日志以及 PHP 的 error 日志。虽然看起来是个很简单的问题,但里面其实又牵扯到应用配置以及日志记录位置的问题,如果是在 ubuntu 等系统下使用 apt-get 的方式来安装,其自有一套较为合理的的配置文件可用。再者运行的应用程序中的配置也会影响到日志记录的方式及内容。错误与异常的区别关于错误与异常,我们可以用一个简单的例子来理解:<?phptry {1 / 0;} catch (Exception $e) {echo "catched", PHP_EOL;}执行这个小示例会直接得到一个『PHP Warning: Division by zero …』错误。原因很简单:这是逻辑错误,并不是异常,所以不能被 try 捕获。同样,对于变量使用前未定义这种问题,也是同样的会产生 warning 而不是被捕获。但是这个问题在 PHP7 中却有了一些改动,比如上面的例子中我把 / 改成 %,在 PHP7 的环境中执行会得到一个不一样的提示:PHP Fatal error: Uncaught DivisionByZeroError ...根据这个提示,如果我把 catch 中的条件修改一下:<?phptry {1 / 0;} catch (DivisionByZeroError $e) {echo "catched", PHP_EOL;}这样就可以正常捕获到错误并输出 catched 了。对于第一个示例,同样如果把 Excepiton 修改为 ErrorException 也可以正常捕获。至于为什么求余和除法,在 PHP5 中提示一致而在 PHP7(我的测试环境是 7.0.4) 中除法不属于 DivisionByZeroError 的问题,这应该是个 BUG。日志的记录PHP 本身可配置的 log 大概有以下几个:php-fpm error log(php-fpm.conf 中配置,记录 php-fpm 进程的启动和终止等信息)php-fpm slow log(也是在 php-fpm.conf 中配置,记录慢执行)php error log(php.ini 中配置,记录应用程序的错误日志)此外 Nginx 还有两个可配置的log:access 和 error log。这几个日志文件的功能不同,记录的内容也不同。但其中有一个点需要注意:如果配置了 php-fpm 中的 error log 位置,但日志位置不可写(配置时位置得是对的,因为 php-fpm 启动时会做检查),在适当的配置条件下错误日志会被返回到 cgi 中从而写入 nginx 的 error log 中。所以遇到问题是我们一般的查找思路都是:到 Nginx access log 中查看请求的状态码查看 php error log 中的错误记录以及 stack 信息查看 php-fpm log 中有无异常重启记录(如果核心或者扩展问题,会出现此情况)但是在以上几种情况下你也会发现,这里面并没有上文提到的程序抛出异常的日志记录。异常记录异常不同于错误,严格上说它是应用程序逻辑的异常而不是错误,是可以通过合理的程序逻辑来手动触发的。但大多情况下异常也是要进行记录的,比如数据库无法连接或者框架的不当使用触发的异常,我们需要通过日志来定位问题并及时处理。PHP 提供了两个函数用于自定义处理错误和异常的方法:set_error_handlerset_exception_handler所以可以通过 set_exception_handler 函数注入方法捕获所有的异常并记录 。monolog 是一个优秀的异常记录的库,也是基于 PSR-3 标准的实现。Laravel、Symfony 中默认也是使用它来记录异常。如有需要,也可以考虑在自己的项目中引入。
2023年08月09日
9 阅读
0 评论
0 点赞
2023-08-09
swoole 收藏集
Swoole2.0协程的使用和源码解读使用webrtc和swoole实现音视频直播项目
2023年08月09日
18 阅读
0 评论
0 点赞
1
...
61
62
63
...
112