Làm cách nào để nhận được thông báo lỗi hữu ích trong PHP?
Thường thì tôi sẽ thử chạy một tập lệnh PHP và chỉ nhận được một màn hình trống. Không có thông báo lỗi; chỉ là một màn hình trống. Nguyên nhân có thể là do lỗi cú pháp đơn giản (dấu ngoặc đơn sai, dấu chấm phẩy bị thiếu) hoặc một lệnh gọi hàm không thành công hoặc một cái gì đó hoàn toàn khác.
Rất khó để tìm ra những gì đã xảy ra. Tôi kết thúc việc bình luận ra mã, nhập các câu lệnh "echo" ở khắp mọi nơi, v.v. để cố gắng thu hẹp vấn đề. Nhưng chắc chắn phải có một cách tốt hơn, phải không?
Có cách nào để PHP tạo ra một thông báo lỗi hữu ích, giống như Java không?
Trả lời
Đối với lỗi cú pháp, bạn cần bật hiển thị lỗi trong php.ini. Theo mặc định, chúng bị tắt vì bạn không muốn "khách hàng" nhìn thấy thông báo lỗi. Kiểm tra trang này trong tài liệu PHP để biết thông tin về 2 lệnh: error_reporting
và display_errors
. display_errors
có lẽ là một trong những bạn muốn thay đổi. Nếu bạn không thể sửa đổi php.ini, bạn cũng có thể thêm các dòng sau vào tệp .htaccess:
php_flag display_errors on
php_value error_reporting 2039
Bạn có thể muốn xem xét việc sử dụng giá trị của E_ALL (như Gumbo đã đề cập) cho phiên bản PHP của bạn error_reporting
để tìm tất cả các lỗi. thêm thông tin
3 mục khác: (1) Bạn có thể kiểm tra tệp nhật ký lỗi vì nó sẽ có tất cả các lỗi (trừ khi việc ghi nhật ký đã bị vô hiệu hóa). (2) Thêm 2 dòng sau sẽ giúp bạn gỡ lỗi không phải lỗi cú pháp:
error_reporting(-1);
ini_set('display_errors', 'On');
(3) Một tùy chọn khác là sử dụng trình chỉnh sửa kiểm tra lỗi khi bạn nhập, chẳng hạn như PhpEd . PhpEd cũng đi kèm với một trình gỡ lỗi có thể cung cấp thông tin chi tiết hơn. (Trình gỡ lỗi PhpEd rất giống với xdebug và tích hợp trực tiếp vào trình chỉnh sửa, vì vậy bạn sử dụng 1 chương trình để làm mọi thứ.)
Liên kết của Cartman cũng rất tốt:http://www.ibm.com/developerworks/library/os-debug/
Điều sau đây cho phép tất cả các lỗi:
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
Cũng xem các liên kết sau
- http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors
- http://php.net/manual/en/errorfunc.configuration.php#ini.display-startup-errors
- http://php.net/manual/en/function.error-reporting.php
Đoạn mã sau sẽ hiển thị tất cả các lỗi:
<?php
// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);
// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);
// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
if(@is_array($error = @error_get_last())) { return(@call_user_func_array('ErrorHandler', $error));
};
return(TRUE);
};
register_shutdown_function('ShutdownHandler');
// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
$_ERRORS = Array( 0x0001 => 'E_ERROR', 0x0002 => 'E_WARNING', 0x0004 => 'E_PARSE', 0x0008 => 'E_NOTICE', 0x0010 => 'E_CORE_ERROR', 0x0020 => 'E_CORE_WARNING', 0x0040 => 'E_COMPILE_ERROR', 0x0080 => 'E_COMPILE_WARNING', 0x0100 => 'E_USER_ERROR', 0x0200 => 'E_USER_WARNING', 0x0400 => 'E_USER_NOTICE', 0x0800 => 'E_STRICT', 0x1000 => 'E_RECOVERABLE_ERROR', 0x2000 => 'E_DEPRECATED', 0x4000 => 'E_USER_DEPRECATED' ); if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
{
$name = 'E_UNKNOWN'; }; return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message))); }; $old_error_handler = set_error_handler("ErrorHandler");
// other php code
?>
Cách duy nhất để tạo trang trống với mã này là khi bạn gặp lỗi trong trình xử lý tắt máy. Tôi đã sao chép và dán cái này từ tin nhắn SMS của riêng mình mà không cần kiểm tra nó, nhưng tôi chắc chắn rằng nó hoạt động.
Bạn có thể bao gồm các dòng sau trong tệp bạn muốn gỡ lỗi:
error_reporting(E_ALL);
ini_set('display_errors', '1');
Điều này ghi đè các cài đặt mặc định trong php.ini, điều này chỉ khiến PHP báo cáo lỗi vào nhật ký.
Lỗi và cảnh báo thường xuất hiện trong ....\logs\php_error.log
hoặc ....\logs\apache_error.log
tùy thuộc vào cài đặt php.ini của bạn.
Ngoài ra, các lỗi hữu ích thường hướng đến trình duyệt, nhưng vì chúng không phải là html hợp lệ nên chúng không được hiển thị.
Vì vậy, "tail -f
"các tệp nhật ký của bạn và khi bạn nhận được màn hình trống, hãy sử dụng các tùy chọn trình đơn IEs" view "->" source "để xem đầu ra thô.
Cấu hình PHP
2 mục trong php.ini ra lệnh cho lỗi đầu ra:
- display_errors
- error_reporting
Trong sản xuất , display_errors
thường được đặt thành Off
(Đó là một điều tốt, bởi vì hiển thị lỗi trong các trang web sản xuất nói chung là không mong muốn!).
Tuy nhiên, trong quá trình phát triển , nó nên được đặt thành On
, để các lỗi được hiển thị. Kiểm tra !
error_reporting
(kể từ PHP 5.3) được đặt theo mặc định thành E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
(nghĩa là mọi thứ đều được hiển thị ngoại trừ các thông báo, tiêu chuẩn nghiêm ngặt và thông báo không dùng nữa). Khi nghi ngờ, hãy đặt nó thành E_ALL
để hiển thị tất cả các lỗi. Kiểm tra !
Chà chà! Không kiểm tra! Tôi không thể thay đổi php.ini của mình!
Thật là xấu hổ. Thông thường các máy chủ được chia sẻ không cho phép thay đổi tệp php.ini của chúng, và do đó, rất tiếc là tùy chọn đó không khả dụng. Nhưng đừng sợ! Chúng tôi có các lựa chọn khác !
Cấu hình thời gian chạy
Trong tập lệnh mong muốn, chúng ta có thể thay đổi các mục php.ini trong thời gian chạy! Có nghĩa là, nó sẽ chạy khi script chạy! Ngọt!
error_reporting(E_ALL);
ini_set("display_errors", "On");
Hai dòng này sẽ có tác dụng tương tự như thay đổi các mục trong php.ini như trên! Tuyệt vời!
Tôi vẫn nhận được một trang trống / lỗi 500!
Điều đó có nghĩa là kịch bản thậm chí đã không chạy! Điều đó thường xảy ra khi bạn gặp lỗi cú pháp!
Với lỗi cú pháp, tập lệnh thậm chí không có thời gian chạy. Nó không thành công tại thời điểm biên dịch , có nghĩa là nó sẽ sử dụng các giá trị trong php.ini, nếu bạn không thay đổi, có thể không cho phép hiển thị lỗi.
Nhật ký lỗi
Ngoài ra, PHP theo mặc định ghi lại các lỗi. Trong lưu trữ được chia sẻ, nó có thể nằm trong một thư mục chuyên dụng hoặc trên cùng một thư mục với tập lệnh vi phạm.
Nếu bạn có quyền truy cập vào php.ini, bạn có thể tìm thấy nó dưới error_logmục nhập.
Tôi luôn sử dụng cú pháp này ở đầu tập lệnh php.
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On'); //On or Off
Có một tiện ích mở rộng thực sự hữu ích được gọi là " xdebug " sẽ làm cho báo cáo của bạn đẹp hơn nhiều.
Để khắc phục sự cố nhanh, thực hành, tôi thường đề xuất ở đây trên SO:
error_reporting(~0); ini_set('display_errors', 1);
được đặt ở đầu kịch bản đang gặp sự cố. Điều này không hoàn hảo, biến thể hoàn hảo là bạn cũng kích hoạt điều đó trong php.ini
và bạn ghi các lỗi trong PHP để bắt lỗi cú pháp và lỗi khởi động.
Các cài đặt được nêu ở đây hiển thị tất cả các lỗi, thông báo và cảnh báo, bao gồm cả những lỗi nghiêm ngặt, bất kể phiên bản PHP nào.
Những điều tiếp theo cần xem xét:
- Cài đặt Xdebug và kích hoạt tính năng gỡ lỗi từ xa với IDE của bạn.
Cũng xem:
- Báo cáo lỗi (PHP đúng cách.)
- Tài liệu về Hằng số được xác định trước
- error_reporting()Docs
- display_errorsDocs
Có thể đăng ký một hook để hiển thị lỗi hoặc cảnh báo cuối cùng.
function shutdown(){
var_dump(error_get_last());
}
register_shutdown_function('shutdown');
thêm mã này vào đầu index.php của bạn sẽ giúp bạn gỡ lỗi các vấn đề.
Nếu bạn là người cực kỳ thú vị, bạn có thể thử:
$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";
ini_set('display_errors',$test_server);
error_reporting(E_ALL|E_STRICT);
Điều này sẽ chỉ hiển thị lỗi khi bạn đang chạy cục bộ. Nó cũng cung cấp cho bạn biến test_server để sử dụng ở những nơi khác nếu thích hợp.
Bất kỳ lỗi nào xảy ra trước khi tập lệnh chạy sẽ không bị bắt, nhưng đối với 99% lỗi mà tôi mắc phải, đó không phải là vấn đề.
Trên đầu trang, hãy chọn một tham số
error_reporting(E_ERROR | E_WARNING | E_PARSE);
Đây là sự cố của cấu hình tải so với thời gian chạy
Điều quan trọng là phải nhận ra rằng lỗi cú pháp hoặc lỗi phân tích cú pháp xảy ra trong bước biên dịch hoặc phân tích cú pháp , điều đó có nghĩa là PHP sẽ bảo lãnh trước khi nó có cơ hội thực thi bất kỳ mã nào của bạn. Vì vậy, nếu bạn đang sửa đổi display_errors
cấu hình của PHP trong thời gian chạy, (điều này bao gồm mọi thứ từ việc sử dụng ini_set
trong mã của bạn đến sử dụng .htaccess, là tệp cấu hình thời gian chạy) thì chỉ cài đặt cấu hình được tải mặc định mới được phát.
Cách luôn tránh WSOD trong quá trình phát triển
Để tránh WSOD, bạn muốn đảm bảo rằng tệp cấu hình đã tải của bạn được display_errors
bật và error_reporting
đặt thành -1
( đây là E_ALL tương đương vì nó đảm bảo tất cả các bit được bật bất kể bạn đang chạy phiên bản PHP nào ). Đừng mã hóa giá trị không đổi của E_ALL, vì giá trị đó có thể thay đổi giữa các phiên bản PHP khác nhau.
Cấu hình đã tải là php.ini
tệp đã tải của bạn hoặc tệp của bạn apache.conf
hoặc httpd.conf
hoặc máy chủ ảo. Các tệp đó chỉ được đọc một lần trong giai đoạn khởi động (ví dụ: khi bạn khởi động apache httpd hoặc php-fpm lần đầu) và chỉ bị ghi đè bởi các thay đổi cấu hình thời gian chạy. Đảm bảo rằng display_errors = 1
và error_reporting = -1
trong tệp cấu hình đã tải của bạn đảm bảo rằng bạn sẽ không bao giờ nhìn thấy WSOD bất kể lỗi cú pháp hoặc phân tích cú pháp xảy ra trước khi thay đổi thời gian chạy giống như ini_set('display_errors', 1);
hoặc error_reporting(E_ALL);
có thể diễn ra.
Cách tìm tệp cấu hình đã tải (php.ini) của bạn
Để tìm (các) tệp cấu hình đã tải của bạn, chỉ cần tạo một tệp PHP mới chỉ với mã sau ...
<?php
phpinfo();
Sau đó, trỏ trình duyệt của bạn đến đó và xem Tệp cấu hình đã tải và tệp .ini bổ sung được phân tích cú pháp , thường nằm ở đầu tệp của bạn phpinfo()
và sẽ bao gồm đường dẫn tuyệt đối đến tất cả tệp cấu hình đã tải của bạn.
Nếu bạn thấy (none)
thay vì tệp, điều đó có nghĩa là bạn không có đường dẫn php.ini trong Tệp cấu hình (php.ini) . Vì vậy, bạn có thể tải xuống php.ini cổ phiếu đi kèm với PHP từ đây và sao chép nó vào đường dẫn tệp cấu hình của bạn dưới dạng php.ini, sau đó đảm bảo người dùng php của bạn có đủ quyền để đọc từ tệp đó. Bạn sẽ cần khởi động lại httpd hoặc php-fpm để tải nó vào. Hãy nhớ rằng, đây là tệp php.ini phát triển đi kèm với nguồn PHP. Vì vậy, xin vui lòng không sử dụng nó trong sản xuất!
Chỉ cần không làm điều này trong sản xuất
Đây thực sự là cách tốt nhất để tránh WSOD đang phát triển. Bất kỳ ai đề nghị bạn đặt ini_set('display_errors', 1);
hoặc error_reporting(E_ALL);
ở đầu tập lệnh PHP của mình hoặc sử dụng .htaccess như bạn đã làm ở đây, sẽ không giúp bạn tránh được WSOD khi xảy ra lỗi cú pháp hoặc phân tích cú pháp (như trong trường hợp của bạn ở đây) nếu tệp cấu hình đã tải của bạn đã display_errors
tắt.
Nhiều người (và các bản cài đặt gốc của PHP) sẽ sử dụng tệp production-ini đã display_errors
bị tắt theo mặc định, điều này thường dẫn đến sự thất vọng giống như bạn đã trải qua ở đây. Bởi vì PHP đã tắt nó khi khởi động, sau đó gặp lỗi cú pháp hoặc phân tích cú pháp và không có gì để xuất. Bạn mong đợi rằng ini_set('display_errors',1);
ở đầu tập lệnh PHP của bạn nên tránh điều đó, nhưng sẽ không thành vấn đề nếu PHP không thể phân tích cú pháp mã của bạn vì nó sẽ không bao giờ đạt đến thời gian chạy.
Để duy trì điều này và làm cho nó trở nên phức tạp, bạn có thể chỉnh sửa tệp php.ini của mình. Nó thường được lưu trữ trong /etc/php.ini
hoặc /etc/php/php.ini
, nhưng nhiều local hơn php.ini
có thể ghi đè lên nó, tùy thuộc vào nguyên tắc thiết lập của nhà cung cấp dịch vụ lưu trữ của bạn. Kiểm tra phpinfo()
tệp Loaded Configuration File
ở trên cùng, để đảm bảo tệp nào được tải cuối cùng.
Tìm kiếm display_errors trong tệp đó. Chỉ nên có 3 trường hợp, trong đó có 2 trường hợp được nhận xét.
Thay đổi dòng không chú thích thành:
display_errors = stdout
Dunno nếu nó sẽ giúp ích, nhưng đây là một phần của tệp cấu hình tiêu chuẩn của tôi cho các dự án php. Tôi có xu hướng không phụ thuộc quá nhiều vào cấu hình apache ngay cả trên máy chủ của riêng tôi.
Tôi chưa bao giờ gặp sự cố lỗi biến mất, vì vậy có lẽ điều gì đó ở đây sẽ cho bạn ý tưởng.
Đã chỉnh sửa để hiển thị APPLICATON_LIVE
/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment. It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/
if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
define('APPLICATION_LIVE', false);
} else {
die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
// Log or take other appropriate action.
}
/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging. Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
if ( ! APPLICATION_LIVE ) {
// A few changes to error handling for development.
// We will want errors to be visible during development.
ini_set ( "display_errors", "1");
ini_set ( "display_startup_errors", "1");
ini_set ( "html_errors", "1");
ini_set ( "docref_root", "http://www.php.net/");
ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
ini_set ( "error_append_string", "</div>");
}
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);
Ngoài ra, bạn có thể biết thêm thông tin chi tiết với xdebug .
Tôi khuyên bạn nên dùng Nette Tracy để có hình dung tốt hơn về các lỗi và ngoại lệ trong PHP:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
error_reporting(E_ALL | E_STRICT);
Và bật lỗi hiển thị trong php.ini
Bạn có thể đăng ký trình xử lý lỗi của riêng mình trong PHP. Ví dụ: nhập tất cả các lỗi vào một tệp có thể giúp bạn trong những trường hợp khó hiểu này. Lưu ý rằng hàm của bạn sẽ được gọi, bất kể error_reporting hiện tại của bạn được đặt thành gì. Ví dụ rất cơ bản:
function dump_error_to_file($errno, $errstr) {
file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND);
}
set_error_handler('dump_error_to_file');
Hai dòng chính bạn cần để nhận được các lỗi hữu ích từ PHP là:
ini_set('display_errors',1);
error_reporting(E_ALL);
Như đã được chỉ ra bởi những người đóng góp khác, chúng được tắt theo mặc định vì lý do bảo mật. Là một mẹo hữu ích - khi bạn thiết lập trang web của mình, bạn nên thực hiện chuyển đổi cho các môi trường khác nhau của mình để các lỗi này được BẬT theo mặc định trong môi trường phát triển và cục bộ của bạn. Điều này có thể đạt được với mã sau (lý tưởng là trong tệp index.php hoặc tệp cấu hình của bạn để tệp này hoạt động ngay từ đầu):
switch($_SERVER['SERVER_NAME'])
{
// local
case 'yourdomain.dev':
// dev
case 'dev.yourdomain.com':
ini_set('display_errors',1);
error_reporting(E_ALL);
break;
//live
case 'yourdomain.com':
//...
break;
}
FirePHP cũng có thể hữu ích.
mở php.ini của bạn, đảm bảo rằng nó được đặt thành:
display_errors = On
khởi động lại máy chủ của bạn.
Bạn cũng có thể muốn thử PHPStorm làm trình soạn thảo mã của mình. Nó sẽ tìm thấy nhiều lỗi PHP và các lỗi cú pháp khác ngay khi bạn nhập vào trình soạn thảo.
nếu bạn là người dùng ubuntu thì hãy truy cập vào thiết bị đầu cuối của bạn và chạy lệnh này
sudo tail -50f /var/log/apache2/error.log
nơi nó sẽ hiển thị 50 lỗi gần đây. Có một tệp lỗi error.log
cho apache2 ghi lại tất cả các lỗi.
Để bật báo cáo lỗi đầy đủ, hãy thêm cái này vào tập lệnh của bạn:
error_reporting(E_ALL);
Điều này làm cho các cảnh báo thậm chí tối thiểu hiển thị. Và, chỉ trong trường hợp:
ini_set('display_errors', '1');
Sẽ buộc hiển thị lỗi. Điều này nên được tắt trong máy chủ sản xuất, nhưng không phải khi bạn đang phát triển.
“LỖI” là những điều hữu ích nhất để các nhà phát triển biết lỗi của họ và giải quyết chúng để làm cho hệ thống hoạt động hoàn hảo.
PHP cung cấp một số cách tốt hơn để biết các nhà phát triển tại sao và vị trí đoạn mã của họ gặp lỗi, vì vậy bằng cách biết những lỗi đó, các nhà phát triển có thể làm cho mã của họ tốt hơn theo nhiều cách.
Cách tốt nhất để viết hai dòng sau trên đầu tập lệnh để nhận tất cả các thông báo lỗi:
error_reporting(E_ALL);
ini_set("display_errors", 1);
Một cách khác để sử dụng các công cụ gỡ lỗi như xdebug trong IDE của bạn.
Bạn có thể bật báo cáo lỗi đầy đủ (bao gồm thông báo và thông báo nghiêm ngặt). Một số người thấy điều này quá dài dòng, nhưng nó đáng để thử. Đặt error_reporting
thành E_ALL | E_STRICT
trong php.ini của bạn.
error_reporting = E_ALL | E_STRICT
E_STRICT
sẽ thông báo cho bạn về các chức năng không dùng nữa và cung cấp cho bạn các đề xuất về các phương pháp tốt nhất để thực hiện các tác vụ nhất định.
Nếu bạn không muốn thông báo, nhưng bạn thấy các loại thông báo khác hữu ích, hãy thử loại trừ thông báo:
error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE
Ngoài ra, hãy đảm bảo rằng điều đó đã display_errors
được bật trong php.ini. Nếu phiên bản PHP của bạn cũ hơn 5.2.4, hãy đặt nó thành On
:
display_errors = "On"
Nếu phiên bản của bạn là 5.2.4 hoặc mới hơn, hãy sử dụng:
display_errors = "stderr"
Ngoài error_reporting và cài đặt display_errors ini, bạn có thể gặp lỗi SYNTAX từ các tệp nhật ký của máy chủ web của bạn. Khi đang phát triển PHP, tôi tải nhật ký máy chủ web của hệ thống phát triển vào trình soạn thảo của mình. Bất cứ khi nào tôi kiểm tra một trang và nhận được màn hình trống, tệp nhật ký sẽ cũ và trình chỉnh sửa của tôi hỏi tôi có muốn tải lại nó không. Khi tôi làm, tôi nhảy xuống dưới cùng và có lỗi cú pháp. Ví dụ:
[Sun Apr 19 19:09:11 2009] [error] [client 127.0.0.1] PHP Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\\webroot\\test\\test.php on line 9
Đối với những người sử dụng nginx và có màn hình trắng ngay cả đối với tệp với <?php echo 123;
. Trong trường hợp của tôi, tôi không có tùy chọn bắt buộc này cho PHP trong tệp cấu hình nginx:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Tùy chọn này không có trong tệp fastcgi_params, vì vậy PHP không hoạt động và không có bất kỳ lỗi nào trong nhật ký.