[TOC]
# php7和php5兼容性檢查
截止目前基本上絕大多數的PHP都可以完美的支持PHP7.0了。但是可能你恰好有一些歷史遺留的腳本和程序,那么也好辦,社區已經有好多的工具做兼容性檢查,甚至給出直接的代碼轉譯,以下是幾個值得推薦的工具:
php7cc:一個很不錯的工具,不過目前已經不再更新了。(github地址: /sstalle/php7cc)
php7mar:PHP 7遷移助手。 (github地址:/Alexia/php7mar)
使用方法:
~~~
php mar.php -f="/path/to/project/root/" -r="/path/to/output/"
~~~
phan:PHP腳本的靜態分析器。 可以做當做php 7的語法檢查器。(github地址:/phan/phan)
`phan --project-root-directory --progress-bar -o phan.out`
phpstan - PHP靜態分析和兼容性檢查工具。(github地址:/phpstan/phpstan)
# php7性能設置要點
## Opcache
首先,確保已經啟用了OpCache。可以通過主配置文件php.ini或它獨特的配置文件opcache.ini文件(例如/etc/php/7.2/fpm/conf.d/10-opcache.ini)。來進行設置。
~~~
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
~~~
## 設置合適的realpath_cache_size
通過設置合宜的realpath_cache_size值可以改善你服務器的并發:
~~~
realpath_cache_size = 256k
realpath_cache_ttl = 300
~~~
equire,require_once,include,include_once這四個語句(并非函數)大家經常會用到,如果用這類語句去包含文件(相對路徑)的話,那么PHP會去include_path所 指定的路徑中去查找相關文件。一個應用中會存在大量的require_once語句調用,如果每次調用都去include_path中查找相應的文件,勢 必會對應用的性能產生負面影響。為了避免這種負面效應產生的影響,PHPER們會使用文件的絕對路徑來包含所需的文件,這樣就減少了查詢 include_path的次數。
其實,PHP自5.1.0起,就引入了RealpathCache。RealpathCache可以把PHP所用到文件的realpath進行緩存,以便PHP再使用這些文件的時候不需要再去include_path中查找,加快PHP的執行速度。
其中realpath_cache_size指定了realpath cache的大小,默認為16k,如果你覺得這個容量太小,可以適當增加;realpath_cache_ttl指定了緩存的過期時間,默認為120秒, 對于不經常修改的生產環境來說,這個數字可以調整的更大些。
由于realpath會 展開symlink(即軟連接),所以如果你使用修改symlink目標這種方式發布應用的新版本的話,realpath cache會導致一些問題的出現:當你修改symlink使其指向一個新的release目錄時候,由于realpath cache所緩存內容還沒有過期,于是就會出現應用使用的還是舊的release,直到realpath cache所緩存內容過期失效為止(默認120秒),或者重啟php-fpm。
## 禁止mysqlnd.collect_statistics
~~~
mysqlnd.collect_statistics = Off
mysqlnd.collect_memory_statistics = Off
~~~
線上服務器選擇禁止這兩個選項,可以減少不必要的數據庫訪問。如果需要相關統計,可以使用MySQL工具或者監控。
是否啟用mysql內存訪問統計,可以通過下列函數獲取信息mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_stats()
生產環境為關閉
開發環境為打開
## 使用新的編譯器
GCC 4.8編譯器下編譯時PHP才能開啟Global Register for opline and execute_data支持, 這個會帶來5%左右的性能提升。
## 開啟Transparent HugePage (透傳大頁)
內存默認是以4KB分頁的,而虛擬地址和內存地址需要轉換,轉化時候需要進行搜索,為了加速轉換過程,可以通過內存TLB(Translation Lookaside Buffer)來。所以通過啟用大內存頁可以增加TLB 緩存命中,從而提高性能。
設置系統支持:
~~~
sysctl vm.nr_hugepages=512
~~~
php.ini 增加支持
~~~
opcache.huge_code_pages=1
~~~
關于這個值,很多實踐后發現啟用透傳大頁面后會帶來系統負載過高,cpu占用過高問題,這時候通過關閉就可以解決。所以這個參數需要實際情況斟酌測試使用。
## 開啟PGO
PHP是專門為一個項目服務,比如一個 Wordpress或者drupal站點,就可以使用PGO提高性能
- OAuth
- 簡介
- 步驟
- 單點登錄
- .user.ini
- 時間轉換為今天昨天前天幾天前
- 獲取ip接口
- 協程
- 概念
- yield-from && return-values
- 協程與阻塞的思考
- 中間件
- mysqli異步與php的協程
- 代碼片段
- pdo 執行的sql語句
- 二進制安全
- 捕捉異常中斷
- global
- 利用cookie模擬登陸
- 解析非正常json
- 簡單的對稱加密算法
- RSA 加密
- 過濾掉emoji表情
- 判斷遠程圖片是否存在
- 一分鐘限制請求100次
- 文件處理
- 多文件上傳
- 顯示所有文件
- 文件下載和上面顯示所有文件配合
- 文件的刪除,統計,存數組等
- 圖片處理
- 簡介
- 驗證碼
- 圖片等比縮放
- 批量添加水印
- beanstalkd
- 安裝
- 使用
- RabbitMQ
- 簡介
- debain安裝
- centos安裝
- 常用方法
- 入門
- 工作隊列
- 訂閱,發布
- 路由
- 主題
- 遠程調用RPC
- 消息中間件的選型
- .htaccess
- isset、empty、if區別以及0、‘’、null
- php各版本
- php7.2 不向后兼容的改動
- php中的各種坑
- php7改變
- php慢日志
- 郵件
- PHPMailer實現發郵件
- 驗證郵件地址真實性
- 文件下載
- FastCgi 與 PHP-fpm 之間的關系
- openssl 加解密
- 反射
- 鉤子方法
- 查找插件
- opcode
- opcache使用
- opcache優化
- 分布式一致性hash算法
- 概念
- 哈希算法好壞的四個定義
- php實現
- java實現
- 數組
- jwt
- jwt簡介
- 單點登錄
- phpize
- GeoIP擴展
- php無法獲得https網頁內容的解決方案
- homestead運行的腳本
- Unicode和Utf-8轉換
- php優化
- kafka
- fpm配置
- configure配置詳解