GZIP 是一種壓縮技術,是在伺服器上將頁面壓縮,傳到用戶的瀏覽器再解壓。在 PHP 實要 GZIP 壓縮可以這樣做:
-
<?php
-
}else{
-
}
-
?>
關於 PHP, Linux, Open Source 及個人生活記載的網誌。
GZIP 是一種壓縮技術,是在伺服器上將頁面壓縮,傳到用戶的瀏覽器再解壓。在 PHP 實要 GZIP 壓縮可以這樣做:
Practical PHP Programming 是 PHP 免費線上電子書,比較適合對 PHP 有基礎認識的朋友,以下為電子書目錄:
1. Preface
2. Introducing PHP
3. Simple variables and operators
4. Functions
5. Arrays
6. Objects
7. HTML Forms
8. Files
9. Databases
10. Cookies and Sessions
11. Multimedia
12. XML & XSLT
13. Output Buffering
14. Java and COM
15. Networks
16. Miscellaneous topics
17. Security concerns
18. Performance
19. Writing PHP
20. Writing extensions
21. Alternative PHP uses
22. Practical PHP
23. Bringing it to a close
24. Answers to Exercises
25. The future of PHP
26. Glossary
以下會介紹一些簡易的 MySQL 效能微調技巧,這些方法都是透過 my.cnf 的參數完成,而不需要重新編譯 MySQL。
Key Buffer
key buffer 是系統索引可用的緩存空間大小,對處理索引有很大的影響。設定 key buffer 的大小要根據自己的需要而定,而一個較簡單的方法是使用 25% 的記憶體空間作為 key buffer 使用。如果是獨立的資料庫伺服器可考慮使用更大的空間,例如 50%。
通這設定 key buffer 的大小,可以減少硬碟 I/O 操作對 MySQL 的影響。
以下是 key buffer 在 my.cnf 的設定方法:
key_buffer = 512M
Query Cache
這是 SQL Query 的緩存,將 query 的查詢結果暫存在記憶體裡面,直至資料被更新為止。
query_cache_size = 128MB
query_cache_limit = 4MB
Table Cache
對於同時要存取多個資料表十分重要,這是設定同時可開啟資料表的數目。
table_cache = 512
Sort Buffers
sort_buffer_size (在舊版本是 sort_buffer) 是設定 grouping 及 sorting 的緩存。
sort_buffer_size = 32M
myisam_sort_buffer_size = 32M
在 PHP 內計算兩個日期之間的差距的話,可以先將日期轉成 Unix timestamp 的數值然後再作計算。例如要計算兩個日期 01/01/2009 及今天的日期差距,可以這樣做:
要修改 MySQL 唯讀參數,一般上也會修改 my.cnf 的內容,然後重新啟動 MySQL。但如果有一特殊需要也能重新啟動 MySQL 的話,可以用 Domas Mituzas Blog 上面的方法:「Evil replication management」。
例如在正常的情況下修改 log_slave_updates 參數,會出現這個 error:
而文章內所提供的是非正規方法,所以閣下使用時要自行承擔風險,方法如下:
如果需要將 mysql server 的小部份資料匯入到測試主機上測試,可以配合 mysqldmp 的 -where="true LIMIT X" 選項,上的的 X 是想擷取的資料數量,例如:
以上的指令會將 mydb 內所有資料表各自匯出 10000 筆資料
這個方法可以很容易匯出較小的資料樣本件測試用途。
如果要用 PHP 檢查 apache 的 module 是否已啟動,可以用以下方法實現:
以上程式碼會檢查 mod_rewrite 是否開啟。這個方法只支援 apache module 安裝的 php,而不支援以 cgi 執行的 PHP。
用 Perl 更改 Linux 系統密碼,可以使用 Unix::PasswdFile,它是處理 /etc/passwd 檔案的 CPAN module。
Perl code:
如果想透過 Shell Script 來變更用戶密碼,可以用以下指令:
在 FreeBSD 下可以用以下非互動方法新增用戶或修改用戶密碼:
新增使用者: (使用者名稱為 new_user,密碼為 new_pass)
# echo topSecrete | pw add user vivek -h 0
更改現有使用者密碼:
# echo newPassword | pw mod user user_name -h 0
只要用以上指令,便可以編寫新增及更改用戶密碼的 shell script。
在網上找到兩個實用的 php class,分別是 PHPExcel 及 PHPPowerPoint。它們分別可以很簡單地透過 PHP 讀取及寫入 Excel 2007 及 PowerPoint 2007 的檔案。
IIS 預設上傳限制為 200kb,要修改這個限制,方法如下:
1. 開啟 Internet Information Services Manager (IIS)。 (中文版好像叫 IIS 管理員)
2. 在 server 上面 right click 及選擇 Properties
3. 選取 "Enable Direct Metabase Edit" 並按 OK
4. 開啟 Notepad,開啟以下檔案
%Windows dir%\System 32\Inetsrv\MetaBase.xml
5. 找出字串 AspMaxRequestEntityAllowed,預設是 204800,即 200kb,例如想改為 5mb 的話,應改為:
預設為 AspMaxRequestEntityAllowed = "52428800"
6. 完成後儲存 MetaBase.xml 便完成,不須要重新啟動 IIS。
7. 回到 Internet Information Services Manager (IIS),移除 "Enable Direct Metabase Edit" 的選項。
在編寫了一些 shell script 並打算只給予特定用戶執行,可以先取得用戶的 user id,或者直接用 whoami 指令檢查使用者名稱,例如:
如果在另一個情況下,不容許特定用戶執行,可以這樣寫:
要查詢 MySQL 資料表所用的空間,雖然資料表是用 MyISAM 的話,可以直接用 ls 指令知道,但這個方法不可以用在 InnoDB 資料表上面。
要計算資料表的容量,可以供用 MySQL 語句 "SHOW TABLE STATUS" 實現,然後將回傳的 Data_length 加 Index_length 即可。以下程式會擷取資料庫內所有資料表的使用空間:
在 PHP 裡面,兩個比較運算式 "==" 及 "===" 的分別是,"==" 用作檢查變數的值是否相同;而 "==" 則會檢查變數的值及資料型態。
"==":
以上程式碼執行結果會輸入 "Yes",因為變數 $str_var 及整數 123 是相同的值,但如果改用 "===" 便會有不同的結果:
"==="
以上程式碼會輸入 "No",因為雖然 $str_var 及 123 的值是相同,但兩者的資料型態不同。 (用引號包著的 "123" 是字串;而沒有引號的 123 則是整數)
但如果將程式碼改成以下這樣,便會輸出 "Yes"
在 PHP 內有一個安全選項是 open_basedir,這個選項是限制 PHP 可以開啟的目錄,可以透過 php.ini 及 httpd.conf 設定,而我一直也有使用這個選項。
今天 server 要改一些設定,要將兩個目錄加入 open_basedir 內,發現用論用空格、逗號、分號來區隔兩個目錄都不行,而根據 PHP 官方網站的說法,這個選擇是支援多個目錄的。在 google 找了一下,原來要用冒號來區隔兩個目錄,例如:
open_basedir "/path/dir1/:/var/tmp/"