Hướng dẫn compile PHP từ source

1164
27-03-2018
Hướng dẫn compile PHP từ source

Trong bài viết ngày hôm này, Bizfly Cloud sẽ hướng dẫn bạn cách nhanh nhất để compile source PHP từ source.

Điều kiện tiên quyết

Bạn sẽ phải sở hữu một cài đặt cơ bản của Ubuntu (10.04 trong trường hợp này) mà không cần cài đặt PHP và cũng có thể không có máy chủ web Apache. Nếu bạn đã cài đặt PHP (như một gói), trước tiên bạn sẽ cần gỡ bỏ nó:

sudo apt-get remove php5

Apache web server 

Bạn có thể cài đặt Apache từ các gói Ubuntu (được khuyến nghị) hoặc compile nó từ nguồn. Compile từ nguồn là đơn giản nhưng bạn sẽ kết thúc (sử dụng các thiết lập mặc định) với cấu trúc thư mục hoàn toàn khác với phiên bản đóng gói của Ubuntu. Điều này không được đề cập thêm ở đây.

Để cài đặt phiên bản package:

sudo apt-get install apache2 apache2-dev

-dev package là bắt buộc để xây dựng PHP.

Nhận thêm thư viện

Moodle yêu cầu một số lượng đáng kể các module PHP tùy chọn. Một lượng module yêu cầu các thư viện phát triển có sẵn trên hệ thống trước khi PHP được compile. Khía cạnh này khiến cho việc xây dựng PHP từ nguồn trở nên khá khó khăn. Nếu bạn muốn thử sức, tất cả những yếu tố này có thể được tải xuống dưới dạng source packages và được xây dựng từ đầu nhưng việc sử dụng các packaged versions sẽ dễ dàng hơn nhiều. Chúng được cài đặt như sau:

sudo apt-get install \

libxml2-dev \

libcurl4-openssl-dev \

libjpeg-dev \

libpng-dev \

libxpm-dev \

libmysqlclient-dev \

libpq-dev \

libicu-dev \

libfreetype6-dev \

libldap2-dev \

libxslt-dev

Lưu ý rằng ở trên bao gồm các máy khách cho cả MySQL và PostgreSQL databases. Bạn có thể không muốn cài đặt cả hai cùng lúc. Bạn có thể cần các thư viện khác nếu bạn muốn bổ sung thêm các tùy chọn khác vào PHP build của mình. Một tìm kiếm của Google liên quan đến phiên bản Ubuntu, chức năng và từ 'lbrary' hoặc 'development' thường sẽ giúp bạn biết đúng tên package.

Xây dựng môi trường

Ubuntu không có tất cả các compilers, linkers và libraries mà bạn cần khi cài đặt chuẩn. Nếu bạn chưa compile bất cứ thứ gì từ nguồn trước đó, điều này có thể được sửa bằng một lệnh duy nhất.

sudo apt-get install build-essential

Obtaining và xây dựng PHP 

Có thể tải xuống phiên bản mới nhất từ www.php.net. Tại thời điểm viết bài thì đây là phiên bản 5.3.8, nhưng các phiên bản mới sẽ xuất hiện khá thường xuyên trong tương lai. File sẽ được tải xuống dưới dạng tệp .tar.gz (ví dụ: php-5.3.8.tar.gz). Đặt file này vào vị trí thích hợp trong thư mục chính và giải nén tệp.

tar -zxvf php-5.x.y.tar.gz

cd php-5.x.y

Bước tiếp theo là chạy chương trình configure. Nó sẽ giúp thâm nhập sâu vào hệ thống và tạo các tệp cụ thể dựa trên cấu hình cụ thể. Nó cũng xác định tất cả các module tùy chọn nào sẽ được compile. Tối thiểu cho Moodle 2 (và 1.9) như sau:

./configure \

--prefix=/usr/local/php \

--with-apxs2=/usr/local/apache/bin/apxs \

--enable-mbstring \

--with-curl \

--with-openssl \

--with-xmlrpc \

--enable-soap \

--enable-zip \

--with-gd \

--with-jpeg-dir \

--with-png-dir \

--with-mysql \

--with-pgsql \

--enable-embedded-mysqli \

--with-freetype-dir \

--with-ldap \

--enable-intl \

--with-xsl

Nếu bạn có yêu cầu đặc biệt, bạn có thể cần thêm những tùy chọn khác. Để xem danh sách đầy đủ các tùy chọn, bạn có thể thực hiện dòng lệnh sau:

./configure --help

Thao tác trên sẽ được hoàn thành mà không gặp phải lỗi gì, kết thúc với một thông báo bản quyền rõ ràng trong box. Nếu có lỗi xảy ra, rất có thể là lý do thiếu thư viện. Hãy chắc chắn rằng bạn đã thêm tất cả các thư viện được mô tả ở trên (với apt-get). Nếu không, hãy sử dụng Google.

Khi bit được thực hiện cũng là lúc chúng ta thực hiện việc compiling và linking:

make

Điều này (tùy thuộc vào tốc độ máy của bạn) sẽ mất một lúc và sẽ kết thúc với cụm từ Build complete

Sau đó chỉ là các thao tác liên quan đến việc cài đặt các tập tin.

sudo make install

Cấu hình Apache and PHP 

Bước đầu tiên là sao chép tệp cấu hình PHP (php.ini) từ bản phân phối nguồn đến nơi nó sẽ được đọc khi khởi động Apache. Có hai phiên bản được cung cấp, một cho các production systems và một cho các development systems. Phiên bản thứ hai thường hiển thị nhiều lỗi và cảnh báo hơn và bạn nên (vì lý do bảo mật) chỉ sử dụng trong development environment. Để sao chép tệp đã chọn, hãy làm như sau (từ thư mục nguồn).

sudo cp php.ini-production /usr/local/lib/php.ini

sudo ln -s /usr/local/lib/php.ini /etc

Dòng thứ hai nghĩa là tùy chọn và tạo liên kết đến tệp ini trong /etc (bạn có thể tìm thấy nó tại /etc/php.ini). Bạn có thể chỉnh sửa tệp ini theo nhu cầu. 

Về cơ bản, bạn cần thêm các dòng sau:

LoadModule php5_module modules/libphp5.so

AddType application/x-http-php .php

DirectoryIndex index.php index.html

Hai dòng đầu tiên có thể bị stuck ở cuối /etc/apache2/apache2.conf và DirectoryIndex bằng cách kiểm tra mods-available/dir.conf và đảm bảo rằng index.php nằm trong danh sách. Cụ thể, bạn sẽ tạo một tập tin trong mods-available và kích hoạt nó với lệnh a2enmod. Khi hoàn thành, bạn chỉ cần khởi động lại Apache.

sudo /etc/init.d/apache2 restart

Kiểm tra

Cách dễ nhất để kiểm tra, là tạo một tệp thử nghiệm nhỏ trong root của web served directory (/var/www), gọi là test.php.

<?php

phpinfo();

Sau đó truy cập http://hostname.of.your.server/test.php sẽ thấy một danh sách dài các thiết lập PHP. Nếu bạn chỉ thấy php code, ba cài đặt trong cấu hình Apache đã không hoạt động vì một số lý do và sẽ yêu cầu được kiểm tra. Nếu bạn gặp phải một số lỗi khác, hãy đọc tiếp phần viết dưới đây.

Troubleshooting 

Lời khuyên tốt nhất cho bạn đó là hãy xem nhật ký. Error log của Apache nằm trong /var/log/apache/error.log với các lỗi mới nhất sẽ nằm ở phía cuối. Hầu hết các nguyên nhân sẽ là do các tập tin hoặc thư mục không chính xác hoặc cài đặt cấu hình Apache không chính xác.

Cập nhập PHP

Hướng dẫn compile PHP từ source - Ảnh 1.

Thứ nhất, bạn có thể muốn xây dựng lại php với các extra configuration settings, hoặc bạn có thể muốn xây dựng một phiên bản PHP mới hơn. Bạn có thể làm theo hướng dẫn cài đặt chính xác như trên và bao gồm sudo make install. Sau đó, chỉ cần khởi động lại máy chủ web Apache và bạn đã hoàn tất.

Đối với một phiên bản mới, chỉ cần sử dụng lệnh ./configure giống như bạn đã làm với phiên bản cũ hơn. Nếu bạn không thể nhớ được lệnh đầy đủ (trong phiên bản cũ), một tệp có tên là config.log trong build directory hoặc chạy 'phpinfo' test  ở trên và bạn sẽ thấy lệnh config được sử dụng ngay trên đầu. 

Theo Bizfly Cloud chia sẻ

Tham khảo: docs.moodle.org/35/en/Compiling_PHP_from_source

SHARE