Câu trả lời là một bản sao của bài báo này (bằng tiếng Nga), lần lượt dựa trên bài đăng này với một số chỉnh sửa. Sau nhiều ngày tìm kiếm không có kết quả, nó hoạt động trơn tru đối với tôi.
Điều kiện tiên quyết:
Bạn phải có đặc quyền của quản trị viên
Bạn nên cài đặt php5 với các gói sau:
sudo apt-get install php5 php5-dev php-pear php5-cli
sudo pecl install pdo
Bạn nên cài đặt thư viện libaio1:
sudo apt-get install libaio1
Cài đặt Oracle Instant Client
Tải xuống ứng dụng khách tức thì Oracle cho kiến trúc bộ xử lý và hệ điều hành của bạn từ trang web Oracle (oracle.com/technetwork/database/features/instant-client/index-097480.html).
Đối với Linux, có 2 tùy chọn của ứng dụng khách tức thì:gói RPM cho Linux, CentOS, Fedora, Red Hat Enterprise Linux, Mandriva Linux, SUSE Linux, v.v. Kho lưu trữ ZIP - cho tất cả các gói khác không hỗ trợ RPM.
Có 2 tệp được tải xuống:
Instantclient-basic - Bản thân ứng dụng khách tức thì của Oracle
Instantclient-sdk - bộ thư viện để phát triển ứng dụng
Tạo thư mục cho máy khách tức thì Oracle (/ opt thư mục dành riêng cho các phần mở rộng phần mềm rất phù hợp cho mục đích này):
sudo mkdir -p /opt/oracle/
Di chuyển các tệp đã tải xuống đến / opt / oracle và chuyển sang thư mục đích (giả sử rằng bạn đã tải các tệp lưu trữ "zip" xuống thư mục "tải xuống" của người dùng):
sudo mv ~/downloads/instantclient-*.zip /opt/oracle/
cd /opt/oracle/
Giải nén các kho lưu trữ đã tải xuống:
sudo unzip instantclient-basic-*-*.zip
sudo unzip instantclient-sdk-*-*.zip
Cuối cùng, chúng tôi có instantclient_11_2
thư mục được tạo trong /opt/oracle
cho máy khách tức thì Oracle 11.2.0.2.0. Đổi tên thư mục này thành instantclient
(chú ý đến số phiên bản) và chuyển sang nó:
sudo mv instantclient_11_2 instantclient
cd instantclient
Tiếp theo, chúng ta sẽ phải tạo thêm một số thư mục và liên kết tượng trưng (chú ý đến số phiên bản):
sudo ln -s /opt/oracle/instantclient/libclntsh.so.* /opt/oracle/instantclient/libclntsh.so
sudo ln -s /opt/oracle/instantclient/libocci.so.* /opt/oracle/instantclient/libocci.so
sudo ln -s /opt/oracle/instantclient/ /opt/oracle/instantclient/lib
sudo mkdir -p include/oracle/11.2/
cd include/oracle/11.2/
sudo ln -s ../../../sdk/include client
cd -
sudo mkdir -p lib/oracle/11.2/client
cd lib/oracle/11.2/client
sudo ln -s ../../../ lib
cd -
Tạo tệp cấu hình chứa tên thư mục nơi các thư viện ứng dụng khách tức thì của Oracle được tìm kiếm và kích hoạt nó:
echo /opt/oracle/instantclient/ | sudo tee -a /etc/ld.so.conf.d/oracle.conf
sudo ldconfig
Theo như không có thư mục /usr/include/php
trong Ubuntu, nhưng máy khách vẫn đang tìm kiếm nó, chúng tôi sẽ tạo liên kết tượng trưng cho nó tương đương - php5:
sudo ln -s /usr/include/php5 /usr/include/php
Cài đặt OCI8
Sau khi các hành động trước đó, tiện ích mở rộng oci8 được cài đặt với pecl
lệnh:
sudo pecl install oci8
bạn sẽ được nhắc về đường dẫn đến ứng dụng khách tức thì Oracle, hãy trả lời bằng:
instantclient,/opt/oracle/instantclient
Tạo tệp kết nối tiện ích mở rộng:
echo "; configuration for php oci8 module" | sudo tee /etc/php5/conf.d/oci8.ini
echo extension=oci8.so | sudo tee -a /etc/php5/conf.d/oci8.ini
Cài đặt PDO_OCI
Để cài đặt PDO_OCI, hãy tải xuống từ kho lưu trữ lê (Pear.php.net).
Cập nhật danh sách gói lê:
sudo pecl channel-update pear.php.net
Tải xuống và đặt kho lưu trữ vào thư mục tạm thời:
sudo mkdir -p /tmp/pear/download/
cd /tmp/pear/download/
sudo pecl download pdo_oci
Trích xuất nội dung kho lưu trữ:
sudo tar xvf PDO_OCI*.tgz
cd PDO_OCI*
Ở đây, chúng ta sẽ phải cải tiến config.m4
vì nó không chứa thông tin về phiên bản ứng dụng khách tức thì Oracle của chúng tôi. Mở tệp và thêm các thay đổi được đánh dấu bằng "+" (trả tiền cho số phiên bản):
sudo vim config.m4
Dưới đây là diff
trong số 2 tệp:
***************
*** 7,12 ****
--- 7,14 ----
if test -s "$PDO_OCI_DIR/orainst/unix.rgs"; then
PDO_OCI_VERSION=`grep '"ocommon"' $PDO_OCI_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4`
test -z "$PDO_OCI_VERSION" && PDO_OCI_VERSION=7.3
+ elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
+ PDO_OCI_VERSION=11.2
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then
PDO_OCI_VERSION=10.1
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
***************
*** 119,124 ****
--- 121,129 ----
10.2)
PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
;;
+ 11.2)
+ PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
+ ;;
*)
AC_MSG_ERROR(Unsupported Oracle version! $PDO_OCI_VERSION)
;;
***************
Chuẩn bị môi trường cho phần mở rộng php với phpize
(php.net/manual/ru/install.pecl.phpize.php) lệnh:
sudo phpize
Định cấu hình trình cài đặt gói và cài đặt gói (chú ý đến số phiên bản):
sudo ./configure --with-pdo-oci=instantclient,/opt/oracle/instantclient/,11.2
sudo make
sudo make install
Tạo tệp kết nối cho nó:
echo "; configuration for php PDO_OCI module" | sudo tee /etc/php5/conf.d/pdo_oci.ini
echo extension=pdo_oci.so | sudo tee -a /etc/php5/conf.d/pdo_oci.ini
Khởi động lại apache và kiểm tra xem các tiện ích mở rộng đã được cài đặt chưa:
sudo /etc/init.d/apache2 restart
php -m