在網上找到兩個實用的 php class,分別是 PHPExcel 及 PHPPowerPoint。它們分別可以很簡單地透過 PHP 讀取及寫入 Excel 2007 及 PowerPoint 2007 的檔案。
Real-Blog
關於 PHP, Linux, Open Source 及個人生活記載的網誌。
Recent Articles / Archives
PHPExcel 及 PHPPowerPoint
修改 IIS 上傳限制
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
在編寫了一些 shell script 並打算只給予特定用戶執行,可以先取得用戶的 user id,或者直接用 whoami 指令檢查使用者名稱,例如:
then
# 執行程式碼
else
echo "You cannot run this script."
exit 0
fi
如果在另一個情況下,不容許特定用戶執行,可以這樣寫:
then
echo "You cannot run this script."
exit 1
fi
用 PHP 查詢 MySQL Table 使用空間
要查詢 MySQL 資料表所用的空間,雖然資料表是用 MyISAM 的話,可以直接用 ls 指令知道,但這個方法不可以用在 InnoDB 資料表上面。
要計算資料表的容量,可以供用 MySQL 語句 "SHOW TABLE STATUS" 實現,然後將回傳的 Data_length 加 Index_length 即可。以下程式會擷取資料庫內所有資料表的使用空間:
-
<?php
-
-
$total_size = $rows['Data_length'] + $rows['Index_length'];
-
-
// return table size by KB or MB
-
if($total_size <1048576){
-
$total_size = $total_size / 1024;
-
}else{
-
$total_size = $total_size / 1024 / 1024;
-
}
-
-
}
-
“==” 及 “===” 在 PHP 的分別
在 PHP 裡面,兩個比較運算式 "==" 及 "===" 的分別是,"==" 用作檢查變數的值是否相同;而 "==" 則會檢查變數的值及資料型態。
"==":
以上程式碼執行結果會輸入 "Yes",因為變數 $str_var 及整數 123 是相同的值,但如果改用 "===" 便會有不同的結果:
"==="
以上程式碼會輸入 "No",因為雖然 $str_var 及 123 的值是相同,但兩者的資料型態不同。 (用引號包著的 "123" 是字串;而沒有引號的 123 則是整數)
但如果將程式碼改成以下這樣,便會輸出 "Yes"
open_basedir 設定多個目錄問題
在 PHP 內有一個安全選項是 open_basedir,這個選項是限制 PHP 可以開啟的目錄,可以透過 php.ini 及 httpd.conf 設定,而我一直也有使用這個選項。
今天 server 要改一些設定,要將兩個目錄加入 open_basedir 內,發現用論用空格、逗號、分號來區隔兩個目錄都不行,而根據 PHP 官方網站的說法,這個選擇是支援多個目錄的。在 google 找了一下,原來要用冒號來區隔兩個目錄,例如:
open_basedir "/path/dir1/:/var/tmp/"
Microsoft 的免費軟件開發工具
Microsoft 開始一項名為 DreamSpark 的活動,內容是讓學生可以免費用微軟的軟件開發工具。一套完整的 .net 開發平始十分昂貴,要購買這類昂貴的商業軟件才可以學習一門技術,那已經對入門已經加上一重障礙,這項舉動無疑可以讓學生更早接觸微軟的開發工具。
如果你是全職學生,只要到 DreamSpark 網站登記,那便可以免費下載以下產品:
-- Microsoft Visual Studio 2008 Professional Edition
-- Windows Server 2003 Standard Edition
-- Microsoft SQL Server 2005 Developer Edition
-- Microsoft Expression Studio
-- Game Studio 2.0
-- Creators Club Online
-- Microsoft Visual Studio 2005 Professional Edition
-- Microsoft Visual C# 2005 Express Edition
-- Microsoft Visual C++ 2005 Express Edition
-- Microsoft Visual Basic 2005 Express Edition
-- Microsoft SQL Server 2005 Express Edition
-- Microsoft Visual Web 2005 Express Edition
-- Microsoft Visual J++ 2005 Express Edition
-- Microsoft Visual PC
基本分析 vs 技術分析
大家如有看一些 phone-in 的財經節目,一定會聽過支持位、阻力位、黃金比率等字眼,這些都是股票技術分析的名詞。看技術分析一般是從事短線買賣,或者對於長線投資者,希望從技術分析捕捉一個較佳的入市位。
我沒有學過技術分析,也不打算學,因為個人較認同基本分析,相信股價長遠而言會和盈利掛鈎,而且基本因素比技術因素較紮實。如果公司有優秀的業績,那麼即使股價下跌也會較有信心。
近期比較少留意財經消息,因為這個月較多工作。正如特首所講:「我要做好呢份工」,做好正職才是根本,從沒想過全職炒股,搞不好分分鐘成為病態股民,我買股票的目的只是對抗通漲及資本增值。
不使用 form 之下傳送 POST 變數
可以打開 HTTP socket 連線及傳送 HTTP POST 指令,以下是範例:
-
<?php
-
// Generate the request header
-
$ReqHeader =
-
"POST $URI HTTP/1.1n".
-
"Host: $Hostn".
-
"Content-Type: application/x-www-form-urlencodedn".
-
"Content-Length: $ContentLengthnn".
-
"$ReqBodyn";
-
-
// Open the connection to the host
-
if (!$socket){
-
-
$Result["errno"] = $errno;
-
$Result["errstr"] = $errstr;
-
return $Result;
-
}
-
$idx = 0;
-
}
-
//-------------------------------------------
-
?>
或者可以使用 PHP 的 cURL extension。當你安裝了 cURL 及重新編譯 PHP 支援 cURL後,便可以用以下這個較簡單的方法:
-
<?php
-
$URL="www.mysite.com/test.php";
-
$ch = curl_init();
-
curl_setopt($ch, CURLOPT_URL,"https://$URL");
-
curl_setopt($ch, CURLOPT_POST, 1);
-
curl_setopt($ch, CURLOPT_POSTFIELDS, "Data1=blah&Data2=blah");curl_exec ($ch);
-
curl_close ($ch);
-
?>
使用 MySQL 儲存圖片
其實這個方法不單可以用在 MySQL,在其他資料庫及非圖片也應該也沒問題,原理是 使用 base64_encode() 將檔案轉成 MIME base64 字串編碼,然後放入資料表,當然儲存檔案用的欄位要夠大才可以,在取出時用 base64_decode() 回復原狀即可,以下是例子:
-
<?php
-
?>
PHP 內將數值自動補零
如果在 PHP 想將數值自動補零,例如以 00, 01, 02 ...... 等方式顯示,可以用以下方法:
$var = 1;
echo sprintf("%02d", $var);
這樣就會印出 01,其中 2 是顯示的位數,如果想顯示 001,可以改成 sprintf("%03d", $var);
PHP 存取 MySQL 4.1 的亂碼問題
早前替客戶開發了一個系統,原本沒遇到問題,但這個星期他們致電給我說不能輸入中文。這時覺得奇怪,MySQL 內的 table 欄位已設成 utf8,而輸入介面及顯示頁面的編碼均為 utf8。
然後在 MySQL 官方網站的 Character Set Support 找到解決方法。
只要在查詣資料表時使用 SET NAMES 'utf8'; 即可解決,這個語句等同於以下句:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
解決 MySQL 4.1.x 以上的認證問題
因為 MySQL 在 4.1 或以上的版本的認證加密方法更改了,那即是說在 php 程式內即使密碼正確也會連接失敗。解決方法為:
1. 重新編譯 PHP
將 --with-mysql 的選項改為 --with-mysqli=mysql_config_path/mysql_config,其中 mysq_config_path 是 MySQL 的安裝路徑下的 bin 目錄。
2. 修改 my.cnf
打開 /etc/my.cnf,在 "[mysqld]" 下加入一行
old-passwords
然後重啟 MySQL,這樣就會強逼 MySQL 使用舊加密認證。
隨機抽取 MySQL 內的資料
如果要在資料庫內隨機抽取資料,可以用 PHP 或 MySQL 內置的 RAND() 函式來做,以下是使用 MySQL 的語法:
SELECT * FROM table_name ORDER BY RAND() LIMIT 1;
用 ImageMagick 製作縮圖
只要在系統安裝 ImageMagick 後,就可以在指令模式下製作各種圖片的持效。當然也可以使用 PHP 從 shell 下使用 ImageMagick,以下是製作縮圖的方法:
shell_exec("/usr/local/bin/convert -sample 500x500 /pathto/images/image1.jpg /pathto/images/image2.jpg");
以上是將來源圖片 /pathto/images/image1.jpg 製作縮圖,高和闊都以 500 像素為上限,那就是說製作出的縮圖會根據原始圖片的比例下,高和閣都不會超出 500 像素,然後檔案會輸出到 /pathto/images/image2.jpg.
如果要單單用 PHP 完成以上工作,要自行計算出縮圖片大小才可以做,而且更加可以用百份比,例如 50%x50% 就是高和闊都是原圖的 50% 大小。