a little tips in my code career | 码码踩过的那些坑2015-2016php
记一下这一年码码中我须要去了解的基础知识,有不对的欢迎你们指证出来 :https://github.com/TIGERB/car...
开闭原则:对扩展开放,对修改封闭html
依赖倒转:对接口编程,依赖于抽象而不依赖于具体mysql
象,实现的方法各有不一样,各个实体相互独立没有依赖,各个实体离开谁都能活linux
接口隔离:使用多个接口,而不是对一个接口编程,去依赖下降耦合nginx
最少知道:减小内部依赖,尽量的独立laravel
合成复用:多个独立的实体合成聚合,而不是使用继承git
里氏代换:超类(父类)出现的地方,派生类(子类)均可以出现github
核心:高内聚松耦合(单一职责),外部依赖,实体对抽象编程,抽象就是分层
step5:nginx匹配请求web
流程:redis
// nginx 配置资料 location ~ \.php$ { include snippets/fastcgi-php.conf; //step1 fastcgi_pass unix:/run/php/php7.0-fpm.sock; }
的ngnix发挥的是反向代理的角色,把http协议请求转到fastcgi协议请求
// nginx 配置资料 location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock;// step2 }
linux的进程间通讯方式unix domain socks,是一种基于文件而不是网络底册协议的通讯方式
子进程都包含一个php解析器
//phpfpm配置 pm.max_children = 最大并发数 详细的答案: pm.max_children 表示 php-fpm 能启动的子进程的最大数量。 由于 php-fpm 是多进程单线程同步模式,即一个子进程同时最多处理一个请求,因此子进程数等于最大并发数。
//日志调试方法 /** * 超级调试 * * 调试非本地环境或分布式环境,经过Log查看变量传递 * 写入变量值到\var\log\php_super_debug.log * @param mixed $data 日志数据 * @param string $log_path 日志路径 * @param string $log_name 日志名称 * @return void */ function super_debug($data, $log_path='\var\log\', $log_name='debug') { error_log(json_encode($data, JSON_UNESCAPED_UNICODE)."\n", 3, $log_path.$log_name); }
// php实现下载图片 header('Content-type: image/jpeg'); header('Content-Disposition: attachment; filename=download_name.jpg'); readfile($yourFilePath);
// php5.6开始干掉了@语法,php上传图片兼容版本写法 if (class_exists('\CURLFile')) { curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true); $data = array('file' => new \CURLFile(realpath($destination)));//5.5+ } else { if (defined('CURLOPT_SAFE_UPLOAD')) { curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false); } $data = array('file' => '@' . realpath($destination));//<=5.5 }
// 序列化与反序列化 概念: 序列化:把变量(全部类型)转成能传输和储存的变量(不丢失原变量的属性和结构) 反序列化:把字符串转成原变量 函数: 序列化:serialize, json_encode(不能序列化对象) 反序列化:unserialize, json_decode
// 记一个坑 ip2long函数 - 32位系统下会转成带符号的int,范围-2^31~2^31-1 - 64位系统下会转成带不符号的int,范围0~2^32-1
# redis发布订阅 ini_set(‘default_socket_timeout’, -1); $redis = new \Redis(); $redis->pconnect('127.0.0.1', 6379); //订阅 $redis->subscribe(['msg'], 'callfun'); function callfun($redis, $channel, $msg) { var_dump([ 'redis' => $redis, 'channel' => $channel, 'msg' => $msg ]); } //发布 $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $redis->publish('msg', 'moon cake'); $redis->close();
linux
socket
mysql
彻底克隆一张表:
php:
git:
composer:
应用层:
传输层(端口到端口的通讯):
端口:
UDP协议:
TCP协议:
tcp/ip connect: tcp/ip的三次握手 syn握手信号 -------------> syn/ack确认字符 client <------------- server ack确认包 -------------->
网络层(主机到主机的通讯):
IP协议
ipv4:
IP数据包的传递:
连接层:
定义数据包(帧Frame)
定义网卡和网卡惟一的mac地址
广播发送数据
实体层:
扫面下方二维码关注个人技术公众号,及时为你们推送个人原创技术分享