公司PHP测试服务器出现宕机,运维同事早先没有做镜像备份,硬盘也没法回复,只能重新搭建新的测试环境。作为一个PHP门外汉,开始了PHP环境搭建之旅。
PHP应用服务器部署(源码安装)
使用
yum
安装虽然方便,但这取决于源的版本,有些源若版本较低会出现PHP在支持数据库驱动方面支持不足,特此选择用源码安装。
- 下载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
配置相关参数
/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
编译过程要求依赖相关包,比如gcc,autoconf等,根据提示使用
yum
安装对应依赖包
3.配置PHP-FPM服务
- PHP-FPM启动文件
cp ~/php-src-php-5.5.32/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
- 授权
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下载相关包
使用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
第一个 RPM 将 Oracle 库放在 /usr/lib/oracle/11.2/client64/lib
中,第二个 RPM 在/usr/include/oracle/11.2/client64
中创建头
oracle驱动oci8安装
oci8为PHP连接oracle的驱动,必不可少。
- 下载
- 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 扩展
编辑 php.ini并使用以下语句
extension=oci8.so
如果指定extension_dir路径指向 oci8.so文件的安装目录,则可直接如上配置,否则指定决定路径
- LD_LIBRARY_PATH设置
设置环境变量,在配置文件/etc/profile或~/base_profile添加
/usr/lib/oracle/11.2/client64/lib
启动PHP
service php-fpm start
验证已安装 PHP OCI8 扩展
检查 OCI8 配置,创建一个简单的 PHP 脚本 phpinfo.php
<?php
phpinfo();
?>
使用相应的 URL(例如 http://localhost/phpinfo.php
)将此脚本加载到浏览器中。浏览器页面将包含“oci8”部分,其中显示“OCI8 Support enabled”并列出可以配置的 OCI8 选项.
连接到 Oracle 数据库
要创建连接,传递 Oracle 用户名和口令凭证作为 oci_connect()
的两个参数。Oracle 数据库名称连接标识符必须用于第三个参数,因为与 Instant Client 链接的程序始终被视为“远离”任何数据库服务器,并需要向这些程序告知要连接到的数据库实例。对于已建立的 Oracle 数据库,连接字符串可能是众所周知的。对于新系统,此信息由 Oracle 安装程序在安装数据库时提供。安装程序应该已经为您配置 Oracle 网络并创建服务名称,如 orcl。
将连接信息传递给 PHP 有多种方法。此示例使用 Oracle 的简单连接语法连接到在 mymachine 上运行的 orcl 数据库服务中的 HR 模式。不需要 tnsnames.ora
或其他 Oracle 网络文件:
$conn = oci_connect('hr', 'hr_password', 'mymachine.mydomain/orcl');
有关简单连接语法,请参见 Oracle 的使用简单连接命名方法文档。
在新数据库中,需要解除对 HR 用户等演示模式的锁定并为其提供口令。也可通过在 SQL*Plus 中以 SYSTEM 用户身份连接并执行以下语句来完成此操作:ALTER USER username IDENTIFIED BY new_password ACCOUNT UNLOCK;
使用 PHP OCI8 和 Oracle
试用简单的脚本 testoci.php
修改连接凭证以满足您的数据库要求,并将其加载到浏览器中。此示例列出了用户 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 主机名`,在PHP连接oracle中默认会根据主机名去访问,否则会遇到“ORA-24408: could not generate unique server group name
”错误。[stackoverflow传送门](http://stackoverflow.com/questions/10484231/ora-24408-could-not-generate-unique-server-group-name)
本以为是否配置host不会影响PHP连接oracle,结果转了一圈花了几个小时时间发现只要配置host就解决问题,害的两次重新安装PHP,浪费大量时间,以此纪念。