2012-04-13 41 views
6

Tôi đã có một tập lệnh PHP bao gồm (hoặc 'yêu cầu') một tập hợp các tập lệnh khác. Điều này có hiệu quả cho việc nhập tất cả các lớp của tôi. Điều tôi đang gặp phải là lỗi HTTP 500. Tôi đã sàng lọc và nhận xét từng mảnh mã để xác định rằng nó không thành công trên require_once trong một trong các tệp của tôi.PHP Không theo yêu cầu

Đây là mã:

index.php:

<?php 
require_once("std/classes.php"); 
?> 

Và std/classes.php:

<?php 
RequireStandards(); 
RequireAddons(); 

function RequireStandards() 
{ 
    $ClassFiles = scandir("classes/standard"); 

    foreach($ClassFiles as $ClassFile) 
    { 
     if($ClassFile == "." || $ClassFile == "..") 
      continue; 

     //require_once("classes/standard/" . $ClassFile); 
    } 
} 

function RequireAddons() 
{ 
    $ClassFiles = scandir("classes"); 

    foreach($ClassFiles as $ClassFile) 
    { 
     if($ClassFile == "." || $ClassFile == ".." || $ClassFile == "standard") 
      continue; 

     //require_once("classes/" . $ClassFile); 
    } 
} 

?> 

Mã này sẽ làm việc như nó ngồi, nhưng ngay sau khi Tôi uncomment các yêu cầu, nó không thành công. Điều khiến tôi bất ngờ là tôi có rất nhiều trang web khác trên máy chủ này hoạt động gần như giống hệt nhau.

Tôi cảm thấy như thể tôi bằng cách nào đó đã báo cáo lỗi PHP bị tắt ... mà tôi không biết cách bật lại; khi tôi vừa nâng cấp lên PHP 5.3. Tôi thường mong đợi một 'file không thể mở' hoặc một số như vậy trong trình duyệt của tôi, nếu PHP thất bại.

Có thể ai đó có thể cho tôi biết lý do tại sao điều này đang khởi động lại HTTP 500 hoặc có thể chỉ cách kích hoạt lại báo cáo lỗi. Nó sẽ được nhiều đánh giá cao; điều này dường như không có ý nghĩa gì nhiều.

+0

Bạn có thể tham khảo nhật ký máy chủ của mình không? – miku

+1

Thư mục lớp của bạn có nằm trong thư mục gốc không? Thử thêm "/" trước các lớp học? Chỉ cần đoán thôi. –

+0

có thể là một vấn đề với đường dẫn bao gồm của bạn http://www.php.net/manual/en/function.set-include-path.php –

Trả lời

11

Để kích hoạt báo cáo lỗi:

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
require_once("std/classes.php"); 
?> 

Hy vọng rằng nên làm việc.

EDIT: Nếu thao tác này hoạt động, hãy nhớ tắt các lỗi hiển thị trước khi đặt bất kỳ thứ gì vào môi trường trực tiếp, công khai!

+0

Cảm ơn bạn. Đây là câu trả lời tôi đã hy vọng nhận được. Trong khi câu trả lời của @Madbreaks là 'câu trả lời' - đó không phải là câu trả lời cho bất cứ điều gì tôi đã hỏi. Tôi sẽ đưa ra lời khuyên của bạn Madbreaks, và xây dựng một AutoLoad, nhưng thay vì trả lời với 'đây là cách bạn nên viết mã của bạn', mọi người có thể bắt đầu trả lời vấn đề thực sự không? Nó khá là khó chịu để có được 'viết lại mã của bạn' như là một phản ứng với 'Tôi biết điều này là hợp lệ php tại sao không phải là mã này làm việc'. Cảm ơn bạn dù bằng cách nào. Đối với Jim D - điều này đặt tôi trở lại trên đầu trang của các lỗi PHP thực tế của tôi và tôi có thể sửa chữa một vài 'không mở được dòng bây giờ. Nhiều đánh giá cao. – DigitalJedi805

+0

@ DigitalJedi805 - Vui vì tôi có thể giúp! Bit ini_set ('display_errors') là thứ mà tôi thường chuyển đổi dựa trên hằng số sản xuất/môi trường. Bằng cách đó, tôi không thể vụng về và vô tình quên tắt nó đi. –

0

tôi muốn đề nghị bạn nhìn vào Autoloading Classes

+0

Downvoter ... tại sao? – Madbreaks

+0

Tôi không làm điều đó nhưng có lẽ vì đây không phải là câu trả lời cho câu hỏi mà tôi đã hỏi, cũng không giúp tôi sửa mã hiện có, nên làm việc bất kể tôi có tuân theo các phương pháp hay nhất hay không. Trong khi tôi đánh giá cao mẹo, và đã thực hiện nó, bạn có thể đọc nhận xét về câu trả lời của @Jim D, trong đó tôi giải thích về cách nó không 'hữu ích cho hoàn cảnh của tôi'. – DigitalJedi805

2

Bạn có thể tạm thời chuyển sang báo cáo lại về cách sử dụng error_reporting() hàm lỗi, ví dụ để hiển thị tất cả các lỗi đặt đoạn mã sau vào tập tin của bạn:

error_reporting(E_ALL);

Tất nhiên, để thay đổi điều này, bạn vĩnh viễn nên chỉnh sửa tập tin php.ini của bạn, và chắc chắn rằng bạn đã kích hoạt error_reporting cũng như display_errors (ít nhất nếu đây không phải là một môi trường sản xuất). Bạn cũng có thể thử:

ini_set('display_errors', 1);

Mặc dù điều này có thể không hoạt động nếu bạn có một lỗi nghiêm trọng trên trang. Một lần nữa, để kích hoạt tính năng này vĩnh viễn, bạn sẽ phải sửa đổi tệp php.ini của mình.

Thông thường, bạn chỉ nên bật display_errors trên các hệ thống phi sản xuất để người dùng không nhận được thông tin nhạy cảm có khả năng thông qua các thông báo lỗi của bạn.

Trong cả hai trường hợp, bạn sẽ có thể tìm ra lỗi php trong nhật ký lỗi apache, trên ubuntu này nằm ở đây:

/var/log/apache2/error.log

Mặc dù nó có thể thay đổi dựa trên phân phối của bạn.