在「PHP Versions Stats - 2018.1 Edition」這邊看到這次的統計資料了,可以看到會使用 Composer (以及 Packagist) 的 PHP 版本中,7.0+ 已經是 78% 了,半年前是 67% 左右...
除了 PHP 5.x 以外,PHP 7.0 也是 12 月要停止支援 (2018/12/3),比 PHP 5.6 的支援期還早一個月左右 XD
幹壞事是進步最大的原動力
在「PHP Versions Stats - 2018.1 Edition」這邊看到這次的統計資料了,可以看到會使用 Composer (以及 Packagist) 的 PHP 版本中,7.0+ 已經是 78% 了,半年前是 67% 左右...
除了 PHP 5.x 以外,PHP 7.0 也是 12 月要停止支援 (2018/12/3),比 PHP 5.6 的支援期還早一個月左右 XD
查資料的時候查到的,在 GitHub 上的 Roave/SecurityAdvisories 這個專案利用 Composer 的 require
條件限制,擋掉有安全漏洞的 library:
This package ensures that your application doesn't have installed dependencies with known security vulnerabilities.
看一下 composer.json 就知道作法了,裡面的 description
也說明了這個專案的用法:
Prevents installation of composer packages with known security vulnerabilities: no API, simply require it
這方法頗不賴的 XDDD
PHP {7.1,7.0,5.6} (至少有安全性支援的版本) 佔了 90% 以上的量... 至少是有用 Composer 族群的主流了:「PHP Versions Stats - 2017.2 Edition」。
All versions Grouped PHP 7.1.10 11.63% PHP 7.1 36.63% (+18.99) PHP 7.0.22 7.95% PHP 7.0 30.76% (-5.36) PHP 5.6.31 7.38% PHP 5.6 23.28% (-8.16) PHP 5.6.30 7.23% PHP 5.5 6.11% (-4.5) PHP 7.0.24 5.45% PHP 5.4 1.51% (-1.6) PHP 7.1.11 4.55% PHP 5.3 0.76% (-0.22)
可以看出大家都在往 PHP 7.1 推了...
Composer 包太多 module 進去跑會變慢不少 (像是把 xdebug 包進去時),所以自己寫了個小 script 只包必要的東西進去:
#!/bin/sh exec php \ -n \ -d 'extension=curl.so' \ -d 'extension=filter.so' \ -d 'extension=hash.so' \ -d 'extension=iconv.so' \ -d 'extension=json.so' \ -d 'extension=openssl.so' \ -d 'extension=phar.so' \ -d 'extension=posix.so' \ -d 'zend_extension=opcache.so' \ "$(dirname $0)/composer.phar" $*
用 -n 忽略掉 php.ini
裡面的東西 (這包括了 extension 設定) 後再開始自己加 extension 設定。
其中 opcache.so
是加速用的,posix.so
是因為想要有輸出的色彩,這兩個 so 檔不加進去還是可以動,而其他的都是必要的 extension。
目前 PHP 上最重量級的軟體,Composer,推出 1.0 版了:「Composer goes Gold」。
然後作者女朋友想到奇怪的點子:
My girlfriend had a brilliant idea, and a few days and a couple express deliveries later here we are. We made an actual Composer gold master copy of the 1.0 release, on a floppy!
這張黃金磁片在 eBay 上競標中 XDDD
在「碼天狗週刊 #33」上看到的「prestissimo」這個軟體,可以平行下載 Composer 所需要的軟體而讓速度變快。作者測試 Laravel 的安裝:
$ composer create-project laravel/laravel laravel1 --no-progress --profile --prefer-dist
從 288 秒變成 26 秒:(這種 benchmark 跟地點應該有關係,看作者似乎是日本人?不知道是不是在日本測的...)
感覺應該要變成 Composer 的內建功能才對?
之前也有遇到,結果 Lorna Jane Mitchell 寫了一篇「Handling Composer "lock file out of date" Warning」給了不少解法。
第一種是 composer upgrade
,直接全部升級。
第二種是先用 composer update --dry-run
看看是不是有人加到 composer.json
後忘記更新,如果是的話再用 composer update [package]
處理。
第三種是用 composer update nothing
閉上眼睛更新 hash 值,當作什麼都沒看到 XDDD
Sometimes this is the right answer so it's a handy trick to know!. I seem to see these kinds of issues in people's projects quite often (I'm a consultant, I see a lot of projects) so I thought I'd share my usual tactics for getting things sorted - if you have any tricks of your own to share, I'd love to hear them :)
該說很「實用」嗎 XDDD
從 PHP 網站上的「Supported Versions」與「Unsupported Branches」可以看到今年九月初 PHP 5.4 就已經停止維護了 (包括安全性更新也停了)。
在「PHP Versions Stats - 2015 Edition」這邊利用 Packagist 的資料分析,還是可以看到很多人用 PHP 5.3 與 PHP 5.4:
唔,很符合 PHP 社群以及各家 hosting 萬年不更新的使用習慣...?
可以直接看 GitHub 上的 commit log:「Disable GC when computing deps, refs #3482」。
*/ public function run() { + gc_disable(); + if ($this->dryRun) { $this->verbose = true; $this->runScripts = false;
下面變成祭典了 XDDD
然後依照「Avoid generating duplicate conflict rules by naderman · Pull Request #3482 · composer/composer」這邊的測試 (要看下面的討論),設 zend.enable_gc=0
會省的更多,效率用倍數在跳的...
因為 Composer 的效率為人詬病很久了,這次有人暴發出來,會讓一群人投入資源找更多 optimization... XD
Composer 是目前 PHP 世界裡比較紅的套件管理工具,內建了一些 autoload 模組,以及 Packagist 這個巨大的 ecosystem。
在「Installing Composer Packages」這篇文章裡提到要如何在 Composer 裡指定套件的版本。在這之前,你需要先知道什麼是 Semantic Versioning,然後再來看作者的論述。
直接講結論,文章裡推薦用 ~
的方式指定版本,這通常會是你要的結果:用 ~1.2
表示 >=1.2.0,<2.0.0
;而用 ~1.2.3
則可以表示 >=1.2.3, <1.3
。
在對付 compatibility 問題時還蠻常見的情況。