July 8, 2015

Xử lý lỗi trang trắng khi truy cập do sai version PHP

1. Tình huống gặp phải:
- Tiến hành cài đặt website trong môi trường thử nghiệm chạy rất tốt, tuy nhiên đưa lên môi trườngHosting thì Website không chạy, hiển thị trang trắng không có nội dung hoặc không hiển thị lỗi.
- Sau khi nâng cấp hoặc thay đổi mã nguồn thì Website hiển thị nội dung trống (trắng) thay vì trả về nội dung Website như bình thường

2. Xác định nguyên nhân:
- Lỗi trang trắng xảy ra do nhiều nguyên nhân, đa phần nguyên nhân là do mã nguồn của Website (lỗi themes, plugins, modules), lỗi phiên bản mã nguồn (ví dụ Joomla 1.5 không chạy được PHP 5.4). 
- Một trong những nguyên nhân phổ biến của hiện tượng truy cập Website bị trang trắng là do phiên bảnPHP trên Hosting không phù hợp để chạy mã nguồn.
- Để phán đoán chính xác việc Website bị trang trắng có phải do sai phiên bản PHP hay không cần thực hiện việc kiểm tra các thông báo log mà hệ thống trả về. 

3. Cấu hình hiển thị thông báo lỗi:
    3.1 Cấu hình Hosting
- Hosting tại Vinahost có thể dễ dàng điều chỉnh để hiển thị thông báo lỗi bằng cách thay đổi 2 giá trị sau trong phần: Quản lý tài khoản > Cấu hình PHP

Display_errors = On
Error_Reporting = E_ALL


- Đối với các thay đổi cấu hình PHP trong file php.ini hoặc .htaccess không có tác dụng tại HostingVinahost

    3.2 Cấu hình trong mã nguồn website
- Đối với từng bộ mã nguồn có thể điều chỉnh cấu hình trong mã nguồn để hiển thị Error log ra ngoài website dễ dàng cho việc phán đoán lỗi. Một số mã nguồn thông dụng nhất hiện nay có thể cấu hình để ghi lại và hiển thị lỗi như sau:

Joomla  
- Đăng nhập trang quản trị: Site >> Global Configuration >> Server >> Error Reporting: Chọn Maximum
- Hoặc có thể điều chỉnh trong file configuration.php của mã nguồn, cấu hình biến $error_reporting sử dụng các giá trị sau:
-1: Tắt thông báo lỗi
30709: Hiển thị tất cả các lỗi ngoại trừ warnings và notices (cấu hình tương đương E_ALL & ~(E_NOTICE|E_WARNING) )
30711: Hiển thị tất cả các lỗi bao gồm warnings, không bao gồm notices (cấu hình tương đương  E_ALL & ~E_NOTICE )
30719: Hiển thị tất cả các lỗi bao gồm warnings và notices, không bao gồm E_STRIC (cấu hình tương đương  E_ALL &~ E_STRIC)
32767: Hiển thị tất cả các lỗi, warning, notices và các lỗi "strict standards" (ví dụ:  “Strict Standards: Non-static method … on line XX”) (cấu hình tương đương E_ALL )

- Với mục đích kiểm tra lỗi liên quan đến phiên bản PHP, phần cấu hình này nên sử dụng giá trị 32767  để hiển thị tất cả các lỗi bao gồm gợi ý của PHP về việc các hàm mà mã nguồn đang sử dụng có tương thích / phù hợp với phiên bản PHP mà hệ thống đang sử dụng hay không.
Ví dụ:
public $error_reporting = '32767:';
public $log_path = '/home/xxx/public_html/joomla/logs'; #Đường dẫn lưu file log

- Tùy thuộc vào phiên bản PHP máy chủ đang sử dụng mà cấu hình hiển thị tất cả các lỗi E_ALL khác nhau như sau:

32767 nếu là PHP 5.4.x trở lên
30719 nếu là PHP 5.3.x
6143 nếu là PHP 5.2.x
2047 nếu là các phiên bản PHP thấp hơn
 

Wordpress
- Thay đổi một số giá trị trong file wp-config.php như sau:
/**  Bật WP_DEBUG mode */
define('WP_DEBUG', true);
/**  Bật chức năng lưu file log ở đường dẫn sau /wp-content/debug.log  */
define('WP_DEBUG_LOG', true);
/**  Hiển thị  các lỗi và warnings  */
define('WP_DEBUG_DISPLAY', true);
@ini_set('display_errors',1);
 
Magento
- Cấu hình trong phần quản lý: Admin >> Configuration >> Developer >> Log Settings >> Enabled = Yes
- Phân quyền 777 cho folder var/log để lưu log tại 2 file sau:
var/log/system.log
var/log/exception.log

4. Kiểm tra thông báo lỗi
- Khi sử dụng ngồn ngữ PHP để lập trình website (hoặc mã nguồn có sẵn) thì thường mã nguồn đó chỉ chạy tốt trên một môi trường PHP nhất định (phổ biến nhất là PHP 5.2, PHP 5.3), khi chạy trên môi trường Hosting có phiên bản PHP không phù hợp thì các hàm PHP trong mã nguồn website sẽ không còn được hỗ trợ và hiển thị một số lỗi dạng như sau:

Your server is running PHP version 5.1.6 but WordPress 3.8.2 requires at least 5.2.4.
Undefined variable: xxx in \home\userhosting\public_html\path-to-file\abc.php on line 12
Fatal error: Call to undefined method xxx
Deprecated: Assigning the return value of new by reference is deprecated in xxx on line 136


- Tại bước cấu hình 3.1 Cấu hình Hosting nếu bật tùy chọn log_errors = On thì hệ thống sẽ tự sinh file thông báo lỗi error_log tại đường dẫn sau: /home/username/public_html/error_log.

- Có thể kiểm tra file này để xem chi tiêt thông báo lỗi.
- Ngoài ra tùy thuộc vào cấu hình của từng mã nguồn để kiểm tra file thông báo lỗi khác nếu có.

 
5. Xử lý lỗi
- Để xử lý lỗi sai phiên bản PHP có thể dùng cách thay đổi mã nguồn (sử dụng hàm khác) hoặc thay đổi PHP version trên Hosting, đối với Hosting tại Vinahost có thể thao tác một cách dễ dàng như sau:


- Kiểm tra lại thao tác đổi phiên bản PHP đã thành công hay chưa bằng cách tạo một file info.php trong thư mục gốc của website (thư mục /home/username/public_html) có nội dung như sau:

Sau đó truy cập trực tiếp bằng trình duyệt thông qua đường dẫn http://your-websites.com/info.php

Tham khảo: 
- http://codex.wordpress.org/Debugging_in_WordPress
- https://wiki.magento.com
- http://docs.joomla.org/J3.x:Global_configuration
- http://php.net/manual/en/errorfunc.constants.php 

0 comments:

Post a Comment