Development

Laravel log 的權限問題

[華語, cmn-Hant-TW] 一直以來 Laravel 預設在本機上的 log 是單一檔案 (single),當然也可以用每天產生一個檔案 (daily) 的形式,只要在 config 裡面設好即可,設定方式隨著版本不同而有所不同,不過就以往來講我會儘量還是用 single,然後用系統的工具 (newsyslog 或是 logrotate 不同系統有不同的滾動工具) 去整理成類似 /var/log 下的形式,避免檔案太大 會這樣做主要的原因還是權限,通常來講因為網頁存取產生的 log,會以 www (依系統不同,可能是 httpd 或 www-data) 的權限寫入,使用者本機操作的話,則是用使用者的權限寫入,如果檔案還沒產生的話會自動產生,自動產生的檔案一般情況下預設是 644,也就是只有本人可以存取,假設產生檔案的是本機使用者,那當網頁遇到需要寫入 log 的時候,程式就會直接炸給你看 另外一個原因是檔案要整理,在 5.6 之前的話 daily 要自己手動清太舊的 log,平平都要用程式處理,那直接丟給系統不是比較快,到了 5.6 是可以設定要留幾天份,不過一樣會遇到權限問題 避免權限問題的一般作法是在設定環境的時候先產生一個空的…

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…

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 就能用了,所以可以找一台裝好之後再丟到沒這些東西的機器上跑,只是之後要更新的話就會比較麻煩就是

Grand Central Dispatch 試玩

[華語, cmn-Hant-TW] 因為開有多執行緒的需求,就研究了一下 mac 的 framework 有提供哪些東西可以用。初步看來就是傳統 pthread 跟 NSThread 可以用,不過 Thread 程式寫起來一向就很煩,所以就想找找有啥替代品可以用,後來就注意到 Mac OS X 10.6 (iOS 4)之後新加的 Grand Central Dispatch。 基本概念很簡單,就是把你要做的東西加進 queue 就好了。把要做的事情放在同一個 queue 的話他就會照順序一個一個執行,當然你可以開很多個 queue 同時跑,那就可以一次做很多事情,直到把系統榨乾為止。 首先要開一個 queue dispatch_queue_t queue = dispatch_queue_create("cc.pighead.queue", NULL);dispatch_queue_t queue = dispatch_queue_create("cc.pighead.queue", NULL); 第一個參數可以隨便打,第二個參數在…

bash 的 <<<

[華語, cmn-Hant-TW] 有時候會看到用 bash 寫的 script 裡面有 <<< 這種用法,啊這個語法 sh 是吃不進去的,我們這種 sh 基本教義派當然會想要把他消滅掉。 消滅的方法也不難,這個語法其實就是把 <<< 後面字串變數的內容丟給前面的東西 (程式,或是另外一個 script) 吃而已,所以改用 pipeline 就可以了。 bash: run.sh <<< $varrun.sh <<< $var sh: echo "$var" | run.shecho "$var" | run.sh 要注意的是 echo 的變數最好要用雙引號包起來,避免字串內的換行字元之類的東西(如果有的話)被吃掉 。

群組化 $_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 );

在 perl script 底肚用 open 拿到系統執行的結果

[客家話, hak-Hant-TW] Perl script 可以用 system(); 來執行外部的程式,偷懶時當好用。 毋過 system(); 有一隻麻煩: 執行結果會直接丟到 stdout,script 自家拿不到結果,是講 script 會拿到執行結果做下一步動作,就要用其他方法了,用 open 加 pipe 就可以做到,像要用 find 尋到全部的 .txt 檔,一隻一隻撈拒打開來,就可以按仔寫: open FILES, "/usr/bin/find *.txt |" while (<FILES>) { open(FILE, $_); }open FILES, "/usr/bin/find *.txt |" while (<FILES>)…

clang 及 gcc 的編譯訊息

[華語, cmn-Hant-TW] 因為 GPLv3 的問題,FreeBSD 將來的預設編譯器會從 gcc 往 clang 移動。clang 的賣點之一就是編譯的訊息較易懂,一個簡單的例子 1 2 3 4 5 6 #include &lt;stdio.h&gt;   main () { int a int b; }#include &lt;stdio.h&gt; main () { int a int b; } gcc version 4.2.1…

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…