$_SERVER['PHP_SELF'] #當前正在執行腳本的文件名,與 document root相關。
$_SERVER['argv']
#傳遞給該腳本的參數。
$_SERVER['argc'] #包含傳遞給程序的命令行參數的個數(如果運行在命令行模式)。
$_SERVER['GATEWAY_INTERFACE']
#服務器使用的 CGI 規範的版本。例如,「CGI/1.1」。
$_SERVER['SERVER_NAME']
#當前運行腳本所在服務器主機的名稱。
$_SERVER['SERVER_SOFTWARE']
#服務器標識的字串,在響應請求時的頭部中給出。
$_SERVER['SERVER_PROTOCOL']
#請求頁面時通信協議的名稱和版本。例如,「HTTP/1.0」。
$_SERVER['REQUEST_METHOD']
#訪問頁面時的請求方法。例如:「GET」、「HEAD」,「POST」,「PUT」。
$_SERVER['QUERY_STRING']
#查詢(query)的字符串。
$_SERVER['DOCUMENT_ROOT']
#當前運行腳本所在的文檔根目錄。在服務器配置文件中定義。
$_SERVER['HTTP_ACCEPT'] #當前請求的 Accept:
頭部的內容。
$_SERVER['HTTP_ACCEPT_CHARSET'] #當前請求的 Accept-Charset:
頭部的內容。例如:「iso-8859-1,*,utf-8」。
$_SERVER['HTTP_ACCEPT_ENCODING']
#當前請求的 Accept-Encoding: 頭部的內容。例如:「gzip」。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#
當前請求的 Accept-Language: 頭部的內容。例如:「en」。
$_SERVER['HTTP_CONNECTION']
#當前請求的 Connection: 頭部的內容。例如:「Keep-Alive」。
$_SERVER['HTTP_HOST']
#當前請求的 Host: 頭部的內容。
$_SERVER['HTTP_REFERER'] #鏈接到當前頁面的前一頁面的 URL 地址。
$_SERVER['HTTP_USER_AGENT']
#當前請求的 User_Agent: 頭部的內容。
$_SERVER['REMOTE_ADDR'] #正在瀏覽當前頁面用戶的 IP
地址。
$_SERVER['REMOTE_HOST'] #正在瀏覽當前頁面用戶的主機名。
$_SERVER['REMOTE_PORT']
#用戶連接到服務器時所使用的端口。
$_SERVER['SCRIPT_FILENAME'] #當前執行腳本的絕對路徑名。
$_SERVER['SERVER_ADMIN']
#管理員信息
$_SERVER['SERVER_PORT'] #服務器所使用的端口
$_SERVER['SERVER_SIGNATURE']
#包含服務器版本和虛擬主機名的字符串。
$_SERVER['PATH_TRANSLATED']
#當前腳本所在文件系統(不是文檔根目錄)的基本路徑。
$_SERVER['SCRIPT_NAME']
#包含當前腳本的路徑。這在頁面需要指向自己時非常有用。
$_SERVER['REQUEST_URI'] #訪問此頁面所需的
URI。例如,「/index.html」。
$_SERVER['PHP_AUTH_USER'] #當 PHP 運行在 Apache
模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的用戶名。
$_SERVER['PHP_AUTH_PW'] #當
PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的密碼。
$_SERVER['AUTH_TYPE']
#當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是認證的類型。
avrilnote 發表在 痞客邦 留言(0) 人氣(309)
avrilnote 發表在 痞客邦 留言(0) 人氣(5,851)
http://blog.raienet.com/410
一、前置作業
PHP 檔案上傳運作原理
PHP 上傳檔案時會先將檔案移到暫存目錄,上傳成功後再將檔案送往上傳目錄並自動清除暫存檔
php.ini 檔案上傳相關設定
avrilnote 發表在 痞客邦 留言(0) 人氣(1,476)

http://plus-now.com/?p=428
最近找到一個不錯的套件PHPExcel,這個套件解決我資料匯出的問題,以往我在匯出資料都是採用CSV檔,此種方法最簡單,只要用”
逗號”隔開就可輕易的匯出檔案,但此種方法也有著很多的缺點,以下列舉幾個我比
較常發生的缺點:
avrilnote 發表在 痞客邦 留言(1) 人氣(5,203)
法一:
try {
|
2 |
$hostname = "localhost"; |
3 |
$dbname = "test"; |
4 |
$username = "root"; |
5 |
$pw = "taiwan"; |
6 |
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname","$username","$pw"); |
7 |
$dbh->query('SET NAMES "utf8"'); |
8 |
} catch (PDOException $e) { |
9 |
echo "Failed to get DB handle: " . $e->getMessage() . "\n"; |
10 |
exit; |
11 |
} |
12 |
$res = $dbh->query("select * from tt order by t_id desc limit 1 ")->fetch(); |
13 |
$res[t_id] = intval(doubleval(substr("$res[t_id]",1)))+1; |
14 |
|
15 |
//phpExcel開始 |
16 |
ini_set('memory_limit','1024M'); |
17 |
require_once('phpExcel/Classes/PHPExcel/IOFactory.php'); |
18 |
$Excel = PHPExcel_IOFactory::createReader('Excel5'); |
19 |
$Excel = PHPExcel_IOFactory::load('test.xls'); |
20 |
//$objWorksheet = $objPHPExcel->getActiveSheet(); |
21 |
$sheet = $Excel->getSheet(0); |
22 |
$array_out[] = null; |
23 |
foreach ($sheet->getRowIterator() as $row_key => $row){ |
24 |
$cellIterator = $row->getCellIterator(); |
25 |
$cellIterator->setIterateOnlyExistingCells(false); |
26 |
foreach ($cellIterator as $cell_key => $cell){ |
27 |
$array_out[$row_key][$cell_key] = $cell->getValue().''; |
28 |
} |
29 |
} |
30 |
$length = count($array_out)-1; |
31 |
for($i=1;$i<=50;$i++){ |
32 |
for($j=0;$j<=1;$j++){ |
33 |
if($j==0){ $a = $array_out[$i][0]; } |
34 |
if($j==1){ $b = $array_out[$i][1]; } |
35 |
} |
36 |
$ins = $dbh->query("insert into tt (t_id,t_name,t_phone) values ('t$res[t_id]','$a','$b')"); |
37 |
} |
avrilnote 發表在 痞客邦 留言(1) 人氣(3,309)
以下列出常用的樣式設定方式 (以 /* ... */ 標註者為說明文字):
1. 設定部落格背景 (圖片與顏色)
透過 body 內的 background 屬性設定,例如:
body { background:#000000; } /* 將背景設成黑色 */
body { background:url(圖片網址); } /* 將圖片網址設成背景 */
avrilnote 發表在 痞客邦 留言(0) 人氣(1,119)
呼叫 DoPrint() 執行列印
透過 WScript.Shell 修改頁面設置的登錄值
function DoPrint()
{
try
{
// 設定頁首頁尾及邊界
var ret = saveAndClearSetting();
// 列印
window.print();
}
catch (e)
{
alert("err="+e.description);
}
}
var hkey_path = "HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
var hkey_key_header = hkey_path + "header"; // 頁首
var hkey_key_footer = hkey_path + "footer"; // 頁尾
var hkey_key_margin_bottom = hkey_path + "margin_bottom"; // 邊界(下)
var hkey_key_margin_left = hkey_path + "margin_left"; // 邊界(左)
var hkey_key_margin_right = hkey_path + "margin_right"; // 邊界(右)
var hkey_key_margin_top = hkey_path + "margin_top"; // 邊界(上)
var topMargin = 5; //***注意: IE預設的單位為公厘(mm)
var leftMargin = 5;
var rightMargin = 5;
var bottomMargin = 5;
// 設定頁首頁尾及邊界
function saveAndClearSetting()
{
try
{
var RegWsh = new ActiveXObject("WScript.Shell");
RegWsh.RegWrite(hkey_key_header, ""); //頁首頁尾設為空白
RegWsh.RegWrite(hkey_key_footer, "");
RegWsh.RegWrite(hkey_key_margin_bottom, parseFloat(bottomMargin)/10/2.54); //***注意: 登錄值的單位為公吋
RegWsh.RegWrite(hkey_key_margin_right, parseFloat(rightMargin)/10/2.54);
RegWsh.RegWrite(hkey_key_margin_left, parseFloat(leftMargin)/10/2.54);
RegWsh.RegWrite(hkey_key_margin_top, parseFloat(topMargin)/10/2.54);
return true;
}
catch (e)
{
if ( e.description.indexOf("伺服程式無法產生物件") != -1 )
alert("請調整IE瀏覽器的安全性\n網際網路選項\安全性\自訂層級\n「起始不標示為安全的ActiveX控制項」設定為啟用或提示。");
else
alert("ERR="+e.description);
}
return false;
}
avrilnote 發表在 痞客邦 留言(0) 人氣(2,627)
avrilnote 發表在 痞客邦 留言(0) 人氣(290)
InnoDB 轉換步驟:
01. mysqldump -u[user] -p[password] [databasename] > [dump_name] # 備份資料庫
02. /usr/local/mysql/bin/mysqladmin -u root -p shutdown # 停止資料庫
或是將整個 mysql tar 起來也可以。(不過還是建議用 mysqldump 的方式備份)
03. 建議將 InnoDB 中文參考手冊看過一次,這樣遇上問題,不會浪費太多時間在找答案。
InnoDB 中文參考手冊
http://www.twbb.org/ebook/MYSQL_INNDB_BIG5/
【例如:InnoDB 表不支持全文搜索(fulltext search),這樣我們就得
注意等等記得要將備份出來的資料庫,刪掉有關 Fulltext 的索引】
盡量看過,不然有先限制不知道的話,弄垮會浪費更多時間。
InnoDB 的限制
http://www.twbb.org/ebook/MYSQL_INNDB_BIG5/14.htm#InnoDB_restrictions
04. cd /usr/local/mysql/support-files/ 找尋適合主機記憶體的設定檔,必將設定檔拷貝到 /etc/my.cnf。
05. vi /etc/my.cnf ,將以下幾項註解取消掉。(以下為 my-large.cnf 的設定檔)
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 20M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
加上 default-table-type=innodb
加上這段之後,以後新增的資料表型態都會是 InnoDB 囉,
不然每次新增一次資料表,SQL 後面得加上 Type=innodb;
避免麻煩,就先設定進去吧!但這個步驟不等於直接將MyISAM改
變成 InnoDB 型態喔!
當然啦!要用InnoDB當然得改成InnoDB的格式囉。^^"
06 .將剛剛備份出來的檔案,將Type=MyISAM改成Type=innodb。
07. /usr/local/mysql/bin/safe_mysqld --user=mysql & # 啟動資料庫
08. 建立一個新的資料庫(資料庫名稱跟備份出來的資料庫名稱一樣)。
09. mysql -u[user] -p[password] [database_name] < [dump_name] # 將改好的資料匯入資料庫中!
10. 做 Transaction 的測試,假如都沒問題,那就大公告成囉!
* 設定檔的選擇是參照記憶體大小來選擇。
my-huge.cnf - 1G~2G 、my-large.cnf - 512M 、
my-medium.cnf - 32M - 64M 、my-small.cnf <= 64M 。
InnoDB:my-innodb-heavy-4G.cnf
* 假如不會將備份出來的資料庫改型態,那麼您可以用下面這個指令,
直接改變資料表的型態。
ALTER TABLE [tablename] TYPE=InnoDB
如有存放全文索引功能的話,轉換會失敗喔!這點請各位要注意一下!
* 假若~你有一堆資料表要改,可以用下面的指令:
root# mysql_convert_table_format [opt] --type=InnoDB dbname [tablename]
但千萬注意!不要改變 mysql 資料庫的資料型態喔!因為 mysql
資料庫存放的是 MySQL 內部的管理資訊,所以必須保持 MyISAM 的格式。
* 加大 tablespace 空間:
innodb_data_file_path = ibdata1:1G;ibdata2:1G:autoextend:max2G
上面的意思是,tablespace 包含 ibdata1 & ibdata2 兩個檔案,
若檔案不存在,則建立容量各為1G的檔案。一旦未來 InnoDB 需要,
更多的空間,則 ibdata2 將每次自動增加 8MB,直到2G為止。
* MySQL 3.23.n,innodb_data_home & innodb_data_file_path
設定是必須要有的,MySQL 4.0.0 之後的版本則是非必須的。
In php/mysql April 7, 2006 - 9:38 am
今早六點半就起床準備十一點的demo,結果意外的發現在開發機上運作正常的程式 deploy 到 notebook後居然連login都進不去。
經過一番測試才發現nb上裝的環境是 php 5.1.1 + mysql 5.1 而開發機是 php 5.0.4 + mysql 4.1,從 php 5.1開始php是預設抓美國時區,所以timezone必需要在php.ini裏正確設定。
語法如下:
php.ini 內
[date]
date.timezone = Asia/Taipei
另外有一個 php function (signature 如下):
bool date_default_timezone_set ( string timezone_identifier )
只要輸入 date_default_timezone_set( “Asia/Taipei” ) 即可。
這件事得到兩件教訓:
-開發過程中沒事千萬別換系統版本,即使版號只差 0.1 也不能動,只要有一個地方改變,整個 QA process就要重跑一遍
-RTFM
avrilnote 發表在 痞客邦 留言(0) 人氣(218)
mysql中文亂碼的原因
*mysql中文亂碼的原因
mysql 會出現中文亂碼的原因不外乎下列幾點:
→ mysql server本身設定問題,例如還停留在 latin1
→ mysql table 的語系設定問題(包含 character 與 collation)
→ 客戶端程式(例如 php) 的連線語系設定問題
mysql 4.1 及之後的版本在語系方面增加了許多功能,它可以設定語系的層次從最底層的 server, database 到單一
table, column, connection 都可以設定,而除了語系之外,還可以指定搭配不同的
collation(校對),所以組合百百種,只要一個錯了就難逃亂碼的命運。
進phpmyadmin找到可輸入 sql query的畫面,然後鍵入:
show variables like '%character%';
這句話會顯示目前資料庫使用的語系設定,一般國外的網站或剛裝好的 mysql 4.1預設都是 latin-1。
[新增資料庫]
如果你熟悉 phpmyadmin 的操作,在畫面上就可以選擇建立新 database 要用的語系,
charset 請選擇 UTF-8 Unicode (utf8)
collation 請選擇 utf8_general_ci (ci 代表 case insensitve 大小寫沒差)
[修改資料庫]
改 database語系,同樣在 phpmyadmin 的query畫面鍵入下面兩行:
alter database myblog
character set utf8;
前面曾經提過,mysql的語系設定是多層次的,前面我們把database與table的語系都設定正確,但程式與mysql連線時的語系則是由 connection 來決定,這部份就要使用程式碼
mysql_query("SET NAMES 'utf8'");
這句話會同時設定 client, results, connection三者使用的語系為 utf-8。
最後檢查是否全部改成 utf-8
show variables like '%character%';
此時你應該會看到大部份欄位都是utf-8了,除了 server 這項之外,如果是用別人的 hosting 主機,就沒法兒改這部份,但平常做案子時大部份都可以直接控管mysql,此時就可以用 my.ini 設定:
[mysqld]
default-character-set=utf8
告訴mysql server啟動時要用 utf-8即可。
*mysql中文亂碼必勝解決法
1、mysql 啟動時會讀取一個預設的 config 檔,一般名稱為 my.ini,而它會到下列兩位置去尋找這個檔案:
C:\windows\my.ini 也就是作業系統的安裝目錄,也有可能是 C:\winnt\my.ini
C:\:my.cnf 也就是 C disk 的根目錄
2、my.ini 裏的內容為:
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
init_c
其中 mysqld 是指定 server 啟動時要用的語系,但如果這裏設定為 utf8 可能會讓許多英文軟體不開心,例如
osCommerce/mediaWiki/wordpress/drupal/gregarius,所以這裏建議設成
latin1。要使用utf8中文的人,只要記得建資料庫時將它設成utf8,讓中文程式正確的使用 utf8 與它溝通即可。
下面的 client 則是設定當 client 連線時要使用什麼語系,但可惜的是這個設定不是每個 client 都會鳥它,基本上只有
mysql 自已家的程式,例如 mysql.exe, mysqld.exe, mysqladmin.exe 或是 MySQL Control
Center 這種程式會去讀取這個設定檔然後改用 utf8 連線。
所以通常會用一個獨立的檔案來處理 mysql connection的設定,例如:
PHP:
[code]
<?
//database connection details.
$host = "localhost";
$link = mysql_connect($host, "xxx", "xxx");
mysql_query("SET NAMES 'utf8'");
mysql_select_db("your_table_name_here", $link);
?>
[/code]
請注意在 mysql_connect後第五行的地方有加上一個 "set names 'utf8' "的指令,告訴mysql 這個 connection 之後的連線內容都要使用utf8,經過這樣設定後,通常就可以解決大部份問題。
從這裏也可以推想得知,如果你有用某種 custom connection pooling 機制,就要記得在每次建立新的 connection 後立即設定為 utf8。
avrilnote 發表在 痞客邦 留言(0) 人氣(11,139)