PHP Error durch require()?
Hi, ich raff grad gar nix mehr, ich hab eine PHP Klasse dbConnection, in der ich mit require ein php File (settings.php) einbinde. Das einbinden funktioniert auch, nur binde ich innerhalb von settings.php ein weiteres php File ein, functions.php. Das wiederrum funktioniert nicht. Ich weiß, meine Erklärung ist bissle kompliziert, daher hier der Code:
dbConnection.php
<?php
try {
require dirname($_SERVER["DOCUMENT_ROOT"]) . "/php/settings/settings.php";
} catch (Throwable|mysqli_sql_exception $exception) {
error_log(date("d.m.Y, H:m:s") . " | " . $exception . "\n\n", 3, "/hp/cz/aa/gf/www/domains/domain.com/php/logs/php-errors.log");
header("location: /error/?error=500");
exit();
}
class dbConnection
{
...
}
settings.php
<?php
try {
date_default_timezone_set("Europe/Berlin");
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
require dirname($_SERVER["DOCUMENT_ROOT"]) . "/php/functions/functions.php";
} catch (Throwable|mysqli_sql_exception $exception) {
error_log(date("d.m.Y, H:m:s") . " | " . $exception . "\n\n", 3, "/hp/cz/aa/gf/www/domains/domain.com/php/logs/php-errors.log");
header("location: /error/?error=500");
exit();
}
hier die relevanten Pfade:
domain.com/php/classes/dbConnection.php
domain.com/php/settings/settings.php
domain.com/php/functions/functions.php
Der Fehler muss an der in settings.php Datei liegen, da ich schon einmal vor und nach dem require in settings.php ein die("hier"); gemacht habe und dabei als das die("hier"); VOR dem
require dirname($_SERVER["DOCUMENT_ROOT"]) . "/php/functions/functions.php";
"hier" ausgegeben hat, und NACH dem
require dirname($_SERVER["DOCUMENT_ROOT"]) . "/php/functions/functions.php";
mir angezeigt wurde, dass diese Seite nicht funktionieren würde. Komisch ist auch, dass der Fehler nicht aufgefangen wird, daher bin ich gerade etwas ratlos. Hoffe meine Frage ist verständlich, ansonsten gerne einfach nachfragen :)
Achtung, ich benutze dirname() daher, da mein Root Folder ebenfalls in domain.com liegt, dieser heißt "public" !
Außerdem sind bei manchen try catch Blöcken "unnötige" Fehler angegeben, die im try gar nicht geworfen werden können, ich weiß, hab ich nur leider vergessen bis jetzt zu löschen :D - daher nicht wundern
Ich habe mir mit die(); auch schon den Pfad, welcher dann letzendlich in require steht ausgeben lassen, dieser scheint zu stimmen :(
2 Antworten
Wenn via require eine Datei nicht geladen werden kann, wird diese Sorte Fehler (E_COMPILE_ERROR) geworfen, die du nicht so einfach via try-catch auffangen kannst.
So ein try-catch brauchst du im Übrigen nicht. Ein if-else dürfte ausreichen:
$include_path = dirname($_SERVER['DOCUMENT_ROOT']) . '/php/settings/settings.php';
if (is_readable($include_path) === false) {
error_log(/* ... */);
header('Location: /error/?error=500');
exit;
}
require_once $include_path;
// ...
Ich habe mir mit die(); auch schon den Pfad (...) ausgeben lassen, dieser scheint zu stimmen :(
Wenn die Pfade immer passen, scheint wohl eher etwas mit dem Code nicht zu stimmen, der zusammengeführt wird. Schau also, dass du an die Fehlermeldung zu dem Fehler kommst, der offensichtlich auftritt.
Erste Regel bei Fehlern, Fehlermeldungen anschauen und im Idealfall auch verstehen
error.log
error_reporting
display_errors
und Co sind Deine Freunde!