php

PHP7 是有多快?

[華語, cmn-Hant-TW] 之前把幾台機器換成 PHP7 就覺得很有感了,這次改寫台灣華語羅馬拼音產生器的測試程式的時候,才發現真的是有夠誇張的快,同一個測試程式用 Apple MacBook 12″ (OS X El Capitan 10.11.3) 在 5.3 到 7.0 跑的結果如下: PHP 5.3.29 – 22.89 秒,使用 71.15 MB 記憶體 PHP 5.4.45 – 42.54 秒,使用 65.75 MB 記憶體 PHP 5.5.32 – 29.96 秒,使用 65.75 MB…

PHP 華語拼音轉換工具

[華語, cmn-Hant-TW] 因為一些計畫案的需要,整理了一個拼音轉換工具放在 Packagist 上,這樣用 composer 安裝起來比較方便。 詞庫用的是小麥輸入法的表格,目前只支援注音拼音跟台灣華語羅馬拼音,因為現在有在用的就這兩個,將來再來擴充其他拼音方案,聲調標示也是一樣,目前會用到的就是數字,用在網址列上甚至只要無聲調即可,當然注音的話只有四聲符號的標示法了,這些就之後再來補齊。 話說 thl 的這個 namespace 其實之前是有別人在用的,原本的使用者 thlgrant 很好心的幫我把 pinyin 加進去,所以名字才能保持相對簡潔,實在是相當感謝啊。 連結 https://packagist.org/packages/thl/pinyin

php 5.6 + apache 2.4 + laravel

[華語, cmn-Hant-TW] 最近把一些原本跑 php 5.5 跟 apache 2.2 的網站更新到 php 5.6 + apache 2.4,遇到了一些狀況,首先是 composer 在執行的時候噴出這樣子的錯誤訊息: The "https://packagist.org/packages.json" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failedThe "https://packagist.org/packages.json" file could not…

跑 php 頁面讓 httpd 當掉

[華語, cmn-Hant-TW] 這問題卡了一段時間,但是因為也沒太緊急所以就有空的時候才來看一下問題在哪。 總之就是有一台 FreeBSD 11-CURRENT 在某次更新一堆套件之後 laravel 的特定操作就開始會讓 httpd 吃 segmentation fault 了。因為有用到不少套件所以一層一層的追下去發現是 finfo_open() 造成的,會用到這個函式只是要找檔案的 mime-type 而已所以也沒做太奇怪的事情,接著用 laravel 直接跑內建的伺服器模式做一樣的操作,發現也會吃 segmentation fault,那差不多就確定是 php 的問題了,自己寫了一個小程式只呼叫這個函式,用 cli 模式跑一樣炸掉,當下立刻把所有名字含 php55 的套件全部更新,因為 php 跑其他東西都沒當,所以想說應該是某個 php 套件爛掉,因為當掉跟圖形操作有關,一度還以為是 gd 造成的。 結果全部用 ports 重編之後… 照當,那問題就怪了,這時候就把另一台更閒的 FreeBSD 11-CURRENT 更新到最新同時跑 php… 居然沒有當?!對照一下兩邊函式庫安裝的目錄才發現有問題那台的目錄裡面有…

Laravel 4, composer.phar 還有 nikic/php-parser

[華語, cmn-Hant-TW] Laravel 4 的標準安裝是透過 composer.phar 來達成,所以不像 Laravel 3 只要塞一個 security/php5-mcrypt 就收工。為了跑 composer.phar 至少要安裝 archives/php5-phar,然後如果希望執行 composer 的輸出有帶顏色,那需要 sysutils/php5-posix,又安裝過程中會裝到 php-parser 如果沒有 devel/php5-tokenizer 會直接噴出 “Use of undefined constant T_DOUBLE_COLON” 的錯誤訊息,所以這幾個 ports 還是給他裝一裝吧。 話說回來,這是安裝上的需求,安裝好之後只要有 mcrypt 就能用了,所以可以找一台裝好之後再丟到沒這些東西的機器上跑,只是之後要更新的話就會比較麻煩就是

群組化 $_POST

[華語, cmn-Hant-TW] HTML的表單項目太多的話,丟給 PHP 處理的時候就會有點煩,所以最好是在填表的時候就先分好群組。 分的方式其實還蠻簡單的,只要用中括號([])當元件的名稱即可。 <input name="項目[]" type="text" value="a" /> <input name="項目[]" type="text" value="a" /><input name="項目[]" type="text" value="a" /> <input name="項目[]" type="text" value="a" /> 然後輸入的內容就會變成放到 “項目[]” 這個陣列裡了,依序會是項目[0]、項目[1],當然要直接指定 key 也是可以的,細節可以看這篇。

去掉字串中非數字的部份

[華語, cmn-Hant-TW] 主要是用在去掉電話號碼上那堆括號或是連字號之類的東西。用正規表示式來處理並不困難,其中 ‘\D’ 代表非數字(注意大小寫),把非數字的字元通通取代成空字串即可。 Perl $string =~ s/\D//g;$string =~ s/\D//g; PHP $string = preg_replace( ‘/\D/’, ”, $string );$string = preg_replace( ‘/\D/’, ”, $string );

ACL in CakePHP

[華語, cmn-Hant-TW] cakephp 下開 acl 的簡單疏失心得,當然資料庫連結之類的設定要先弄好,然後至少要有一個寫好的 controller 。 用 console 工具來弄會比較方便,首先要切到 app 的目錄下 ../cake/console/cake schema create DbAcl../cake/console/cake schema create DbAcl 這是 1.3 的語法,如果是 1.2 的話請用 schema run create,接著在 controller 裡面加上 var $components = array(’Acl’);var $components = array(‘Acl’); 一定要加,不然就有可能會吃到像是這樣的錯誤訊息: Error: Missing…