公司PHP測試服務(wù)器出現(xiàn)宕機(jī)枢里,運(yùn)維同事早先沒有做鏡像備份,硬盤也沒法回復(fù)狡赐,只能重新搭建新的測試環(huán)境。作為一個(gè)PHP門外漢扶关,開始了PHP環(huán)境搭建之旅阴汇。
PHP應(yīng)用服務(wù)器部署(源碼安裝)
使用
yum
安裝雖然方便,但這取決于源的版本节槐,有些源若版本較低會(huì)出現(xiàn)PHP在支持?jǐn)?shù)據(jù)庫驅(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 庫放在 /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并使用以下語句
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è)簡單的 PHP 腳本 phpinfo.php
<?php
phpinfo();
?>
使用相應(yīng)的 URL(例如 http://localhost/phpinfo.php
)將此腳本加載到瀏覽器中。瀏覽器頁面將包含“oci8”部分别渔,其中顯示“OCI8 Support enabled”并列出可以配置的 OCI8 選項(xiàng).
連接到 Oracle 數(shù)據(jù)庫
要?jiǎng)?chuàng)建連接附迷,傳遞 Oracle 用戶名和口令憑證作為 oci_connect()
的兩個(gè)參數(shù)。Oracle 數(shù)據(jù)庫名稱連接標(biāo)識(shí)符必須用于第三個(gè)參數(shù)哎媚,因?yàn)榕c Instant Client 鏈接的程序始終被視為“遠(yuǎn)離”任何數(shù)據(jù)庫服務(wù)器喇伯,并需要向這些程序告知要連接到的數(shù)據(jù)庫實(shí)例。對(duì)于已建立的 Oracle 數(shù)據(jù)庫拨与,連接字符串可能是眾所周知的稻据。對(duì)于新系統(tǒng),此信息由 Oracle 安裝程序在安裝數(shù)據(jù)庫時(shí)提供买喧。安裝程序應(yīng)該已經(jīng)為您配置 Oracle 網(wǎng)絡(luò)并創(chuàng)建服務(wù)名稱捻悯,如 orcl箩朴。
將連接信息傳遞給 PHP 有多種方法。此示例使用 Oracle 的簡單連接語法連接到在 mymachine 上運(yùn)行的 orcl 數(shù)據(jù)庫服務(wù)中的 HR 模式秋度。不需要 tnsnames.ora
或其他 Oracle 網(wǎng)絡(luò)文件:
$conn = oci_connect('hr', 'hr_password', 'mymachine.mydomain/orcl');
有關(guān)簡單連接語法,請(qǐng)參見 Oracle 的使用簡單連接命名方法文檔钱床。
在新數(shù)據(jù)庫中荚斯,需要解除對(duì) HR 用戶等演示模式的鎖定并為其提供口令。也可通過在 SQL*Plus 中以 SYSTEM 用戶身份連接并執(zhí)行以下語句來完成此操作:ALTER USER username IDENTIFIED BY new_password ACCOUNT UNLOCK;
使用 PHP OCI8 和 Oracle
試用簡單的腳本 testoci.php
修改連接憑證以滿足您的數(shù)據(jù)庫要求查牌,并將其加載到瀏覽器中事期。此示例列出了用戶 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ì)念涮较。