顯示當前檔案可使用一個當前檔案的全域變數:__FILE__。
所以要顯示檔案名稱就搭配basename()函數即可;而顯示當前路徑就搭配dirname()函數即可,範例如下:
<?
echo __FILE__;
echo basename(__FILE__);
echo dirname(__FILE__);
?>
2011年8月13日 星期六
2011年7月23日 星期六
PHP處理POST File中文檔名的問題....
*如果沒問題,表示你的網頁用的是Big5編碼,剛好跟Windows 中文版作業系統的一樣*
若是Server是用Windows中文版,那麼檔名是使用Big5編碼,網頁若是用了UTF-8編碼,那麼copy()這個函式裡的中文檔名(UTF-8編碼的)就會導致出錯。因此要做轉碼,範例程式如下:
<head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
</head>
<?php
copy($userfile,iconv("UTF-8","big5",$userfile_name));
?>
<form enctype="multipart/form-data" action="" method="post"
name="uploadf" onsubmit="return validate()">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
若是Server是用Windows中文版,那麼檔名是使用Big5編碼,網頁若是用了UTF-8編碼,那麼copy()這個函式裡的中文檔名(UTF-8編碼的)就會導致出錯。因此要做轉碼,範例程式如下:
<head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
</head>
<?php
copy($userfile,iconv("UTF-8","big5",$userfile_name));
?>
<form enctype="multipart/form-data" action="" method="post"
name="uploadf" onsubmit="return validate()">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
2011年7月9日 星期六
PHP的header可以設定等待幾秒後再轉向哦~~
其實應該說HTML的Header可以設定等待幾秒後再轉向,所以PHP的header當然也可以囉~~
用一個範例就可以代替千言萬語:
header("refresh:2;url=index.php");
//refresh:[秒數]
另外若是轉頁前有顯示訊息到瀏覽器上,那header一定會有警告,所以可以在最前面加上:
ob_start()來清掉緩衝區資料以避免警告~~
用一個範例就可以代替千言萬語:
header("refresh:2;url=index.php");
//refresh:[秒數]
另外若是轉頁前有顯示訊息到瀏覽器上,那header一定會有警告,所以可以在最前面加上:
ob_start()來清掉緩衝區資料以避免警告~~
2011年7月2日 星期六
PHP產生特定日期的超棒方法
今天發現一個超好用的方法來產生特定日期,先來看一下例子吧:
date("Y-m-d",strtotime("+7 day"));
上面的程式會產生今天七天後的日期!
至於strtotime可以傳的參數有多少呢?以下是從php manual裡面擷取的一些範例:
# on 2/8/2010
date('m/d/y', strtotime('first day')); # 02/01/10
date('m/d/y', strtotime('last day')); # 02/28/10
date('m/d/y', strtotime('last day next month')); # 03/31/10
date('m/d/y', strtotime('last day last month')); # 01/31/10
date('m/d/y', strtotime('2009-12 last day')); # 12/31/09
- this doesn't work if you reverse the order of the year and month
date('m/d/y', strtotime('2009-03 last day')); # 03/31/09
date('m/d/y', strtotime('2009-03')); # 03/01/09
date('m/d/y', strtotime('last day of march 2009')); # 03/31/09
date('m/d/y', strtotime('last day of march')); # 03/31/10
還有這些用法也測過OK
date("Y-m-d H:i:s",strtotime("+ 1 month - 2 day"));
date("Y-m-d H:i:s",strtotime("+ 1 year 3 month 2 day 4 hour"));
我想還有很多吧,不過這些看來就很夠用了~~
date("Y-m-d",strtotime("+7 day"));
上面的程式會產生今天七天後的日期!
至於strtotime可以傳的參數有多少呢?以下是從php manual裡面擷取的一些範例:
# on 2/8/2010
date('m/d/y', strtotime('first day')); # 02/01/10
date('m/d/y', strtotime('last day')); # 02/28/10
date('m/d/y', strtotime('last day next month')); # 03/31/10
date('m/d/y', strtotime('last day last month')); # 01/31/10
date('m/d/y', strtotime('2009-12 last day')); # 12/31/09
- this doesn't work if you reverse the order of the year and month
date('m/d/y', strtotime('2009-03 last day')); # 03/31/09
date('m/d/y', strtotime('2009-03')); # 03/01/09
date('m/d/y', strtotime('last day of march 2009')); # 03/31/09
date('m/d/y', strtotime('last day of march')); # 03/31/10
還有這些用法也測過OK
date("Y-m-d H:i:s",strtotime("+ 1 month - 2 day"));
date("Y-m-d H:i:s",strtotime("+ 1 year 3 month 2 day 4 hour"));
我想還有很多吧,不過這些看來就很夠用了~~
2011年6月30日 星期四
Android Activity有新的Life Cycle??
這是我今天在網路上看到的:
| (This picture is copy from http://www.anddev.org/lifecycle_of_an_activity-t81.html , I will remove it if auther disagree.) |
我發現這一張圖中在onPause()之前增加了onFreeze(),以前在API Level 8時沒印象有這一個call back阿!難不成是新加的嗎?一時找不到答案所以先不深究了,google了一下,發現onFreeze被call的時機發生在於一個Activity (A)去呼叫另一個Activity (B)時,A在onPause()之前會先進行onFreeze();但是當B返回A時,不會onFreeze()就直接onPause()了。目前對它的認識就到這邊,以後要是有時間深入trace後有新的心得再跟大家分享吧!若有不對之處也請各位先進不吝指正!
2011/07/02更正....
原來onFreeze()是一個很舊的方法,後來的版本中被更名為onSaveInstanceState()以更符合狀態的意義,可參考官方文件:http://developer.android.com/sdk/OLD_RELEASENOTES.html
至於onSaveInstanceState被call的時機發生在於一個Activity (A)去呼叫另一個Activity (B)時,A在onPause()之前會先進行onSaveInstanceState();但是當B返回A時,不會onSaveInstanceState()就直接onPause()了,這個原先查詢到的資訊(onFreeze()改為onSaveInstanceState())經過程式trace後證實是沒有錯的~
2011/07/02更正....
原來onFreeze()是一個很舊的方法,後來的版本中被更名為onSaveInstanceState()以更符合狀態的意義,可參考官方文件:http://developer.android.com/sdk/OLD_RELEASENOTES.html
至於onSaveInstanceState被call的時機發生在於一個Activity (A)去呼叫另一個Activity (B)時,A在onPause()之前會先進行onSaveInstanceState();但是當B返回A時,不會onSaveInstanceState()就直接onPause()了,這個原先查詢到的資訊(onFreeze()改為onSaveInstanceState())經過程式trace後證實是沒有錯的~
smarty在Linux下面無法顯示的問題解決
最近在ubuntu下安裝了smarty,卻一直無法像在Windows下正確顯示。
整個頁面就是空白一片......
這個小問題後來到php.ini中設定display_errors = On再重新起動Apache2就搞定了!
有了錯誤提示後,問題就好解決多了,原來還是權限問題在作祟阿!!
1.我改了libs目錄下的所有權限為755,在libs目錄下執行:
sudo chmod -R 755 *
PS.其實只有目錄部份需要755,檔案部分應該只要644就可以了,但是.....懶ㄇㄟ
2.又有了新的錯誤,所以我改了templates_c的權限為777,在網站目錄下執行:
sudo chmod 777 templates_c
然後......大功告成了~~~
整個頁面就是空白一片......
這個小問題後來到php.ini中設定display_errors = On再重新起動Apache2就搞定了!
有了錯誤提示後,問題就好解決多了,原來還是權限問題在作祟阿!!
1.我改了libs目錄下的所有權限為755,在libs目錄下執行:
sudo chmod -R 755 *
PS.其實只有目錄部份需要755,檔案部分應該只要644就可以了,但是.....懶ㄇㄟ
2.又有了新的錯誤,所以我改了templates_c的權限為777,在網站目錄下執行:
sudo chmod 777 templates_c
然後......大功告成了~~~
2011年6月26日 星期日
如何在JPGraph的圖表中顯示中文
這邊介紹的方法不用去修改到JPGraph的source!
1.首先,PHP必須存成utf-8 no bom的格式,為什麼?因為JPGraph會使用你指定的中文字型檔來畫出你想秀出的中文字,但是它在對應字型時使用的是utf-8的編碼,所以你要是存成Big5,那就永遠畫不出正確的中文字囉!
2.將中文字型檔複製到跟你的程式相同的資料夾中。這樣做的好處是將來搬移主機時,可以無痛轉移(虛擬主機環境中特別建議這樣,因為字型檔的預設路徑可能不同或無存取權限)。
3.在require跟JPGraph有關的所有php檔前,先定義TTF_DIR及CHINESE_TTF_FONT這兩個常數,記住一定要定義在跟JPGraph有關的所有php檔前面,因為PHP是不允許redefine的,所以我們要先搶先贏。我們用一個3D圓餅圖作為範例:
<?php
define('TTF_DIR', './');
//字型檔的路徑,因為我們將字型檔放在同一資料夾,所以此處給空字串。
//經測試在某些linux主機上使用空字串不能正確讀到同一資料夾的字型檔(2011/06/28修正)
//字型檔的路徑,因為我們將字型檔放在同一資料夾,所以此處給"./",表示當前路徑。
//若是你想使用作業系統的字型檔路徑中的字型檔,這一行可以省略。
define('CHINESE_TTF_FONT','mingliu.ttc');
//使用細明體(mingliu.ttc),注意,若是在linux主機大小寫必須完全相符。
require_once ('../jpgraph/jpgraph.php');
require_once ('../jpgraph/jpgraph_pie.php');
require_once ('../jpgraph/jpgraph_pie3d.php');
// Some data
$data = array(40,60,21,33);
// Create the Pie Graph.
$graph = new PieGraph(350,250);
$theme_class= new VividTheme;
$graph->SetTheme($theme_class);
$graph->title->SetFont(FF_CHINESE, FS_NORMAL);
$graph->xaxis->SetFont(FF_CHINESE, FS_NORMAL);
$graph->yaxis->SetFont(FF_CHINESE, FS_NORMAL);
$graph->legend->SetFont(FF_CHINESE, FS_NORMAL);
$graph->subtitle->SetFont(FF_CHINESE, FS_NORMAL);
$graph->subsubtitle->SetFont(FF_CHINESE, FS_NORMAL);
$graph->tabtitle->SetFont(FF_CHINESE, FS_NORMAL);
//設定title使用中文顯示,注意,要是要在其他部份顯示中文,要去使用相對應的SetFont!
//2011/06/30:稍微看了一下他的文件,以上設定應該可以讓所有顯示字的地方都顯示中文
//若有不能的麻煩告知,我會再更正!
// Set A title for the plot
$graph->title->Set("一個簡易的3D圓餅圖");
// Create
$p1 = new PiePlot3D($data);
$graph->Add($p1);
$p1->ShowBorder();
$p1->SetColor('black');
$p1->ExplodeSlice(1);
$graph->Stroke();
?>
最後補充一下,標題雖然說是如何顯示中文,但是當然不侷限於中文,你也可以用別的語言的字型檔來試試囉!我相信一樣會成功的。
1.首先,PHP必須存成utf-8 no bom的格式,為什麼?因為JPGraph會使用你指定的中文字型檔來畫出你想秀出的中文字,但是它在對應字型時使用的是utf-8的編碼,所以你要是存成Big5,那就永遠畫不出正確的中文字囉!
2.將中文字型檔複製到跟你的程式相同的資料夾中。這樣做的好處是將來搬移主機時,可以無痛轉移(虛擬主機環境中特別建議這樣,因為字型檔的預設路徑可能不同或無存取權限)。
3.在require跟JPGraph有關的所有php檔前,先定義TTF_DIR及CHINESE_TTF_FONT這兩個常數,記住一定要定義在跟JPGraph有關的所有php檔前面,因為PHP是不允許redefine的,所以我們要先搶先贏。我們用一個3D圓餅圖作為範例:
<?php
define('TTF_DIR', './');
//經測試在某些linux主機上使用空字串不能正確讀到同一資料夾的字型檔(2011/06/28修正)
//字型檔的路徑,因為我們將字型檔放在同一資料夾,所以此處給"./",表示當前路徑。
//若是你想使用作業系統的字型檔路徑中的字型檔,這一行可以省略。
define('CHINESE_TTF_FONT','mingliu.ttc');
//使用細明體(mingliu.ttc),注意,若是在linux主機大小寫必須完全相符。
require_once ('../jpgraph/jpgraph.php');
require_once ('../jpgraph/jpgraph_pie.php');
require_once ('../jpgraph/jpgraph_pie3d.php');
// Some data
$data = array(40,60,21,33);
// Create the Pie Graph.
$graph = new PieGraph(350,250);
$theme_class= new VividTheme;
$graph->SetTheme($theme_class);
$graph->title->SetFont(FF_CHINESE, FS_NORMAL);
$graph->xaxis->SetFont(FF_CHINESE, FS_NORMAL);
$graph->yaxis->SetFont(FF_CHINESE, FS_NORMAL);
$graph->legend->SetFont(FF_CHINESE, FS_NORMAL);
$graph->subtitle->SetFont(FF_CHINESE, FS_NORMAL);
$graph->subsubtitle->SetFont(FF_CHINESE, FS_NORMAL);
$graph->tabtitle->SetFont(FF_CHINESE, FS_NORMAL);
//2011/06/30:稍微看了一下他的文件,以上設定應該可以讓所有顯示字的地方都顯示中文
//若有不能的麻煩告知,我會再更正!
// Set A title for the plot
$graph->title->Set("一個簡易的3D圓餅圖");
// Create
$p1 = new PiePlot3D($data);
$graph->Add($p1);
$p1->ShowBorder();
$p1->SetColor('black');
$p1->ExplodeSlice(1);
$graph->Stroke();
?>
最後補充一下,標題雖然說是如何顯示中文,但是當然不侷限於中文,你也可以用別的語言的字型檔來試試囉!我相信一樣會成功的。
訂閱:
文章 (Atom)