mysql資料庫亂碼問題處理

如果你用的php+mysql系統夠多,一定會遇到亂碼的問題,網路上有一堆解法,但是這些是對的嗎?不知道,我照了幾篇來做,就是有問題。

有一些國外的系統,使用的編碼方式是latin1,字集是用latin1_swedish_ci,結果系統運作的時候是正常的,但是如果系統出了問題,要從phpmyadmin進去維護,就會一個頭3個大。有人說這是因為在latin1編碼中存入big5字型的關係,結果我測試的結果,是在latin1中存入了utf8中文字,所以沒有辦法正常的顯示。因為不是所有的環境都可以透修改my.ini來達成,所以就要繞道而行。

先來證明一下假設好了,下一下sql指令,看一下資料庫中用了那些字集(編碼方式)
SHOW VARIABLES LIKE ‘character_set%’;
再來看一下是用了字集中的哪些字
SHOW VARIABLES LIKE ‘collation%’;

mysql中的操作指令
mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;

mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;

SET NAMES ‘utf8’;
等於下面三個指令
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

好咧,就來看一下在php結合mysql中 要怎麼處理,可以使用下面的指令
mysql_query(‘SET CHARACTER SET utf8’);
mysql_query(‘SET NAMES utf8’);
mysql_query(‘SET COLLATION_CONNECTION utf8’);
mysql_query(‘SET COLLATION_DATABASE latin1’);

接著,就出現正常的內容囉!怎麼實際透過php操作mysql,還有一點技巧,我在這裡就不說了,想知道的留言問,免得被別人整篇抄去。

在Linux下使用php連線oracle database

之前看網路上的資料,使用php連線oracle都不成功,今天剛好有空,就來測一下吧!

網路上的資料,大多都是教大家怎麼在Windows下使用appserver來連線oracle database,也有人介紹ODBC的方式來抓資料,但是ODBC是微軟的產品,並不是所不尚平台上都有這個元件可以呼叫,而且也為了系統穩定度,linux下開發php一直是小弟我的工作需要。之前看了某一篇文章,介紹linux下使用php連線oracle db,但是測試失敗,由於沒有急迫性,所以也就沒有繼續測下去,現在,急迫性出現,剛好今天晚上也有空,那就來測試一下吧!

測試的環境如下

一、CentOS 5.3
二、內建的php
三、內建的OCI連接元件

也就是說,灌好CentOS Linux就可以直接連Oracle了,之前網路上的給的概念都有一些些問題。

其實,今天測起來還蠻順的,在linux下使用php連接oracle db的動作如下

1.檢查php.ini 看看extension有沒有 oci8.so

檢查php中是不是有orcale的連接元件

2.使用OCI指令來寫個測試的PHP
<?php
oci_connect();
?>
這個只是測試oci元件是不是正常運作
當然,會出現錯誤訊息,因為沒有給足夠多的參數,正常畫面如下

2009-09-30_205400.jpg
3.寫個oracle DB連線的php吧
$con=oci_connect(‘user’,’password’,’db’) or die (‘Fail to connect Oracle DB’);
對oracle 來說,資料庫稱為user,因為它是先規劃table space(SID),再在table space上建立user,再在user中建資料表。
不過,第三個參數講成db名稱是怪怪的,我是使用SID才連線成功的,因為兩台linux是不同一台。

php原廠文件說 db是選擇性的,請參考這裡,內容可能是orcale 的instance或是tnsnames,如果沒有指定,PHP使用的環境變量ORACLE_SID和TWO_TASK確定的名稱,當地的Oracle實例和tnsnames.ora中相應的位置。

另外還可以指定字集,以及連線的模式,連線的模式可以是OCI_OPERATOR/OCI_SYSDBA,假設要指定連線模式,還需要使用oci8.privileged_connect來設定。

$req=oci_parse($con,’sql statement’) or die (‘Fail to get data’);
oci_execute($req);
接下來就是取出資料了!可以用do while來把資料拿出來
當然也可以用for loop來做,就看各位看官的習慣囉!

while ($row=oci_fetch_assoc($req)){
foreach ($row as $item){
echo $item. “\n”;
}
}

oci_fetch_assoc應該是計算有多少筆資料的涵式

測試結果,成功使用php連接鼎新tiptop GP5,tiptop GP5是使用linux版的oracle 11G,我看日後有一些報表的開發,真的可以自己來囉!另一套使用oracle的系統也是11g,不過是在windows server 2003 R2上,所以還要再找時間去測看看!

FCKeditor PHP調用筆記

之前編輯器都是使用TinyMCE,其實用起來也蠻習慣的,很多人批評TinyMCE自動加了很多不必要的HTML Tag,所以很多人不用,我用起來是還好,反正我對HTML也蠻熟的,有什麼怪怪的地方我看的出來。TinyMCE是一套優秀的網頁資料編輯器,很多地方都可以看到它的蹤影。

接下來進入FCKEditor的主題吧!先講ToolBar吧!
可以在 /fckeditor/fckconfig.js中自行定義
設定在
FCKConfig.ToolbarSets[“Name”] = [
參考下面的對照表吧!
] ;

並且在呼叫fckeditor.php後設定

參數

說明

參數

說明

Source

原始碼

DocProps

文件屬性

Save

儲存

NewPage

開新檔案

Preview

預覽

Templates

樣板

Cut

剪下

Copy

拷貝

Paste

貼上

PasteText

貼為純文字

PasteWord

從 Word 貼上

Print

列印

SpellCheck

拼字檢查

Undo

復原

Redo

復原

Find

尋找

Replace

取代

SelectAll

全選

RemoveFormat

清除格式

Form

表單

Checkbox

核取方塊

Radio

選項按鈕

TextField

文字區域

Select

下拉選單

Button

按鈕

ImageButton

影像按鈕

HiddenField

隱藏欄位

Bold

粗體

Italic

斜體

Underline

底線

StrikeThrough

刪除線

Subscript

下標字

Superscript

上標字

OrderedList

數字項目符號

UnorderedList

項目符號

Outdent

減少縮排

Indent

增加縮排

Blockquote

區塊引用

JustifyLeft

靠左

JustifyCenter

置中

JustifyRight

靠右

JustifyFull

左右對齊

Link

建立連結

Unlink

移除連結

Anchor

錨點

Image

插入圖片

Flash

插入Flash

Table

插入表格

Rule

插入水平線

Smiley

表情符號

SpecialChar

特殊符號

PageBreak

分頁符號

Style

樣式

FontFormat

字體格式

FontName

字型選擇

FontSize

字型大小

TextColor

文字顏色

BGColor

背景顏色

FitWindow

編輯器最大化

ShowBlocks

顯示HTML標籤區塊

About

關於FCKeditor

實際測試的結果,在Firefox 3.0.10中
自定的Toolbar SET會有問題,怎麼弄就是呼叫不到
網路上的做法是說,把Default的Tool Set改名
把自己定義的Tool Set設定在Default裡面就好。

外觀(Skin)的修改,也是修改fckconfig,js
FCKConfig.SkinPath = FCKConfig.BasePath + ‘skins/office2007/’ ;
把要換上的外觀(皮膚,skin)路上修改好存檔即可。
這裡可以下載FCKeditor最新的外觀(皮膚)

再來說PHP中的調用方式吧!

<?php
include_once(“./fckeditor/fckeditor.php”) ; //呼叫fckeditor的設定檔進來
$oFCKeditor = new FCKeditor(‘FCKeditor1’) ; //要傳送的變數名稱定義為FCKeditor1
$oFCKeditor->BasePath = ‘./fckeditor/’ ; //設定一下路徑
$oFCKeditor->Config[‘EnterMode’] = ‘br’; //設定換行的方式是要用BR 或是 P
$oFCKeditor->Value = ‘Some sample text here.’ ; //設定預設值
$oFCKeditor->Width = ‘547’; //設定寬度
$oFCKeditor->Height = ‘400’; //設定高度
?>
<form action=”./getdata.php” method=”post” target=””>
<?php
$oFCKeditor->Create() ; //建立FCKeditor的物件
?>
<br>
<input type=”submit” value=”Submit”>
</form>

接收的檔案叫getdata.php
內容超簡單的
<?php
$ans=stripslashes( $_POST[‘FCKeditor1’] ) ; //去掉頭尾的空白
?>

<?php echo $ans; //顯示出內容 ?>

設定模板(Template)的方式
設定檔在 \fckeditor\fcktemplates.xml
圖檔位置在 \fckeditor\editor\dialog\fck_template\images

雖然fcktemplates.xml裡面的內容是xml
也沒有這麼難啦!按照裡面的範例改一下
就可以弄出自己相要的模板,而且連預設圖案都可以放上去。
我總共設計了5個模板,請參考下圖。(PS.私人設計,恕不分享)

FCKeditor的圖片功能蠻強的,可以將圖片自己上傳到主機上,上傳之後,再從主機上選擇,選擇後,系統會自動把圖片的路徑填好。
缺點1 沒有辦法看到縮圖(有網友公佈自己修改出縮圖的方法)。
缺點2 自己上傳檔案,其實有些網路使用者認為不安全。

Filemanager要設定好才可以順利上傳
設定檔fckeditor\editor\filemanager\connectors\php
改成這樣==>
$Config[‘Enabled’] = true ;
$Config[‘UserFilesPath’] = ‘你要存放的路徑’ ;

fckconfig.js中也要改一下
var _FileBrowserLanguage = ‘php’ ; <—-設定我們所使用的語言

就可以上傳和使用檔案了

我的版型Sample

其實這樣的使用方式並不順,用FCKeditor的Filemanager來上傳檔案,仍有許多的問題,有網友把Filemanager做了修改,可以自動產生縮圖,但是這樣FCKeditor就完全失去了相容性,日後版本升級,上傳的部份就會失效,要怎麼處理呢?FCKeditor有一隻Plugin叫我CKFinder,等我有空的時候再來寫一下怎麼使用CKFinder來上傳檔案好了,當然CKFinder不是只能上傳圖片,文件(PDF,word,excel,powerpoint)等,通通都可以上傳哦!正式版是要錢的,但是Demo版的是不用錢的,Demo版的CKFinder就讓FCKeditor如虎添翼,上傳動作變的非常的順。

最後,祝大家使用愉快~

PHP 亂數密碼產生器

Sample 1:
function randStr($len=6)
{
$chars=’ABDEFGHJKLMNPQRSTVWXYabdefghijkmnpqrstvwxy23456789#%*’;
// characters to build the password from
mt_srand((double)microtime()*1000000*getmypid());
// seed the random number generater (must be done)
$password=”;
while(strlen($password)<$len)
$password.=substr($chars,(mt_rand()%strlen($chars)),1);
return $password;
}

Sample 2:
function generatorPassword()
{
$password_len = 7;
$password = ”;

// remove o,0,1,l
$word = 布啦布啦布啦 , , Leave a comment

wordpress 二次開發

外面一堆文章說wordpress的使用者編碼是MD5
其實~測試的結果是~他可以接受2種編碼
第一種編碼~我不確定是什麼編碼方式~
長的像這樣 $P$BU2RGPBzC0ITA918rljQxn.EYW3ul5/
第二種編碼~MD5 hash
長的像這樣 481ab5322e207670008856dafdb74bda
假設~我們使用MD5編碼去改「忘記」的密碼(mysql/phpmyadmin)
是可以登入的~但是….登入之後~MD5編碼會被改掉
所以…..再用原來的password登入之後~
就會登入失敗~
所以…如果要做二次發的時候
……..怎麼辦咧
還是有可能前台後來進進出出…
只好蠻幹~登入之前這麼做
查看看這個使用者在不在~不在的話~就insert這個使用者
如果在的話….就去更新密碼
但是….問題又來了~
wordpress的使用者權限是記在wp_usermeta中~該不會又要再塞一次值吧!
實在給他#$%^&*()(*&^%$……..遜到爆

DOM-XML issue of PHP

I use a package to generor the rss feed, but it show the message as below.

Warning: require_once(class.DomDocument.inc.php) [function.require-once]: failed to open stream: No such file or directory in…

The it will show me the fatal erro, It could not load file ‘class.DomDocument.inc.php’.
But the file does not include in the package.
And I could run these file in another server, so I guest the question made from a addon of php.

I modify the code to get the debug message:
class.RSSItemList.inc.php
class.ObjectList.inc.php
class.RSSItem.inc.php
class.RSS_V_200.inc.php
class.RSS_V_abstract.inc.php
class.DomDocument.inc.php <—-it does not include this file in the package.

I research the data in the google, someone says that , it need the libxml2 library.
But in the default ver. of apache in the linux platform, it include already.
And I research the others file about the XML and DOM.
Finaly, I got the answer, It need php-domxml addon.
Just install it through yum, and don’t forget restart apache.
Let the apache reload the php.ini , and it will load the addon for php.

command as below.
yum install php-domxml
service httpd restart

session還是記錄一下時間比較好

在linux平台上進行php程式開發時,session可以指定路徑存放~
而且裡面的內容是純文字檔~
假設在session中記錄了相關的資料~
答案~密碼~動作就被看光光了~
所以~在存在session中的資料~重要的~還是要加密一下~

另外,在某些borswer開啟下~就會記錄開啟的session編號~
所以~如果在session中沒有記錄上次執行的時間
那麼 …session不會timeout~永遠都有效~
這是多麼恐怖的一件事啊~
難怪某社群網站~被我用這種方式打造出來的機器人玩翻掉..
一直timeout也很怪~
那session判斷的程式~也含更新session中時間的功能的話~
也許就不會有這樣的問題了…
只是~會花一點點效能~

php5連接Oracle資料庫

因為工作的需要~需要透過php去連接Oracle資料庫

php除了連接mysql之外~也要連接Oracle資料庫
因為~公司主要的資料庫都是Oracle10g
1.鼎新tiptop GP5
2.MES

所以想利用php去oracle裡抓資料出來用~
我的php環境是Base on php5之上~
使用的OS~是Centos 5.0版
記憶體512MB ASUS 1U Server

Oracle原廠網站上提供了兩隻rpm
分別是
oracle-instantclient-basic-10.2.0.4-1.i386.rpm
oracle-instantclient-devel-10.2.0.4-1.i386.rpm

但是這兩隻rpm的處理方式~
在官方文件中說的不清楚~
而且~如果要讓php在apache中被支援~
這整個動作變的很麻煩~
要重新編過apache(httpd)
所以最簡單的處理方式就是動態載入 Read more

XAMPP VS. AppServ 使用心得

前陣子進行程式開發
都是使用XAmpp
PHP、MySQL、PhpMyAdmin、FTP、Mail和一些Mod
都包在裡面
加上執行Zend~加速程式
一個免安裝包解開也要個近500MB
執行之後~對一個兼寫程式加上修圖的個人電腦
跑起來真是吃力
後來獨立出一台Server來跑~
程式開發起來~才比較順

Zend好像很少人跑~
殊不知道有了Zend的plugin之後~
一台舊機器也可以跑的很順
不跑Zend可以嗎?
可以~不過~這樣程式碼就必須整個攤在陽光下
這是我不樂見的~
至於怎麼保護~網路上有很多說明
不在這裡討論

為了能讓我的NB順利建立起開發環境
回去看AppServ的官網
最近版本是2.5.9
而且還出了Zend Pluging的安裝包
馬上download回來用

安裝起來~
功能是比較少沒有錯
但是~系統執行起來很順
用時開了Word Excel Firefox IE 和繪圖軟體
也不會感覺到Apache運作上任何的lag
至於更新程式會用到ftp時
再來用filezilla來安裝囉~

原來的Xampp~暫時停用
不過Apache中的mod~我會再試看看
可不可以拿來appserv來用
如果可以的話~可是會省非常多的時間