目前分類:PHP (12)

瀏覽方式: 標題列表 簡短摘要
目前開發php網站是使用Appserv作為工作端環境, 利用這次重新安裝系統的機會, 紀錄一下安裝過程

下載 Appserv: http://www.appservnetwork.com

目前主要的版本有 2.5.10 跟 2.6.10, 我使用的是 2.5.10, 主要差別在於 PHP跟 MySQL的版本, 2.5.10用的是都是 5.x, 2.6.10用的則是 6.x, 如果是開發後的網站打算放到租用的虛擬主機, 可能還是以 2.5.10比較合用, 除非能確定虛擬主機目前已經提供了 PHP 6.x 跟 MySQL 6.x, 以避免萬一需要更動程式。


安裝的OS環境是 Windows XP SP3,下載後安裝流水畫面如下:


Jikky 發表在 痞客邦 留言(9) 人氣()

自己設計留言板時,如果沒有避免垃圾留言的機制的話,被廣告機器人用程式塞滿垃圾留言的機會還蠻大的,而且這些垃圾留言還可能來自世界各國,又經常是一些色情網站或木馬網站的留言,真的很困擾。

目前經常看到的避免垃圾留言的機制就是顯示一張內含文數字的圖片,然後去驗證輸入是否相同,如果是自己用Dreamweaver的話,要加上這樣的機制就得花些功夫。不過這幾天在書上看到個方式,值得去嘗試。

作者的觀察到的是,一般的垃圾留言機器人(bot)都會把留言的欄位塞滿,所以只要在表單中設置一個「不顯示」的欄位,引誘留言機器人去填資料,然後判斷該欄位是否有資料,有填入資料的話應該就是留言機器人,那麼就不去新增資料。

作法:
1.在表單中增加一個「不顯示」的欄位,例如在表單中增加這樣一項:
<input type="text" name="Memo" id="Memo" style="display: none;" />
也就是利用 inline的css來讓該欄位不顯示出來,避免填表的人真的填入資料了。

Jikky 發表在 痞客邦 留言(5) 人氣()

PHP檔案如果使用了加上BOM標記的utf8編碼檔案, 在同一檔案中如果想要修改 header(例如利用header轉向), 就會出現錯誤, 因為加上了BOM標記的utf8編碼檔案會先把位於檔案一開頭的BOM標記當成是空白送出(算起來應該是bug吧?!)

有好心人留言回應建議了一個方式, 在該檔案的一開頭就利用 ob_start() 開啟緩衝, 用來避免這個問題!
可行嗎?
其實不行, 除非是在PHP.ini中事先設定開啟 output buffering, 讓加上BOM標記的utf8檔送出的空白不至於影響 header的修改,否則在檔案中利用 ob_start() 開啟緩衝是於事無補, 因為早在 ob_start() 被執行前, php檔案一開啟之後那個BOM標記早就被送出去了。


Jikky 發表在 痞客邦 留言(1) 人氣()

底下這段適用於PHP中計算資料庫中某筆日期時間(datetime)資料, 到今天的目前時間(同樣包含今天日期及目前時間)的天數(整數天), 暫時先寫下內容, 其他後補吧!

<?php
$startymd = date('Y-m-d',strtotime($row_rsUser['bl_date_reg']));
$starthms = date('H-i-s',strtotime($row_rsUser['bl_date_reg']));
$array_ymd = explode('-', $startymd );
$array_hms = explode('-', $starthms);
$startdate =mktime($array_hms[0],$array_hms[1],$array_hms[2],$array_ymd[1],$array_ymd[2],$array_ymd[0]);
$enddate = mktime();
$days=(($enddate-$startdate)/3600)/24 ;

Jikky 發表在 痞客邦 留言(1) 人氣()

太久沒寫程式, 最近往往只顧著解決眼前問題,沒考慮較周詳的處理。
先前遇到的PHP版本不同(PHP4或PHP5)的設定時區問題, 其實可以有更簡單的方式, 就是利用判斷PHP版本方式來使用正確的設定時區方式;PHP的函數這麼多,總該有取得版本的方法。

寫法:
<?php //設定時區為台北, 適用 php4,ph5
if (version_compare( phpversion() , '5.1.0', '>=')){
    date_default_timezone_set('Asia/Taipei'); //PHP5設定時區, 在PHP4無法使用
} else {
    putenv("TZ=Asia/Taipei"); //PHP4設定時區的用法
}

Jikky 發表在 痞客邦 留言(0) 人氣()

這是回答Yahoo知識+提問的內容, 順便po上來!

1. Local端的MySQL相關資料要匯出來(存成SQL文字檔)

2. 確認一下免費網頁空間提供的MySQL版本、資料庫語系、儲存引擎等與你使用的Local端環境是否相同, 若不同可能必須先修改所匯出的SQL文字檔, 以免匯入的時候出現錯誤。(可以直接先匯入看看是否會發生錯誤. 例如較舊版本的MySQL可能不支援具關聯功能的InnoDB引擎)

3. 在免費網頁空間所提供的MySQL匯入在Local端匯出的MySQL資料, 重新建立所需的資料表, 匯入時應注意有無錯誤發生。

4. 修改PHP網頁裡頭與MySQL相關的DSN連結字串(DSN), 從Local端改成適合免費網頁空間提供的MySQL DSN連結字串(即修改MySQL的主機,帳號,密碼等資料)

Jikky 發表在 痞客邦 留言(0) 人氣()

網頁顯示資料庫的純文字資料的時候, 如果是比較長的段落文字, 顯示時因為沒有加上 HTML標籤<p>或</br>, 就會讓原本純文字檔案的分行消失, 連結成不分段落的一大串文字。

例如原本是:
甲: 你今天好嗎?
乙: 我很好! 你呢?
甲: 我也很好!

就會變成:
甲: 你今天好嗎?乙: 我很好! 你呢?甲: 我也很好!

Jikky 發表在 痞客邦 留言(0) 人氣()

稍微接觸了PEAR, PEAR(PHP Extension and Application Repository)對於使用PHP開發網站程式的人, 提供了相當程度的便利, 而且又是完全免費的資源, 實在應該善加利用!

所謂的PEAR, 就是PHP的程式庫, 不但完全免費, 而且包裝成套件的型態方便安裝使用, 比較可惜的是台灣網路上好像比較少相關資源!

不過參考了市面上的PEAR書籍, 才想按照書上的方式去安裝PEAR基本套件, 就發現書上的資訊已經過時, 自行摸索了一番, 整理了一下PEAR基本套件的安裝方式!

1. 可以先到PEAR網站
http://pear.php.net/ , 去看看PEAR的相關資訊, 很遺憾, PEAR官方網站目前並沒有繁體中文版, 先前有熱心人士架了一個台灣PEAR, 不過目前已經停站了!

2. PEAR套件的安裝可以由Web介面進行, 不過首先得先在自己的電腦架設好Web伺服器(或是已經準備了專用的網站主機), 個人是在Windows XP上使用Appserv(安裝後包含Apachem PHP, MySQL及MySQL管理程式PHPmyAdmin)作為開發用主機。

Jikky 發表在 痞客邦 留言(1) 人氣()

原本用PHP5開發網站, 因為主機時區設定與網站不同, 所以用了date_default_timezone_set( "Asia/Taipei" ) 來設定時區, 但移轉到正式的虛擬主機時又是PHP4, date_default_timezone_set不支援, 找了找資料, 好像沒有函數可以用。

不過PHP5除了用date_default_timezone_set( "Asia/Taipei" )之外, 如果是自架主機也可以在PHP.ini設定 date.timezone = Asia/Taipei, 所以php4應該也有相對的方式, 就算不能更動主機設定,  應該也可以用追加主機設定的方式, 找了一下發現PHP4可以這樣解決:

putenv("TZ=Asia/Taipei");

 

在使用國外的虛擬主機的時候, 應該都會遇到timezone與網站不同情形, 整理一下:

PHP4 用
putenv("TZ=Asia/Taipei")

PHP5 用
date_default_timezone_set( "Asia/Taipei" )

也可以在 php.ini 設定: date.timezone = Asia/Taipei

Jikky 發表在 痞客邦 留言(0) 人氣()

2008/06/06 修正

最近設計的網站, 原本用PHP5開發, 沒想到接近完工時, 才發現客戶原有的虛擬主機空間還在用PHP4,大部分的PHP指令好像都正常, 不過今天出現了日期顯示的錯誤。

當初為了顯示月跟日(M-D), PHP5的日期顯示也是拼湊出來的, 不過總是解決了問題。

PHP5的日期輸出:

echo date_format(new DateTime($row_rsNews['date_start']),"m-d");

其中的"m-d"是輸出的格式, 輸出結果為"04-12", "05-01"......

 

但是date_format()在PHP4還沒出現, PHP5之後才開始支援, 所以不能使用。

所以PHP4反而用了最簡單的輸出方式, 子字串substr()函數

Jikky 發表在 痞客邦 留言(1) 人氣()

最近嘗試使用Adobe的Dreamweaver Developer Toolbox來開發資料庫網頁, 該工具只有英文版, 為了修改為中文訊息, 加上初次使用php來撰寫資料庫網頁, 又加上Dreamweaver CS3內定使用utf-8的網頁編碼, 結果處理過程繞了個大圈子, 簡直就是個大災難!

其實起因還是因為阿被的背景, 因為阿被的低階程式偵錯員背景, 讓阿被習慣了用補漏洞的方式處理這個問題, 加上php根基尚未紮實, 著實吃了些苦頭!

不過過程仍有許多值得紀錄, 但是既然是大災難, 就不是三言兩語可以道盡, 還是慢慢挖出回憶再記錄下來好了!

過程大概是:

1.ADDT無法顯示中文, 所以找出了存放英文訊息的檔案把訊息改成了中文。

2.改中文訊息後, 錯誤訊息變成了亂碼。

3.變成亂碼應是判斷訊息文字編碼的問題, 因此直覺的以Notepad把訊息檔讀入, 轉存為utf8編碼的unicode檔案

4.中文訊息變成正常, 但是ADDT部份功能的頁面轉換卻出現header無法修改的錯誤而無法轉換頁面。

5.為解決轉換頁面的問題, 找到了ADDT轉換頁面的部份, 把改寫轉換頁面的方式, 雖然在中文訊息正常的情況下可以轉換頁面, 但轉換頁面的速度較原本慢

6.又把訊息檔改回原本的ANSI格式(big5編碼), 並找到了輸出訊息的函數部份, 把輸出錯誤訊息的函數的輸出結果字串, 從big5編碼改成urf8編碼, 中文訊息顯示正常, 經過修改的轉換頁面函數也同時可以還原為原本寫法。

Jikky 發表在 痞客邦 留言(0) 人氣()

兩個PHP圖表產生元件:

PHP Charts :

http://quimby.gnus.org/circus/chart/chart-manual.php

PHP/SWF Charts :

http://www.maani.us/charts/index.php


Jikky 發表在 痞客邦 留言(0) 人氣()