給php開啓mysql擴展

對於lamp的安裝,我通常狀況下都是選擇,先安裝php再安裝mysql,php源碼中自帶了mysqlnd,使用起來很方便。php

可是其實並非說必定要使用mysqlndhtml

 

好比我安裝php的時候沒有開啓MySQL的擴展,此時又當如何給php添加功能呢?mysql

咱們能夠經過php擴展的廣泛安裝方法操做,也就是使用phpize生成configure文件,而後make && make install最後在php.ini中添加加載模塊的指令linux

 

 

如下內容來自網絡,請自行測試c++

http://www.cnblogs.com/wangtao_20/archive/2011/03/07/1973621.html總結的方向:在linux下php掛接mysql.so擴展的方法

問題背景:日常咱們都是先安裝mysql,而後才能去安裝php。假如先安裝php,後安裝mysql,因爲php須要鏈接mysql,於是在php引擎中須要配置使用mysql.so擴展。這時須要手動編譯生成mysql.so擴展。

當前問題:在上面狀況下,使用phpize可否實現掛接mysql.so擴展?

實踐結論:使用phpize工具可以生成mysql.so,可是必須加上"--with-mysql=mysql客戶端的路徑"。也就是mysql.so模塊必須用到mysql客戶端才行。
能夠這樣理解,mysql.so內部會調用mysql客戶端,以便實現鏈接mysql數據庫服務器。
咱們經常用到的mysql_connect()可能就是調用了mysql客戶端才能完成鏈接數據庫的操做。



1、爲何書中通常是經常是這樣的順序安裝:先安裝mysql,而後再安裝php,不多看到先安裝php,後安裝mysql?

這樣作。是基於下面緣由:
安裝好mysql後。mysql.so這個模塊才能生成。記得一個細節:在安裝php的時候,須要提供mysql的路徑。由php幫助編譯生成mysql.so模塊。mysql.so這個模塊是在安裝好php的時候生成的。生成這個模塊須要用到一個東西:

mysql客戶端。若是先安裝php,後安裝mysql。那麼沒法按照原來的方式(由php幫助生成mysql.so模塊)掛接mysql.so。經過實踐,發現使用phpize工具生成mysql.so能夠解決這個問題。





2、實踐生成mysql.so的過程

大致思路:須要用到php的源碼包才行。經過源碼包中提供的phpize文件(一個專門掛接php擴展的工具)



2011.3.6測試成功
使用命令:  phpize --with-mysql=/usr/local/mysql/(mysql的安裝路徑)


第一步:進入php源碼中的"ext/mysql"目錄下
命令:cd

第二步:在當前目錄下運行phpize

命令:/usr/local/php524/bin/phpize 

phpize的規則:去哪一個目錄下運行phpize文件,那麼就會在該目錄下生成一個configure文件。

第三步:運行剛纔生成的configure文件

命令: ./configure --with-php-config=/usr/local/php524/bin/php-config --with-mysql=/usr/local/mysql/
這裏最關鍵的是經過--with-mysql參數告訴mysql客戶端的位置。這樣才能生成mysql.so。

實驗的時候,沒有加這個參數,結果錯誤:
./configure --with-php-config=/usr/local/php524/bin/php-config

 
第四步:編譯生成.so文件。最終要的東西
make
make install

結束/////////////////////////////////////////////////////////


第五步:配置php引擎加載該擴展

省略

補充一下:就是去php.ini文件中修改一下配置,加載mysql.so這個擴展(這個擴展文件要放到php指定的擴展目錄下面去)


第六步:測試php引擎是否成功加載該擴展

編寫文件phpinfo.php,內容是:
<?php 
ehco phpinfo(); 
?>

運行後,能夠看到有以下信息顯示:

mysql
MySQL Support    enabled
Active Persistent Links     0
Active Links     0
Client API version     5.1.55
MYSQL_MODULE_TYPE     no value
MYSQL_SOCKET     /tmp/mysql.sock
MYSQL_INCLUDE     no value
MYSQL_LIBS     no value

經過這樣的方式能夠確認,php引擎已經成功加載了mysql.so擴展。



第七步:已經生成的mysql.so。編寫php代碼測試是否能鏈接mysql

第六步成功後,已經知道php引擎已經成功加載了mysql.so擴展。還要確認生成的擴展是否能正常使用。爲何?由於編譯失敗仍是成功都能生成.so的擴展。通常是這樣的:.so擴展裏面其實封裝的就是一些函數,供咱們調用

。假若有些函數沒有生成,最後也會獲得.so的擴展。也許它的.so模塊內部是不完整的,都說不定。以前作一個支付接口的時候就是這樣的問題。.so模塊裏面是用c++語言封裝的函數。模塊雖然已生成。可是並不能正常運行

。函數出現了異常,看不到任何錯誤。後來造成一個觀念:不能覺得,編譯生成了.so文件,就認爲是成功的

測試.so是否能用變得很是必要。如今測試一下生成的mysql.so是否能用。


編寫以下php代碼:

<?php
$conn = mysql_connect("localhost","root","");
mysql_select_db("mysql",$conn);
$results = mysql_query("select * from user");
$row = mysql_fetch_array($results);
var_dump($row);

?>

獲得結果(部分):

array
  0 => string 'localhost' (length=9)
  'Host' => string 'localhost' (length=9)
  1 => string 'root' (length=4)
  'User' => string 'root' (length=4)
  2 => string '' (length=0)
  'Password' => string '' (length=0)
  3 => string 'Y' (length=1)
  'Select_priv' => string 'Y' (length=1)
  4 => string 'Y' (length=1)
  'Insert_priv' => string 'Y' (length=1)
  5 => string 'Y' (length=1)
  'Update_priv' => string 'Y' (length=1)

說明,編譯生成後的mysql.so擴展可以正常使用了。


啓發:若是開始安裝mysql和php的順序不對,後面就會增長了不少麻煩。因此,在實際狀況中,有點經驗的都會"會先安裝php,再安裝mysql",這樣避免了掛接的問題。因此,實際中須要這樣作不多。
假如這樣一種狀況就有用了:php與mysql都已經安裝了。後面根據須要,想安裝oracle等其餘數據庫,php已經安裝了。編譯生成一個其餘數據庫的擴展,思路也是同樣的
相關文章
相關標籤/搜索