2012-04-13 9 views
6

Mam skrypt PHP, który zawiera (lub "wymaga") zestaw innych skryptów. Jest to skutecznie do importowania wszystkich moich klas. To, co napotykam, to błąd HTTP 500. Przefiltrowałem i skomentowałem kod kawałek po kawałku, aby stwierdzić, że jest on uszkodzony na require_once w jednym z moich plików.PHP Fails on require_once

Oto kod:

index.php:

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

I 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); 
    } 
} 

?> 

Ten kod będzie działać jak siedzi, ale jak najszybciej Odkomentowuję wymagania, to się nie udaje. Dziwne jest to, że mam wiele innych stron na tym serwerze, które działają w niemal identyczny sposób.

Mam wrażenie, że jakoś mam wyłączone zgłaszanie błędów PHP ... ale nie wiem, jak włączyć ponownie; jak tylko uaktualniłem do PHP 5.3. Zazwyczaj spodziewałbym się, że "nie da się otworzyć pliku" lub czegoś takiego w mojej przeglądarce, jeśli PHP się nie powiedzie.

Być może ktoś mógłby mi powiedzieć, dlaczego to cofa HTTP 500, a może po prostu jak ponownie włączyć raportowanie błędów. Byłoby to bardzo doceniane; to po prostu nie ma większego sensu.

+0

Czy możesz sprawdzić dzienniki serwera? – miku

+1

Czy twój folder zajęć znajduje się w katalogu głównym? Spróbuj dodać "/" przed zajęciami? Tylko zgadnij. –

+0

Być może problem ze ścieżką dołączania http://www.php.net/manual/en/function.set-include-path.php –

Odpowiedz

11

Aby włączyć raportowanie błędów:

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

miejmy nadzieję, że powinno działać.

EDYCJA: Jeśli to zadziała, pamiętaj o wyłączeniu błędów wyświetlania przed umieszczeniem czegokolwiek w otwartym, publicznym otoczeniu!

+0

Dziękuję. Oto odpowiedź, którą miałem nadzieję uzyskać. Odpowiedź @Madbreaks była "odpowiedzią" - nie była to odpowiedź na wszystko, o co prosiłem. Wezmę twoją radę Madbreaks i zbuduję AutoLoad, ale zamiast odpowiadać "tak powinieneś napisać swój kod", czy ludzie mogą zacząć odpowiadać na prawdziwy problem? To dość irytujące, aby "przepisać swój kod" w odpowiedzi na "Wiem, że to jest poprawny php, dlaczego nie jest to działający kod". Dziękuję w każdym razie. Jeśli chodzi o Jima D - to postawiło mnie z powrotem na moich rzeczywistych błędach PHP i mogę naprawić kilka "nie udało się otworzyć strumienia teraz. Bardzo doceniane. – DigitalJedi805

+0

@ DigitalJedi805 - Cieszę się, że mogę pomóc! Bit ini_set ('display_errors') jest czymś, co zwykle przełączam na podstawie stałej produkcji/środowiska. W ten sposób nie mogę być niezręczny i przypadkowo zapomnieć go wyłączyć. –

0

sugeruję zajrzeć do Autoloading Classes

+0

Downvoter ... dlaczego? – Madbreaks

+0

Nie zrobiłem tego, ale prawdopodobnie dlatego, że nie jest to odpowiedź na pytanie, które zadałem, ani nie pomaga mi w naprawieniu istniejącego kodu, który powinien działać niezależnie od tego, czy stosuję najlepsze praktyki, czy nie. Chociaż doceniam wskazówkę i już ją wdrożyłem, możesz przeczytać komentarz do odpowiedzi @Jima D's'a, w którym wyjaśniam, w jaki sposób nie był on "pomocny w moich okolicznościach". – DigitalJedi805

2

można czasowo wyłączyć raportowania z powrotem na użyciu error_reporting() funkcja błędu, na przykład, aby pokazać wszystkie błędy umieścić następujący kod w pliku:

error_reporting(E_ALL);

oczywiście, aby to zmienić trwale cię powinien edytować twój plik php.ini i upewnić się, że masz włączone error_reporting oraz display_errors (przynajmniej jeśli nie jest to środowisko produkcyjne). Można też spróbować:

ini_set('display_errors', 1);

choć może nie działać, jeśli masz poważny błąd na stronie. Ponownie, aby włączyć to na stałe, będziesz musiał zmodyfikować swój plik php.ini.

Ogólnie zaleca się włączanie display_errors tylko w systemach nieprodukcyjnych, aby użytkownicy nie uzyskiwali potencjalnie poufnych informacji za pośrednictwem komunikatów o błędach.

W obu przypadkach powinno być możliwe, aby znaleźć błędy PHP w dzienniku błędów apache, na ubuntu ten znajduje się tutaj:

/var/log/apache2/error.log

Choć może się różnić w zależności od dystrybucji.

Powiązane problemy