Skip to main content

如何交換 PHP 陣列的 key

如何交換 PHP 陣列的 key

昨天在 stackoverflow 上看到一個有趣的問題:如何交換陣列中的 key,順手寫了幾段程式測試效能。原先在社群媒體上發表了 (原文連結): 在 stackoverflow 上看到一個有趣的問題,要交換 PHP assoc. array 的 key;我覺得重建陣列很醜(內建陣列順序只能透過 push/pop shift/unshift splice 操控),就弄了個 serialize 的版本。想不到比重建慢十倍 T_T 但被 gy 抱怨看不懂,只好回 blog 寫份比較完整的解釋,順便紀錄 2013 年的開始。

Partial Class in PHP

Partial Class in PHP

** 這是編輯於 2011 年 2 月的草稿,廢物利用照刊 ** // 原文 (2011/02) 開始 Partial Class 是一項在 .Net Framework 2.0 出現的特色,可以將一個 Class 的內容由不同檔案實作。除了最原始的需求,整合工具自動產生的程式碼以及自身篆寫的 code (還記得 VC 6.0 年代,那堆自動產生的代碼吧) 之外,也能在多人協同開發同一物件時,各自編輯一個檔案,簡化 lock / merge 的問題。雖然 Partial Class 有其強項,不過它並不適合用於取代物件繼承與抽象化。

使用 PHP 開發 RESTful 服務

使用 PHP 開發 RESTful 服務

偶然發現有人提出這個問題,就把答案回收利用一下! PHP 本身是種(專注於網頁,伺服器端)的語言,因此要以它實作 RESTful 毫不困難。大多框架也包含對應的處理機制,例如: FuelPHP 內建的 Controller_Rest / Controller_Hybrid CodeIgniter 可以安裝 rest-server CakePHP 與 Symfony 可以由 router 下手 實際上,實作 RESTful 判斷用不了幾行;關鍵在於取用下列來自 $_SERVER 的變數: REQUEST_METHOD: 實際請求方法, [get|post];如果伺服器與瀏覽器都支援的話,有可能出現 put|delete。但大部分狀況是「預設不支援」,所以一般是以下面兩組參數來模擬。 HTTP_X_REQUESTED_WITH: 透過 XHR 發出的請求,會被設為 ‘xmlhttprequest’。 HTTP_X_HTTP_METHOD_OVERRIDE: [get|post|put|delete] 模擬為何種 request method 雖說有不允許 ajax form 夾帶上傳檔案的說法,但我以 jQuery.form 實測,在 Chrome / Firefox 上傳時,都會正常送出請求,並包含上述 HTTP_X_* 標頭;不確定是否是由套件調用 hack 達成。IE9 的表現就有點怪異:不送這些 Header ,但也不跳轉頁面。 […]

最近作的小玩具

最近作的小玩具

這一陣子做專案,稍微忙碌了一陣子;把最近順手做的小東西給貼上來,證明我還活著 XD 首先是在 FB 的某社團看到有人丟了怎麼用 html5/js/css 做浮水印的問題;雖說 html 早就能透過 position, z-index 在圖上疊字,好些人也這麼回應,但考慮浮水印一般是為了標示用戶下載的檔案而附加,就知道這樣的寫法不堪用。 html5 的 canvas 物件能夠以類似 windows gdi 的方式在上面繪圖(與文字),並以 dataurl 的方式將結果輸出給 img 標籤,讓使用者能夠點擊下載,顯然這才是正道。 隨手寫了 範例 放在 Amazon S3,不過原作顯然射後不理毫無疑問。果然發問問題品質,決定了回應與理解的素質。 然後昨晚看到有人繪製 AWS EC2 不同簽約環境的價格圖,一時手癢,也做了一份。原本打算用 gnuplot 製圖,但自己在那邊快取、invalidate 實在有點麻煩,最後是用 Google Visualization API 處理。 成品也是在 Amazon S3,歡迎亂玩。 補充: AWS 的費用資料有官方 json 格式可以拉!有空來把它再改造。 http://aws.amazon.com/ec2/pricing/pricing-reserved-instances.json http://aws.amazon.com/ec2/pricing/pricing-on-demand-instances.json Update 2014/03/27: 價格資訊的位置改了,格式也換成 jsonp

懶惰就是這麼回事,或者說,技術債?

懶惰就是這麼回事,或者說,技術債?

一切盡在不言中;最常見的原因是開啟了 magic_quotes_gpc,但又手寫 addslashes。PHP (5.4) 已經移除 magic_quotes 的功能,並且在資料庫部份,改以參數(prepared statement)的方式傳入欄位值(對抗 SQL Injection)。因此從收字串 (GET/POST/FILE) 到進資料庫,原則上可以啥事都不做。 但對於要輸出至 html 的字串,還是需要手動過濾,以免帶有標籤搞亂排版,甚至是嵌了 javascript 被搞 XSS 唷。

嘔尬,PHP 5.4 上了!

嘔尬,PHP 5.4 上了!

等了好一陣子,PHP 5.4 終於出來了 (泣) 簡單整理下自己感興趣的要點: 移除: Safe Mode Register Long Array / Global Magic Quotes y2k_compliance Pass by ref 現在要寫在函式定義裡了 ext/sqlite 變成 PECL 模組 移除猜測時區的功能,改為預設使用 UTC;乖乖設定 date.timezone 吧!一勞永逸

網管技能++

網管技能++

最近趁著專案比較有空閒,把公司內部的伺服器、服務稍做打造。目前公司裡有 X 台實體 server,每項專案或服務會再建立虛擬機器放置,加快安裝、部署,並避免相互干擾。現在連同虛擬機器,已經有了 YZ 台,要維護每台機器的設定、帳號、權限、功能,並建立對照表,實在是件很麻煩的事。更別說將更新的設定、軟體,安裝到每台機器上了。 之前無線基地台|Gateway 發狂了一陣子,雖說後來是用更換 ip 這種逃避的手段,但也構思了自動更新所有 server 設定的手法。最近總算把這套作法實作出來。

最近摸的 PHP M-V-C 框架

最近摸的 PHP M-V-C 框架

時間不多,隨手筆記 最近在公司打造 某種 神奇系統,打算用 PHP MVC 框架來加速開發;在考量需求之後,發現需求種類繁多,打包成套件會比較好管理。因此這個專案就被拆解成三部份啦: 套件伺服器:提供套件版本、相依性資料供下載 套件框架:能連到套件伺服器,完成身份查驗、下載並自動安裝套件、檢查相依性 服務框架:上面那個 M-V-C 框架,搭配很多套件,可能的範例大概有 上稿:能在服務框架裡面 新增、刪除、修改 內容 套件打包:將框架裡的內容打包成套件以後,上傳到套件伺服器 檢閱:顯示 上稿系統 所輸入的各種內容 分析:會對某些 hook 登記 callback,然後把資料寫進 log 並分析

PHP 實做點(報)名系統 : 緣起

PHP 實做點(報)名系統 : 緣起

如果是有在追我 plurk 的人應該知道,我最近在魔獸接了某公會會長, 最近正為了搶尾王首推進度,陷於水深火熱中 T_T 為了便利出團流程,我早打算要弄個點名系統;但因出團、上班、搬家佔了大部分時間,只能先擱著。 最近搬完家,時間稍微穩定;決定趁這個機會來寫一寫,順便把規劃相關思維和碎碎念都整理上來,充實 blog 內容 XD 這一系列的文章會跟著開發進度並行撰寫,預定包含下列內容: 開發流程、方式 選擇 (小型) 網站規劃 開發工具、部署規劃方式介紹 PHP / MySQL 實做

pipe functions in PHP

pipe functions in PHP

有些時後在 PHP 裡難免會碰到需要外部程式的狀況;使用 system / exec 與重導 (<, >, |) 雖然很方便,不過又會有增加 I/O 的問題。在系統繁忙,要考慮 I/O 的情況下,使用 pipe function (popen, pclose, proc_open, …) 會比較恰當。這些函式能夠以 pipe 直接與其它程式溝通,避過了在 shell 處理重導的問題 (file lock & dead lock, I/O)。其中 popen 有著只能 r 或 w 的限制,proc_open 則可以同時取代 in, out, err。 resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string […]