PHP Require löst 500er Fehler aus

chickenburner

Cadet 1st Year
Registriert
Feb. 2020
Beiträge
11
Hallo,

ich habe einen sehr merkwürdiges Problem. In einem Script A lade ich meine config-Datei mit require 'config/db.php'; rein und alles funktioniert problemlos. Bei einem anderen Script B lade ich die config-Datei genau so rein und erhalte für das Script B eine weiße Seite und laut Konsole ein 500er-Fehler.
In der Konsole wird folgendes angezeigt: Failed to load resource: the server responded with a status of 500 () für mein Script B.
Im Server-Error-Log ist nichts zu finden.
Wenn ich den Inhalt aus der Config-Datei direkt in das Script B schreibe, funktioniert es problemlos. Die beiden Scripte A und B befinden sich im selben Unterordner und auch ein absoluter Pfad schafft keine Abhilfe. Es steht sonst kein weiterer Code im Script B außer der require-Befehl.

Woran kann das liegen?

Vielen Dank im Voraus
 
Zuletzt bearbeitet:
Mal in die Logfiles geschaut?
 
  • Gefällt mir
Reaktionen: up.whatever
Hallo Xammu,

hab gerade meinen Beitrag erweitert :D Ja, da steht allerdings nichts drin. Ich erhalte einfach eine weiße Seite und in der Konsole steht Failed to load resource: the server responded with a status of 500 () zu meinem Script B.
 
In welcher Konsole?

Für mich hört es sich so an, als würdest du einen JavaScript-Require machen und kein PHP.
Warum sollte ein PHP-Require denn zu dem hier führen: " the server responded with a status of 500 "
Das hört sich ja nach HTTP-Request an.

Ich nehme an mit der Konsole meinst du die in den Entwicklungstools des Browsers...
 
  • Gefällt mir
Reaktionen: up.whatever
Bei fatalen Problemen kann schon mal ein 500er kommen. Leider ist PHP da nicht immer sehr gesprächig.

Ich baue daher grundsätzlich immer eine shutdown funktion ein. In der ruft man dann error_get_last() auf und schreibt die Fehlermeldung entweder in ein logfile oder sendet sie per mail.
 
@MisC: Ach ja, okay... er schaut in der Browser-Konsole nach dem Fehler, und ja, weil es in PHP zu einem Fehler kam, kommt als Antwort ein Internal Server Error in Form eines HTTP-Status 500 zurück.

Dann ist durchaus was im PHP falsch, aber er schaut halt in der falschen Konsole.
 
Ja genau in der Browser-Konsole. sorry.

Wenn ich den Pfad wie folgt angebe, funktioniert es: require '../config/db.php';
Was mich aber immer noch wundert, wieso es in dem einen Script so funktioniert, aber nicht in dem anderen Script.
 
Mach mal aus dem require ein include.
Include wirft nicht wie require einen Error sondern nur ein Warning, gibt dann kein 500 solange der Rest vom Script nicht ohne den Include crasht. Wenn du in PHP dann error_reporting an machst sollte dir PHP sagen was genau das Problem ist.


Edit: error_reporting sollte eigentlich auch bei require Output liefern, pack error_reporting(E_ALL); mal in die erste Zeile vom Script.
 
Joshinator schrieb:
Mach mal aus dem require ein include.
Include wirft nicht wie require einen Error sondern nur ein Warning, gibt dann kein 500 solange der Rest vom Script nicht ohne den Include crasht. Wenn du in PHP dann error_reporting an machst sollte dir PHP sagen was genau das Problem ist.


Edit: error_reporting sollte eigentlich auch bei require Output liefern, pack error_reporting(E_ALL); mal in die erste Zeile vom Script.

Leider sagt er mir hier auch nichts zum eigentlichen Fehler. Er sagt nur, dass die Variable $conn, welche ich in config/db.php definiere fehlt (undefined variable).
 
ahja:

wenn Script A und B im gleichen ordner liegen, warum lädt dein relativer pfad noch den config ordner?
wenn ../config/db.php funktioniert liegt ein ordner höher ev ein config ordner rum?
vermutlich wird require 'db.php'; funktionieren.

oder sollte script A einen ordner höher außerhalb des config ordners liegen?

um solche fehler zu vermeiden empfiehlt es sich eine Konstante MY_SCRIPT_ABSPATH anzulegen und davon absolut auszugehen:

Script A (auf gleicher höhe wie der config ordner)
PHP:
<?php

if ( !defined( 'MY_SCRIPT_ABSPATH' ) ) {
  define('MY_SCRIPT_ABSPATH', dirname(__FILE__) . '/');
}
if ( !defined( 'MY_SCRIPT_CONFIGPATH' ) ) {
  define('MY_SCRIPT_CONFIGPATH', MY_SCRIPT_ABSPATH . 'config/');
}
require MY_SCRIPT_CONFIGPATH . 'db.php';

?>
 
Zuletzt bearbeitet:
error_reporting alleine hat nach testen auch nicht alles ausgespuckt, mit:
PHP:
ini_set('display_errors', TRUE);
error_reporting(E_ALL);

bekomme ich aber Warning: include(test_2.php): failed to open stream: No such file or directory in ....


Wenn Script A & B im selben Unterordner liegen und der selbe Pfad nicht funktioniert riecht es eher nach Berechtigungen. Haben A & B die selben Berechtigungen?
 
So sieht die Verzeichnisstruktur aus:

domain.de/function/ScriptA.php
domain.de/function/ScriptB.php
domain.de/config/db.php

Im Verzeichnis function liegt kein zusätzliches config-Verzeichnis. require 'db.php'; funktioniert nicht. Die Konstante habe ich ebenfalls probiert, aber ohne Erfolg.

Display_errors ist bereits auf True.
Berechtigungen sind bei allen Scripten auf 644 und bei den Verzeichnissen auf 755.
 
chickenburner schrieb:
In einem Script A lade ich meine config-Datei mit require 'config/db.php';

Wenn deine Struktur so aussieht sollte nicht einmal Script A funktionieren.
Bei Script A und B müsste es require '../config/db.php'; heißen weil PHP zum laden erstmal aus dem function-Ordner navigieren muss.
 
  • Gefällt mir
Reaktionen: netzgestaltung
chickenburner schrieb:
Die Konstante habe ich ebenfalls probiert, aber ohne Erfolg.

Das kann sie auch nicht, es wurde eine andere Struktur angenommen.

in deiner struktur ist für mich fraglich wie script A und B aufgerufen werden. Die Konstante sollte dann ggf im aufrufenden script definiert werden.

in deiner aktuellen struktur ist einzig require '../config/db.php' korrekt.
 
Zurück
Oben