PHP 及 MySQL 的小文章集合

取不到 Form 存來的變數
為了保安理由, PHP 從 4.2.0 開始, 預設 register_globals = off, 令到 PHP 程式不能直接讀取從 Form 存來的變數, 要用 $_GET, $_POST 等函數讀取, 或 $HTTP_POST_VARS, $HTTP_GET_VARS, 事實上, 亦可以把 4.2.0 以上版本, 還原為原來的直接讀取模式, 方法很簡單, 只需在 php.ini 檔案內的 register_globals, 設定為 = on 便可

對寫 PHP 程式的除錯很重要
有很多時候, 寫程式時, 寫錯了變數的名字, 而 PHP 的設定, 是內定沒有顯示該錯誤, 令到除錯困難, 如閣下是打算用 PHP 開發程式, 而又放在自己的 PHP Server 上用,
可把 php.ini 檔案內的 error_reporting 設定為 = E_ALL
如不想改變 php.ini 的內容 (或是 PHP Server 不是自己的), 亦可在每個程式,
加上一行 error_reporting (E_ALL);
相反, 如果不想輸出任何錯誤,
可設為 error_reporting (0);
但不建議這樣做, 因為對除錯很困難 !!

為何有時候用 phpMyAdmin 取不到資料庫的內容
有時候會只得一片空白畫面, 有時候瀏覽器 Hang 著不動
這是一些 PHP 的 Bugs (一般是發生在 4.2.0 或以上版本)
解決方法:
把 config.inc.php 的 $sfg['OBGzip'] 設定為 FALSE
再把 php.ini 的 zlib.output_compression 設定為 Off


安裝 PHP+ Apache 時注意
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
</Files>



AddType application/x-httpd-php .php

不可在同一 http.conf 檔案內同時存在!
可能你表面看來, 以為沒有問題, 但可能會有很多不容易看到的事情發生 (特別是在 HTML Form Input 時)
我說的不可在同一個 httpd.conf 檔案, 當然包括在 /etc/httpd/conf.d 內的 php.conf 檔案啦! (httpd.conf 附加檔群)

Boolean 值的 False 定義
當我們把一些其他類別的變數, 轉換成 Boolean 值時, 以下列出的, 都是定義為 False

Boolean 類, FALSE 值
Integer 類, 0 (zero) 值
Float 類, 0.0 (zero) 值
String 類, 空字串, 或是字串 "0"
沒有元素的陣列 (Array)
任何沒有成員的物件 (Object)
NULL 型態的變數 (包括未曾設定的變數)

使用簡短標籤 (Short tags)
在 PHP 中, 我們經常需要使用一些變數, 顯示在 HTML 內, 一般我們都會在 HTML 內, 使用 PHP <?php echo $Variable; ?> 方式顯示
例如:
<HTML><TITLE><?php echo $MyTitle; ?></TITLE></HTML>

使用這麼長的程式碼, 來列出一個變數, 是否感覺在易讀性方面, 較為累贅呢?

較簡化的方法可改為:
<HTML><TITLE><? echo $MyTitle; ?></TITLE></HTML>

再簡化一些: (因指令只有一行, 所以可以去除 ; 號)
<HTML><TITLE><? echo $MyTitle ?></TITLE></HTML>

但有一個更好的方法, 便是使用簡短標籤 (Short tags):
<HTML><TITLE><?= $MyTitle ?></TITLE></HTML>

利用 here-doc 來輸出 HTML
有時候我們希望在 PHP 中, 顯示多行的 HTML, 一般我們都會採用以下例子的方法:

<?php
$MyTitle = '我的網頁';
echo "<HTML>/n";
echo "<TITLE>/n";
echo $MyTitle . "/n";
echo "</TITLE>/n";
echo "</HTML>/n";
// 其他程式碼
?>

或者是:

<?php
$MyTitle = '我的網頁';
?>
<HTML>
<TITLE>
<?php echo $MyTitle; ?>
</TITLE>
</HTML>
<?php
// 其他程式碼
?>

其實, 當有很多行 HTML 需要輸出時, 可以用一個更簡單的方法, 令程式的可讀性提高, 而又無須離開 PHP <? ?> 指令, 而且可以很容易地加入變數:

<?php
$MyTitle = '我的網頁';
echo <<< HTMLOUTPUT
<HTML>
<TITLE>
$MyTitle
</TITLE>
</HTML>
HTMLOUTPUT;
// 其他程式碼
?>

在以上例子的關鍵是 echo <<< HTMLOUTPUT 的一行, 及 HTMLOUTPUT; 的一行
我們只需把需要輸出的 HTML 包含在這兩行中便可, 這個方法, 稱為 here-doc, 而 <<< 是 here-doc 的語法, 其中 HTMLOUTPUT, 是一析別指標, 可用任何之交字代號都可以 (例如: MYHTML)

注意一點是:
1) HTMLOUTPUT; 一行, 必須開始在該行的第一個字 (Column)
2) echo <<< HTMLOUTPUT 的一行是沒有分號(;) 的
3) HTMLOUTPUT; 要加上分號 (;)

MySQL 中文排序的方法
MySQL 在查詢字符串時是大小寫不敏感的, 在編繹時一般以ISO-8859 字符集作為默認的字符集, 因此在比較過程中, 中文編碼字符大小寫轉換造成了這種現象, 比較應急的方法是對包含中文的字段加上 "binary" 屬性, 使之作二進制比較

例如將 "name char(10)" 改成 "name char(10) binary

在 wml (WAP) 網頁使用 PHP 的強大功能
只需在 xxxx.php 的內容, 加上以下一行便可以

Header("Content-type: text/vnd.wap.wml");

解決 PhpMyAdmin 中文亂碼問題
在 phpmyadmin/libraries/ 中的檔案 select_lang.lib.php 找到
‘big5′ => ‘big5′ 更改為 ‘big5′ => ‘latin1′
再把 ‘utf-8′ => ‘utf-8′ 更改為 ‘utf-8′ => ‘ latin1′
如再發現有問題,
到 phpmyadmin/lang/ 中, 把 chinese_traditional-utf-8.inc.php 改為 另一名字 (i.e. chinese_traditional-utf-8.inc.php.BACKUP)
再把 chinese_traditional-big5.inc.php, 改為 chinese_traditional-utf-8.inc.php


用 $$ 取得變數字串內容值 跟字串同名 的 變數內容
標題很亂 ? .. 不 ! .. 可看下列程式碼示範便清楚, 及明白使用方式

$a="AA";
$b="BB";
$c="a";
echo $a;
echo $b;
echo $c;
echo $$c;

最後一句會列出 $a 的內容 "AA" .. (示範不加 LineFeed, 為了方便看程式碼)

發佈留言