2010-09-29 37 views
10

Tôi có PHP 5.2.10 và PHP 5.2.14 (x86 non-threadsafe Win32 builds) được cài đặt trên máy chủ Windows 2008 R2 và trên Windows 7 64 bit.Tại sao PHP 5.2.14 không hiển thị bất kỳ lỗi nào (thậm chí từ dòng lệnh)?

Vì lý do nào đó, PHP 5.2.14 từ chối hiển thị thông báo lỗi.

Ngay cả khi tôi thiết lập các cài đặt sau đây trong php.ini tôi không nhận được bất kỳ báo cáo lỗi nếu tôi sử dụng 5.2.14:

error_reporting = E_ALL 
display_errors = On 

này xảy ra ngay cả khi chạy một kịch bản kiểm tra từ dòng lệnh sử dụng php.exe với lỗi cú pháp thận trọng:

c:\php>php test.php

PHP được sử dụng đúng php.ini tập tin vì tôi có thể nhìn thấy các thiết lập của tôi thay đổi khi tôi chạy php.exe -i.

Tôi cũng nhận thấy rằng php.exe trong PHP 5.2.14 rất chậm để khởi động.

Khi tôi thực hiện cùng một bộ kiểm tra sử dụng PHP 5.2.10 trên cùng một máy, tôi nhận được thông báo lỗi được báo cáo tốt.

Cả hai tệp php.ini đều là cổ phiếu (dựa trên php.ini-recommended) nhưng với các cài đặt error_reportingdisplay_errors được sửa đổi.

Trả lời

5

Bạn có thể phải kích hoạt display_startup_errors cũng như:

display_startup_errors boolean 

Even when display_errors is on, errors that occur during PHP's startup sequence are not displayed. It's strongly recommended to keep display_startup_errors off, except for debugging.

Bạn cũng có thể thử lint file với c:\php>php -l test.php để kiểm tra lỗi cú pháp.

+0

Bạn học được điều gì mới mỗi ngày. Hóa ra rằng PHP không thể tải một phần mở rộng SQLite3 vì phần mở rộng pdo.dll (có một sự phụ thuộc vào điều này) đã không được chú ý. Khi 'display_startup_errors' được đặt thành tắt, điều này có vẻ gây ra lỗi phân tích cú pháp bị nuốt chửng. Cảm ơn rất nhiều. – Kev

+0

Thực ra ... đang điều tra thêm. Ai đó đã đặt dấu ngoặc kép xung quanh giá trị cờ 'error_reporting'. Đó là nguyên nhân thực sự. tức là -'error_reporting = "E_ALL & ~ E_NOTICE" '. – Kev

3

gần đây, tôi đã phải làm việc trên dự án của người khác ... Không thể gỡ lỗi, tôi không có lựa chọn nào khác ngoài việc kiểm tra điều này: "error_reporting (0);"

Vì vậy, hãy kiểm tra mã nguồn của bạn. Tìm kiếm một cái gì đó như thế này: "error_reporting (0);". Khi bạn đã tìm thấy nó, hãy bình luận nó !!!

Bình thường, bạn không phải đặt mã đó vào mã nguồn, nhưng trong php.ini.

@ +

+0

Tốt hơn, hãy thêm một cách để tắt nó trong quá trình phát triển (và chỉ trong thời gian). Các thông báo lỗi này có thể cho biết các tin tặc sẽ rất nhiều về máy chủ của bạn. – EpicVoyage

8

Tôi đang chạy một PHP sau (5.4.24), nhưng những câu trả lời khác thiếu -d option I found exemplified elsewhere mà làm cho hiển thị PHP lỗi phân tích cú pháp dễ hiểu khi chạy từ cli:

php -d display_errors test.php 

Đây là câu trả lời hay nhất cho câu hỏi tôi đã googling. Chạy Linter với -l chỉ cho bạn biết "lỗi phân tích cú pháp foo.php"

+2

Tôi sử dụng tên này làm bí danh 'bí danh phprun =" php -d display_errors "' –

11

Tôi đã thấy điều này thực sự gây phiền nhiễu, vì vậy đây là một chiến lược để kiểm tra cú pháp từ CLI:

  1. Không tải file ini .
  2. Bật display_errors và display_startup_errors một cách rõ ràng.

php -n -l -d display_errors -d display_startup_errors path/to/your/phpfile.php

$ php -h 
-n    No php.ini file will be used 
-l    lint, syntax checking only 
-d foo[=bar]  Define INI entry foo with value 'bar' 
+0

có một lỗi nhỏ trong cờ display_errors, mặc dù đây là câu trả lời hay nhất – ROLO

Các vấn đề liên quan