2008-09-20 25 views
16

Tôi không muốn hiển thị PHP lỗi/html, nhưng tôi muốn chúng hiển thị trong /html/beta/usercomponent. Mọi thứ được thiết lập để các lỗi không hiển thị chút nào. Làm thế nào tôi có thể gặp lỗi để chỉ hiển thị trong một thư mục đó (và các thư mục con của nó)?Làm cách nào để bật các lỗi PHP hiển thị trên một thư mục con

+1

Nếu mọi thứ khác không thành công, 'set_error_handler (" var_dump ");'. Mặc dù có lỗi cú pháp trong tập lệnh invokation, mọi thứ cần phải được cấu hình thông qua php.ini/.htaccess/.user.ini trước. – mario

Trả lời

28

Trong .htaccess:

php_value error_reporting 2147483647 

Con số này, theo tài liệu hướng dẫn nên kích hoạt 'tất cả' lỗi không phụ thuộc vào phiên bản, nếu bạn muốn có một thiết lập chi tiết hơn, bằng tay hoặc các giá trị với nhau, hoặc chạy

php -r 'echo E_ALL | E_STRICT ;' 

để cho phép tính toán giá trị php cho bạn.

Bạn cần

AllowOverride All 

trong cấu hình Apache tổng thể để cho phép các file .htaccess.

đọc thêm về vấn đề này có thể được tìm thấy ở đây:


Thông báo Nếu bạn đang sử dụng Php-CGI thay vì mod_php , điều này có thể không hoạt động như đã quảng cáo, và tất cả các bạn sẽ nhận được là một lỗi máy chủ nội bộ, và bạn sẽ bị bỏ lại mà không có nhiều lựa chọn khác hơn là tạo điều kiện cho nó, hoặc trang web rộng trên một cơ sở cho mỗi kịch bản với

error_reporting(E_ALL | E_STRICT); 

hoặc tương tự cấu trúc trước khi lỗi xảy ra.

Lời khuyên của tôi là để tắt hiển thị lỗi cho người dùng và sử dụng tính năng error_log của php.

display_errors = 0 
error_logging = E_ALL | E_STRICT 
error_log = /var/log/php 

Nếu bạn gặp vấn đề với điều này quá ồn ào, đây không phải là dấu hiệu bạn cần chỉ báo cáo lỗi có chọn lọc, đây là dấu hiệu ai đó nên sửa mã.


@Roger

Vâng, bạn có thể sử dụng nó trong một < Directory> xây dựng trong cấu hình Apache quá, tuy nhiên, .htaccess trong trường hợp này là tương đương, và làm cho nó di động hơn, đặc biệt nếu bạn có nhiều bản sao thanh toán hoạt động của cùng một codebase và bạn muốn phân phối thay đổi này cho tất cả chúng.

Nếu bạn có nhiều máy ảo, bạn sẽ muốn xây dựng trong tương ứng định nghĩa máy ảo, nếu không, có

<Directory /path/to/wherever/on/filesystem> 
     <IfModule mod_php5.c> 
     php_value error_reporting 214748364 
     </IfModule> 
    </Directory> 

Các bổ sung "IfModule" lệnh chỉ là một mạng lưới an toàn để vấn đề trên với apache chết nếu bạn không có mod_php sẽ không xảy ra.

+1

Xin lỗi, tôi mới quen với hệ thống này. Tôi đang cố gắng làm điều đó trong tệp httpd.conf nếu có thể. đó sẽ trông giống như như /html/beta/usercomponent"> php_value error_reporting 2147483647 Hoặc nó cần phải được thực hiện trong các tập tin .htaccess? –

+1

Như một lưu ý ở đây, trong trường hợp bất kỳ ai khác đang tìm cách bật các lỗi PHP-CGI: bây giờ bạn có thể (bằng PHP 5.3) sử dụng các tệp .user.ini trên mỗi thư mục hoạt động theo cách tương tự như các tệp htaccess .Nhưng thay vì viết 'php_flag display_errors on' bạn đặt vào' display_errors = on'. Xem thêm thông tin tại đây: http://php.net/manual/en/configuration.file.per-user.php – PaulSkinner

+1

Cũng lưu ý, như đã nói trong các ý kiến ​​của trang đó: "các thay đổi có thể mất một thời gian để phổ biến cho tất cả các quy trình nếu bạn có thời gian xử lý lâu. " vì vậy hãy kiên nhẫn. – PaulSkinner

0

Tôi không tin rằng có một câu trả lời đơn giản cho điều này , nhưng tôi chắc chắn muốn được chứng minh là sai.

chỉnh sửa: hóa ra điều này có thể được kiểm soát từ các tệp .htaccess. Cảm ơn mọi người! :)

Bạn có thể sử dụng error_reporting() http://docs.php.net/manual/en/function.error-reporting.php để chuyển cài đặt trên tập lệnh theo cơ sở tập lệnh. Nếu bạn xảy ra để có một kịch bản duy nhất được bao gồm mỗi lần tại/html/beta/usercomponent, điều này sẽ làm các trick.

4

Cách dễ nhất là kiểm soát báo cáo lỗi từ tệp .htaccess. Nhưng đây là giả sử bạn đang sử dụng Apache và các tập lệnh trong/html/beta/usercomponent được gọi từ thư mục đó và không được đưa vào từ nơi khác.

.htacess

php_value error_reporting [int] 

Bạn sẽ phải soạn giá trị số nguyên mình khỏi danh sách như đã mô tả trong tài liệu error_reporting, vì hằng như E_ERROR không được định nghĩa khi Apache diễn giải .htaccess.

Đó là cờ bitwise đơn giản, do đó, giá trị là 12, chẳng hạn, sẽ là E_WARNING + E_PARSE + E_NOTICE.

4

bạn có thể thực hiện việc này bằng cách sử dụng biến Môi trường. theo cách này, bạn có thể có nhiều lựa chọn hơn là chỉ bật/tắt báo cáo lỗi cho một thư mục đặc biệt. trong mã của bạn, nơi bạn muốn thay đổi bất kỳ hành vi nào cho một tập hợp các đạo cụ hoặc chế độ chạy cụ thể, hãy kiểm tra xem một biến môi trường có được đặt hay không. như thế này:

if ($_ENV['MY_PHP_APP_MODE'] == 'devel') { 
    // show errors and debugging info 
} elseif ($_ENV['MY_PHP_APP_MODE'] == 'production') { 
// show some cool message to the user so he won't freak out 
// log the errors and send email to the admin 
} 

và khi bạn đang chạy ứng dụng của bạn trong môi trường phát triển của bạn, bạn có thể thiết lập một biến env trong tập tin .htaccess bạn như thế này:

setenv MY_PHP_APP_MODE devel 

hoặc khi bạn đang ở trong EVN sản xuất :

setenv MY_PHP_APP_MODE production 

cùng một kỹ thuật áp dụng cho trường hợp của bạn. trong các thư mục mà bạn muốn làm một cái gì đó đặc biệt (bật báo cáo lỗi) thiết lập một số biến env và trong mã của bạn, hãy kiểm tra điều đó.

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