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地址
廣播發送數據
實體層:
掃面下方二維碼關注個人技術公衆號,及時爲你們推送個人原創技術分享