首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
184 阅读
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
如何优雅的使用异常
如何优雅的使用异常老子曰:程序开发时,有 80% 的代码在处理各种异常。由于php实在是太过于灵活简单,很多phper对异常的处理其实不太感冒,于是乎,我们会经常看到die("xxx"); exit("xxx"); 这样的异常处理,但这类异常对于项目的稳定性却很不友好,主要有以下几点问题:1:粗暴的打断正常的业务流。2:调试非常因难。3:灵活度太差那我们展开来看这三个问题:1:现代的框架,大都有一个标准的处理流程:_before(); //前置控制器,可以做一个数据的初始化run(); //业务逻辑的处理_after(); //后置控制器,在处理完业务,有机会进行收尾(比如回收资源,统一打日志等)。但如果的 业务逻辑处理里(run)直接用 exit, die这类函数会直接退出php当前脚本的执行,从而跳过_after(),这显然不符合正常的逻辑。2:笔者曾经有个经历,打开某个页面,突然白屏,经过一翻苦苦的debug,终于在某处发现了一个孤零零的exit,没有任何提示,碰到这样的代码,对于调试者来说,就是个噩梦。3:现在已经不再是pc互联网的时候,移动互联网比例已大幅增加,这时,我们往往是输出一个接口,如果直接碰到exit, die这类输出可能直接导致客户端崩溃。那正确的使用方式是什么?没错,就是php自带的Exception, php自带的Exception非常的强大而且友好,可能由于历史原因,很多人没有习惯使用它。所以,针对第一个问题,我们在进行框架设计的时候,就可以这么处理:try { $ctrl->_before(); $ctrl->$method(); $ctrl->_after(); } catch (\Exception $e) { $ctrl->_atfer(); //让_after在异常后也能正常执行 throw $e; //再抛出异常 }抛出异常之后, 通过Exception类自带的 getTrace()方法,可以获得调用栈,这样就能很方便的进行调试。最后可以通过set_exception_handler自定义异常处理,最终输出正确的数据格式。帖上一小段我常用的异常处理代码。假定我们的api代码约定:{ code: 0, //非0表示异常 msg: "", //提示信息,非0时有值 data: {} //code=0时的业务数据, }自定义异常处理类<?php class MyException extends \Exception { public $realCode = ''; public function __construct($message, $code = -1) { $this->realCode = $code; parent::__construct($message, $code); } public static function exceptionHandler(\Exception $exception) { $model = ZFormater::exception($exception); //格式化异常 Log::info([\var_export($model, true)], 'exception'); //异常写日志 $info = array(); if(property_exists($exception, 'realCode')) { $codeArr = explode('_', $exception->realCode); if(count($codeArr) > 1) { $model['code'] = intval($codeArr[0]); $model['msg'] = $codeArr[1]; } } if ($config['debug_mode']) { //调式模式,输出调用栈 $info['debug'] = $model; } $info['msg'] = $model['message']; $info['ret'] = empty($model['code']) ? -1 : $model['code']; if(Request::isAjax()) { //ajax请求,json串输出 Request::setViewMode('Json'); } if('Php' == Request::getViewMode()) { //页面请求,统一的异常页面展示 if ($config['debug_mode']) { Request::setTplFile('public/exception.php'); } else { Request::setTplFile('public/error.php'); } } Response::display($info); } realCode对应的定义: <?php class ERROR { const DEF_MSG = '系统异常'; //系统级异常码 const PARAM_ERROR = '1_参数异常'; const NEED_LOGIN = '2_需要登录'; const USER_ERROR = '3_用户名不存在'; const PASS_ERROR = '4_密码异常'; }然后通过set_exception_handler("MyException::exceptionHandler"); 进行自定义异常处理后,我们在业务层,碰到异常的逻辑,就可以统一的、愉快的进行下面这样的异常抛出了:throw new MyException('param xxx error', ERROR::PARAM_ERROR);那么最终输出的api将会是:{ "code": 1, "msg": "参数异常" }这样就可以和exit, die 说再见了。PS: 以上代码大都取自zphp框架,详细可参考ZPHP框架: https://github.com/shenzhe/zphp
2023年08月09日
12 阅读
0 评论
0 点赞
2023-08-09
PHP程序员进阶学习书籍参考指南
PHP程序员进阶学习书籍参考指南【初阶】(基础知识及入门)《PHP与MySQL程序设计(第4版)》 http://item.jd.com/10701892.html《深入浅出MySQL 数据库开发 优化与管理维护 第2版》 http://item.jd.com/11381295.html《实战Nginx:取代Apache的高性能Web服务器》 http://dwz.cn/2K1ryn《Redis 实战》 http://item.jd.com/11791607.html《MongoDB权威指南 第2版》 http://item.jd.com/11384782.html《Linux系统命令及Shell脚本实践指南》 http://item.jd.com/11354663.html【中阶】(基本系统知识相关,可阅读类似书籍)《图解HTTP》 http://item.jd.com/11449491.html《图解TCP/IP 第5版》 http://item.jd.com/11253710.html《大话设计模式》 http://item.jd.com/10079261.html《大话数据结构》 http://item.jd.com/10663703.html《编译原理(第2版)》 http://item.jd.com/10058776.html《Linux C 编程一站式学习》 http://dwz.cn/2K1C3n《PHP应用程序安全编程》 http://dwz.cn/2K317p《高性能PHP应用开发》 http://dwz.cn/2K1kcy《PHP核心技术与最佳实践》 http://item.jd.com/11123177.html《高性能MySQL(第3版)》 http://item.jd.com/11220393.html《深入理解MariaDB与MySQL》 http://item.jd.com/11835700.html《构建高可用Linux服务器(第3版)》 http://item.jd.com/11557939.html【中高阶】(深入理解系统)《深入理解计算机系统(原书第2版)》 http://item.jd.com/10360906.html《现代操作系统(原书第3版)》 http://item.jd.com/10058893.html《数据库系统概念(原书第6版)》 http://item.jd.com/10954261.html《数据库系统实现(第2版)》 http://item.jd.com/10060181.html《UNIX环境高级编程(第3版)》 http://item.jd.com/11469694.html《UNIX网络编程 卷1 套接字联网API(第3版)》 http://item.jd.com/11728741.html《Linux高性能服务器编程》 http://item.jd.com/11252777.html【高阶】(深入理解服务原理)《深入理解PHP内核》 http://www.php-internals.com/book/《深入理解MySQL》 http://item.jd.com/10063042.html《MySQL技术内幕:InnoDB存储引擎(第2版)》 http://item.jd.com/11252326.html《深入剖析Nginx》 http://item.jd.com/11226514.html《深入理解Nginx:模块开发与架构解析》 http://item.jd.com/11217076.html《Redis设计与实现》 http://item.jd.com/11486101.html【架构及升级】(Web架构、分布式、云计算、机器学习等方向)《大规模Web服务开发技术》 http://dwz.cn/2K2o1d《大型分布式网站架构设计与实践》 http://item.jd.com/11529266.html《大型网站技术架构 核心原理与案例分析》 http://item.jd.com/11322972.html《大规模分布式系统架构与设计实战》 http://item.jd.com/11417660.html《大规模分布式存储系统:原理解析与架构实战》 http://item.jd.com/11310547.html《分布式系统:概念与设计(原书第5版)》 http://item.jd.com/11194499.html《Hadoop权威指南(第3版 修订版)》 http://item.jd.com/11566298.html《Cassandra权威指南》 http://item.jd.com/10794341.html《云计算架构技术与实践》 http://item.jd.com/11537731.html《OpenStack开源云王者归来》 http://item.jd.com/11521443.html《数据挖掘 概念与技术(原书第3版)》 http://item.jd.com/11056660.html《机器学习》 http://item.jd.com/10131321.html《图解机器学习》 http://item.jd.com/11676112.html《机器学习实战》 http://item.jd.com/11242112.html【番外篇】(可以参考延展学习)《深入PHP:面向对象、模式与实践(第3版)》 http://item.jd.com/10794350.html《Linux网络编程(第2版)》 http://item.jd.com/11397772.html《Linux多线程服务端编程 使用muduo C++网络库》 http://item.jd.com/11163782.html《Linux运维之道》 http://item.jd.com/11375254.html《Linux性能优化大师》 http://item.jd.com/11734651.html《PostgreSQL修炼之道:从小工到专家》 http://item.jd.com/11684063.html《图解网络硬件》 http://item.jd.com/11506709.html《网络安全基础:网络攻防、协议与安全》 http://item.jd.com/10550797.html《密码学原理与实践(第3版)》 http://item.jd.com/10067358.html《黑客大曝光:网络安全机密与解决方案(第7版)》 http://item.jd.com/11307435.html《黑客攻防技术宝典 Web实战篇 第2版》 http://item.jd.com/11020022.html《精通正则表达式(第3版)》 http://item.jd.com/11070361.html《Go语言编程》 http://item.jd.com/11067810.html《Python基础教程(第2版 修订版)》 http://item.jd.com/11461683.html《快学Scala》 http://item.jd.com/11113845.html《Erlang/OTP并发编程实战》 http://item.jd.com/11037265.html《函数式编程思维》 http://item.jd.com/11763847.html《Android从入门到精通》 http://item.jd.com/11078112.html《iOS开发指南》 http://item.jd.com/11681585.html《搜索引擎:信息检索实践》 http://item.jd.com/10059723.html《统计自然语言处理(第2版)》 http://item.jd.com/11314362.html《这就是搜索引擎:核心技术详解》 http://item.jd.com/10893803.html《Elasticsearch服务器开发(第2版)》 http://item.jd.com/11615450.html《实战Elasticsearch、Logstash、Kibana》 http://item.jd.com/11706768.html《推荐系统实践》 http://item.jd.com/11007625.html《机器学习实践指南:案例应用解析》 http://item.jd.com/11447036.html《Hadoop实战(第2版)》 http://item.jd.com/11116710.html《Hadoop大数据分析与挖掘实战》 http://item.jd.com/11837003.html《Spark大数据处理:技术、应用与性能优化》 http://item.jd.com/11577088.html《Spark机器学习》 http://item.jd.com/11763016.html
2023年08月09日
14 阅读
0 评论
0 点赞
2023-08-09
PHP AJAX JSONP实现跨域请求
PHP AJAX JSONP实现跨域请求代码示例:js代码<script> $.ajax({ type : "get",//get方法 async:false, url : "json.php", dataType : "jsonp", //类型 jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback) //jsonp回调参数,必需 jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名(如果一个页面有多个jsonp请求,请在这里起不同的名字) success:function(json){ alert(json); alert(json[0].aid); }, error:function(){ alert('fail'); } }); }); </script>**PHP代码:json.php **<?php $callback = $_GET['callback']; //jsonp回调参数,必需 $data=array(array('aid'=>22,'name'=>'张三','age'=>30)); echo $callback.'('.json_encode($data).')'; //返回格式,必需 ?>
2023年08月09日
11 阅读
0 评论
0 点赞
2023-08-09
PHP企业应用开发十大问题
如何解决全文检索的问题(不依赖第三方搜索引擎)如何解决计划任务的问题(不依赖操作系统计划任务)如何用户二次开发无法升级的问题如何和其他格式文件进行数据的交换。常见安全问题的防护(xss, sql注入,附件上传,csrf等)如何用PHP做聊天服务器。(做轻量级的解决方案)如何解决PHP环境部署问题。如何选择PHP的开发框架。如何解决消息通知的问题。如何保护自己的代码?
2023年08月09日
13 阅读
0 评论
0 点赞
2023-08-09
PHP安全编码
一、系统层面的安全策略1.1 隐藏ip1.2 服务、权限、类库最小化1.3 最新的小版本号1.5 关注最新的依赖的软件的漏洞信息,时刻准备打补丁。1.6 权限划分和设置,防止提权二、编码层面的安全策略2.1 参数过滤2.2 sql 注射、二次注射、旁注2.3 XSS 攻击2.4 相关的类库安全2.5 专门的审核人员2.6 市面上的漏洞扫描工具利用三、防范社工3.1 管理员、相关人员信息泄漏和潜在危险3.2 撞库、md5 碰撞四、0day 攻击和奇葩漏洞的应对4.1 举个栗子:gbk 漏洞和文件后缀解析4.2 如何应对
2023年08月09日
12 阅读
0 评论
0 点赞
1
...
69
70
71
...
112