公司PHP測(cè)試服務(wù)器出現(xiàn)宕機(jī),運(yùn)維同事早先沒有做鏡像備份,硬盤也沒法回復(fù),只能重新搭建新的測(cè)試環(huán)境。作為一個(gè)PHP門外漢,開始了PHP環(huán)境搭建之旅。

PHP應(yīng)用服務(wù)器部署(源碼安裝)
使用
yum安裝雖然方便,但這取決于源的版本,有些源若版本較低會(huì)出現(xiàn)PHP在支持?jǐn)?shù)據(jù)庫(kù)驅(qū)動(dòng)方面支持不足,特此選擇用源碼安裝。
- 下載PHP源碼
- php download
http://php.net/downloads.php/ - 下載
wget http://php.net/get/php-5.5.38.tar.gz/from/a/mirror
2.編譯和安裝PHP源碼
tar -zxvf php-5.5.38.tar.gz
cd php-src-php-5.5.38
./buildconf --force
配置相關(guān)參數(shù)
/configure --enable-fpm --enable-mbstring --with-mysql --with-mcrypt --enable-inline-optimization —disable-debug
./configure --enable-fpm --enable-mbstring --with-mysql --with-mcrypt --enable-inline-optimization --disable-debug
make
make install
cp ~/php-src-php-5.5.32/php.ini-production /usr/local/lib/php.ini
編譯過程要求依賴相關(guān)包,比如gcc,autoconf等,根據(jù)提示使用
yum安裝對(duì)應(yīng)依賴包
3.配置PHP-FPM服務(wù)
- PHP-FPM啟動(dòng)文件
cp ~/php-src-php-5.5.32/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm - 授權(quán)
chmod 775 /etc/init.d/php-fpm - PHP-FPM配置文件
cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
oracle客戶端安裝
- 下載
- download source
[oracle下載](http://www.oracle.com/technetwork/cn/database/features/instant-client/index-092537-zhs.html/) - npm下載相關(guān)包
使用wget下載需要的版本,盡量使用最新版本
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
- 安裝
rpm –ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
rpm –ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
rpm –ivh oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
第一個(gè) RPM 將 Oracle 庫(kù)放在 /usr/lib/oracle/11.2/client64/lib
中,第二個(gè) RPM 在/usr/include/oracle/11.2/client64
中創(chuàng)建頭
oracle驅(qū)動(dòng)oci8安裝
oci8為PHP連接oracle的驅(qū)動(dòng),必不可少。
- 下載
- download source
oci8地址 - tar download
wget
- 安裝
tar -xzf oci8-1.4.7.tgz
cd oci8-1.4.7
phpize
./configure --with-oci8=instantclient,/usr/lib/oracle/11.2/client64/lib
make install - 啟用 OCI8 擴(kuò)展
編輯 php.ini并使用以下語(yǔ)句
extension=oci8.so
如果指定extension_dir路徑指向 oci8.so文件的安裝目錄,則可直接如上配置,否則指定決定路徑
- LD_LIBRARY_PATH設(shè)置
設(shè)置環(huán)境變量,在配置文件/etc/profile或~/base_profile添加
/usr/lib/oracle/11.2/client64/lib
啟動(dòng)PHP
service php-fpm start
驗(yàn)證已安裝 PHP OCI8 擴(kuò)展
檢查 OCI8 配置,創(chuàng)建一個(gè)簡(jiǎn)單的 PHP 腳本 phpinfo.php
<?php
phpinfo();
?>
使用相應(yīng)的 URL(例如 http://localhost/phpinfo.php
)將此腳本加載到瀏覽器中。瀏覽器頁(yè)面將包含“oci8”部分,其中顯示“OCI8 Support enabled”并列出可以配置的 OCI8 選項(xiàng).
連接到 Oracle 數(shù)據(jù)庫(kù)
要?jiǎng)?chuàng)建連接,傳遞 Oracle 用戶名和口令憑證作為 oci_connect()
的兩個(gè)參數(shù)。Oracle 數(shù)據(jù)庫(kù)名稱連接標(biāo)識(shí)符必須用于第三個(gè)參數(shù),因?yàn)榕c Instant Client 鏈接的程序始終被視為“遠(yuǎn)離”任何數(shù)據(jù)庫(kù)服務(wù)器,并需要向這些程序告知要連接到的數(shù)據(jù)庫(kù)實(shí)例。對(duì)于已建立的 Oracle 數(shù)據(jù)庫(kù),連接字符串可能是眾所周知的。對(duì)于新系統(tǒng),此信息由 Oracle 安裝程序在安裝數(shù)據(jù)庫(kù)時(shí)提供。安裝程序應(yīng)該已經(jīng)為您配置 Oracle 網(wǎng)絡(luò)并創(chuàng)建服務(wù)名稱,如 orcl。
將連接信息傳遞給 PHP 有多種方法。此示例使用 Oracle 的簡(jiǎn)單連接語(yǔ)法連接到在 mymachine 上運(yùn)行的 orcl 數(shù)據(jù)庫(kù)服務(wù)中的 HR 模式。不需要 tnsnames.ora
或其他 Oracle 網(wǎng)絡(luò)文件:
$conn = oci_connect('hr', 'hr_password', 'mymachine.mydomain/orcl');
有關(guān)簡(jiǎn)單連接語(yǔ)法,請(qǐng)參見 Oracle 的使用簡(jiǎn)單連接命名方法文檔。
在新數(shù)據(jù)庫(kù)中,需要解除對(duì) HR 用戶等演示模式的鎖定并為其提供口令。也可通過在 SQL*Plus 中以 SYSTEM 用戶身份連接并執(zhí)行以下語(yǔ)句來(lái)完成此操作:ALTER USER username IDENTIFIED BY new_password ACCOUNT UNLOCK;
使用 PHP OCI8 和 Oracle
試用簡(jiǎn)單的腳本 testoci.php
修改連接憑證以滿足您的數(shù)據(jù)庫(kù)要求,并將其加載到瀏覽器中。此示例列出了用戶 HR 擁有的所有表:
<?php
$conn = oci_connect('hr', 'hr_password', 'mymachine.mydomain/orcl');
$stid = oci_parse($conn, 'select table_name from user_tables');
oci_execute($stid);
echo "<table>\n";
while (($row = oci_fetch_array($stid,OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : " ")."</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>```
>注意:需要在/etc/hosts中添加`127.0.0.1 主機(jī)名`,在PHP連接oracle中默認(rèn)會(huì)根據(jù)主機(jī)名去訪問,否則會(huì)遇到“ORA-24408: could not generate unique server group name
”錯(cuò)誤。[stackoverflow傳送門](http://stackoverflow.com/questions/10484231/ora-24408-could-not-generate-unique-server-group-name)
本以為是否配置host不會(huì)影響PHP連接oracle,結(jié)果轉(zhuǎn)了一圈花了幾個(gè)小時(shí)時(shí)間發(fā)現(xiàn)只要配置host就解決問題,害的兩次重新安裝PHP,浪費(fèi)大量時(shí)間,以此紀(jì)念。