網絡技術日誌

關於 PHP, Linux, Open Source 及個人生活記載的網誌。

Entries for the ‘程式設計分享’ Category

編譯 PHP 時出現 /usr/bin/ld: cannot find -lltdl

今天在 Centos 用編譯的方法升級 PHP 時,config 一直正常,但在執行 make && make install 時卻出現以下錯誤: /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [libphp5.la] Error 1 上網找了一下, 原來缺少了 libtool-ltdl-devel, 執行以下指令用 yum 安裝 libtool-ltdl-devel: yum install libtool-ltdl-devel 再重新在 php 目錄執行 make && make install 便成功了。

Comments Off

計算 PHP 執行時間

有時發現 PHP 執行很慢, 可以計算一下在伺服器上執行所需時間, 方法如下: 1. 在程式的最開頭插入以下一行, 以紀錄時間: $count_time = microtime(true); 2. 然後在程式最結尾的位置加入以下一行, 就可以輸出整體執行時間: echo “Time Used: “.(microtime(true) – $count_time).”s”; 當然有時想知道個別程式碼的執行時間, 只要將上面兩行, 分別放到想檢查程式碼的頭、尾便可以。

Comments Off

mysql_connect 與 mysql_pconnect

在 php 建立 mysql 連線, 可以用 mysql_connect 及 mysql_pconnect, 它們有甚麼不同呢? mysql_connect 很簡單只建立一個 mysql 連線, 程式執行後連線會自動結束。它的好處是不會長期佔用 mysql 連線數, 但當每次建立連線時會使用多一點系統資源。 mysql_pconnect 建立的連線則不會自動結束,它會保留下次使用,因為不用每次都建立 mysql 連線, 所以相對使用較少系統資源, 但最大問題是連線被保留下來, 如果突破的 mysql 的最大連線數, mysql server 便會停止, 需要重新啟動 mysql server 才可正常運作.

Comments Off

MySQL: headers and client library minor version mismatch

昨日在 MySQL Server 遇到使用 Prepared Statements 出現問題, 系統出現以下訊息: headers and client library minor version mismatch 出現問題原因是 mysql server 及 mysql client 的版本不一致, 因為早前透過 yum 更新了 mysql, 但就沒有更新 php, 所以 php 裡面的 mysql client 還是使用舊版, 版本只有小許不同就會出現這個問題。但奇悝是執行其他 SQL Query 則沒有問題, 只是使用 Prepared Statements 才有問題。 重新編譯了 PHP 後, 便可回復正常。

Comments Off

PHP 問題: Failed to initialize storage module

如果在 PHP 出現 Failed to initialize storage module 錯誤, 可以透過修改 php 程式碼及 php.ini 兩種方法解決, 方法如下: 1. 在出現錯誤訊息的程式裡面, 在 session start() 前面加入: ini_set(‘session.save_handler’, ‘files’); 2. 在 php.ini 裡面, 設定 session_save_path, 然後重新啟動 web server

Comments Off

PHP: fatal error cannot use string offset as an array 錯誤

在 PHP 使用陣列時, 系統出現 fatal error cannot use string offset as an array in xxx 的錯誤訊息的話, 是因為該陣列並未建立所致, 可以在程式開始的部份先作一個檢查, 如果沒有這個陣列存在, 就先建立這個陣列便不會有這個問題了: if(!is_array($var)){ $var = array(); }

Comments Off

PHP 5.3 的 timezone settings

在 PHP 升級到 5.3 後, 在使用日期相關的 functions 時會出現類似以下的錯誤訊息: Warning: strtotime() [function.strtotime]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone [...]

Comments Off

PHP 取得用戶真實 IP

要用 PHP 取得用戶的 IP 十分容易,只要用 $_SERVER['REMOTE_ADDR'] 變數就可以知道用戶的 IP,但如果用戶使用了 proxy server 上網的話,$_SERVER['REMOTE_ADDR'] 只會得到 proxy 的 IP 地址。 以下方法會使用 $_SERVER["HTTP_CLIENT_IP"] 及 $_SERVER["HTTP_X_FORWARDED_FOR"] 解決這個問題: PLAIN TEXT PHP: <?php if (!empty($_SERVER["HTTP_CLIENT_IP"])){     $ip = $_SERVER["HTTP_CLIENT_IP"]; }elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){     $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; }else{     $ip = $_SERVER["REMOTE_ADDR"]; }   echo $ip; ?>

Comments Off

PHP 的 is_file() 及 file_exists()

PHP 的 is_file() 及 file_exists() 都是用作檢查檔案是否存在,它們的分別是 file_exists() 輸入的參數是目錄也會回傳 TRUE,而 is_file() 則只會對檔案回傳 TRUE: PLAIN TEXT PHP: <?php $path ="/path/to/dir"; if(file_exists($path)){     echo "File Exists"; }else{     echo "File not Exists";   // 如果 /path/to/dir 目錄存在會回傳 TRUE ?> 但如果用 is_file(),即使 /path/to/dir 目錄存在,仍然會回傳 FALSE: PLAIN TEXT PHP: <?php $path ="/path/to/dir"; if(is_file($path)){     echo "File Exists"; [...]

Comments Off

MySQL 的流程控制

MySQL 有幾個流程控制的 functions,以下是它們的用法簡介: 1. CASE 它就如同其他程式語言的 switch: // Below will return zero SELECT CASE 0 WHEN 0 THEN 'zero' WHEN 1 THEN 'one' ELSE 'no one' END; // Below will return true SELECT CASE WHEN 5>2 THEN 'true' ELSE 'false' END; 2. IF SELECT IF(expr1,expr2,expr3); // return yes SELECT IF(1

Comments Off

MySQL 的 Safe Update Mode

最近要更新 MySQL 資料表內其中一個欄位的所有資料,只是用以下這個 SQL 指令: UPDATE table_name SET field_name=0; 個 MySQL 回傳的錯誤訊息為: "You are using safe update mode and you tried to update a table without a WHERE clause that uses a KEY column." 查看一些資料後,原來 MySQL 在沒有 WHERE 或 LIMIT 條件下會拒絕執行 UPDATE 或 DELETE querey,即使是沒有 KEY column 的 WHERE 條件也會拒絕執行。 要解決就是將 MySQL 的 Safe Update [...]

Comments Off

Shell Script 輸出顏色文字

Shell Script 可以控制輸出文字的顏色,做法與 html 相似,只是使用 ANSI escape codes 控制顏色輸出。顯示顏色文字的格式如下: 33[ 樣式 ; 文字顏色 ; 背景顏色 m 輸出文字 33[0m 以下是樣色、顏色及背景顏色的可供選項: 文字樣式: 0 一般樣式 1 粗體 4 加底線 5 灰底 7 文字及背景顏色對調 文字顏色: 30 黑色 31 紅色 32 綠色 33 黃色 34 藍色 35 紫色 36 青綠 37 白色 背景顏色: 40 黑色 41 紅色 42 綠色 43 [...]

Leave a Comment

PHP 透過 ip2country 查詢 ip 所屬國家

用 PHP 查詢 ip 所屬國家可以用幾種不同的方法,以下會介紹使用 MaxMind 的函式實現,首先到以下網址下載 MaxMind 函式: http://geolite.maxmind.com/download/geoip/api/php/geoip.inc http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz 將上面的 GetIP.dat.gz 解壓,然後可以用以下程式碼實現: PLAIN TEXT PHP: <?php include("geoip.inc");   $test_ip = "123.123.123.123"; // 這是要查詢的 ip   $gi = geoip_open("GeoIP.dat", GEOIP_STANDARD); echo geoip_country_code_by_addr($gi, $test_ip);   geoip_close($gi); ?> I use ipchicken.com to get my IP address.

Comments (1)

PHP 讀取 XML 檔案

在 PHP4 時沒有專用函式讀取 XML 檔案,而PHP5 已經內建一個讀取 XML 檔案的函式,那就是 simplexml_load_file()。 PLAIN TEXT PHP: <?php $xml = simplexml_load_file("test.xml"); //設定要讀取的 XML,也可以是 URL   print_r($xml); ?>

Comments (1)

幾個實用的 PHP Regular Expression

Regular Expression 在程式開發時檢查及替換字串相當有用,以下是幾個很好用的 PHP Regular Expression 例子: 1. 密碼檢查: 以下的 Regular Expression 會檢查密碼是否夠安全,會檢查密碼必需最少有 8 位,以及最少包括一個小寫字母、一個大寫字母及一個數字: PLAIN TEXT PHP: <?php $password = "Fyfjk34sdfjfsjq7";   if (preg_match("/^.*(?=.{8,})(?=.*d)(?=.*[a-z])(?=.*[A-Z]).*$/", $password)) {     echo "Your passwords is strong."; } else {     echo "Your password is weak."; } ?> 2. Email 地址檢查: PLAIN TEXT PHP: <?php $email = [...]

Comments (1)