PHP Scheitert an require_once
Ich habe ein PHP-script enthält ( oder 'erfordert' ) eine Reihe von anderen Skripts aus. Dies ist effektiv für den Import aller meiner Klassen. Was ich bin, die Begegnung wird eine HTTP 500-Fehlermeldung. Ich habe durchgesiebt und auskommentierten code Stück für Stück zu bestimmen, dass es andernfalls auf das require_once in einer meiner Dateien.
Hier ist der code:
index.php:
<?php
require_once("std/classes.php");
?>
Und 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 );
}
}
?>
Dieser code funktioniert wie es sitzt, aber sobald ich die Auskommentierung der erfordert, schlägt fehl. Was mir auffällt, wie seltsam ist, dass ich viel von anderen Websites auf diesem server, die Handlung in fast identischer Weise.
Fühle ich mich als ob ich irgendwie mein PHP-error-reporting deaktiviert... was ich nicht weiß, wie Sie sich wieder einschalten, da ich nur ein Upgrade auf PHP 5.3. Ich würde normalerweise erwarten, dass ein "couldnt open file' oder so in meinem browser, wenn PHP daran gescheitert ist.
Vielleicht könnte jemand mir sagen, warum das treten zurück ein HTTP 500, oder vielleicht gerade wie zu re-enable Fehlerberichterstattung. Es wäre sehr geschätzt werden; dies scheint einfach nicht zu viel Sinn.
- Können Sie konsultieren Sie Ihren server-logs?
- Ist Ihre Klasse Ordner in das root-Verzeichnis? Versuchen Sie, ein "/" vor dem Unterricht? Nur eine Vermutung.
- vielleicht ein problem mit dem include-Pfad php.net/manual/en/function.set-include-path.php
- Es ist besser
$_SERVER['DOCUMENT_ROOT'] . '/classes/standard/;
- Dies sind alle gültigen Kommentare - es stellte sich heraus, dass die relativen Pfade, die waren in Ordnung, die in XAMPP nicht übersetzen, so gut über IIS. Nach der re-Aktivierung der php-error-reporting habe ich es geschafft, herauszufinden, was diese waren, und korrigieren Sie Sie. Es scheint, dass die Datei-IO sich ein wenig geändert vom 4.?.? 5.3.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur fehlerberichterstellung aktivieren:
Hoffentlich funktionieren sollte.
EDIT: Wenn das funktioniert, denken Sie daran, schalten Sie die Anzeige von Fehlern, bevor Sie irgendetwas in einem Leben, der öffentlichkeit zugewandten Umgebung!
Können Sie vorübergehend wieder error reporting wieder auf mit der error_reporting () - Funktion, zum Beispiel, um zu zeigen, alle Fehler setzen Sie den folgenden code in der Datei:
error_reporting(E_ALL);
Natürlich, um diese änderung permanent, sollten Sie Bearbeiten Sie Ihre php.ini-Datei, und stellen Sie sicher, dass error_reporting aktiviert sowie display_errors (zumindest ist dies nicht eine Produktionsumgebung). Sie können auch versuchen:
ini_set('display_errors', 1);
Obwohl dies möglicherweise nicht funktionieren, wenn du einen fatal error auf der Seite. Nochmal, damit das dauerhaft müssen Sie ändern Sie Ihre php.ini-Datei.
Es wird im Allgemeinen vorgeschlagen, dass Sie damit display_errors nur auf nicht-produktiven Systemen, so dass Anwender nicht bekommen, potenziell sensible Informationen über Ihre Fehlermeldungen.
In jedem Fall sollten Sie in der Lage sein zu finden, die php-Fehler im apache-error-log, auf ubuntu diese befindet sich hier:
/var/log/apache2/error.log
Obwohl es kann variieren, basierend auf Ihre Verteilung.
Ich würde vorschlagen, Sie schauen in Für Autoloading Klassen