Bonsoir,
J'aimerais re-développer mon site internet avec les nouvelles connaissances et technologies disponibles; mais pour cela j'aurais bien espéré avoir vos avis ainsi que quelques réponses à des questions qui me trottent dans la tête:
// Actuellement
ob_start(); // Récupère le contenu de la page
require 'templates/router.php'; // Inclus le fichier qui s'occupe de l'inclusion des pages
$content = ob_get_clean(); // Envoi le contenu de la page
require 'templates/defaut.php'; // Inclus le modèle de page en remplaçant le " $content "
// Définissions des variables au début pour éviter les erreurs
$file = null;
$chemin = null;
$no_exist = null;
$remove_slash = substr($_GET['page'], 1); // Supprime dans l'adresse de la page le premier slash (/accueil, par exemple)
$url_coupe = explode('/', $remove_slash); // Découpe l'adresse pour pouvoir s'occuper de chacune des parties
// Chemin demandé via l'URL & comptage des paramètres dans l'URL
$chemin = 'pages/' . $remove_slash . '.php';
$count = count($url_coupe);
// Boucle de vérification
for ($i = 0; $i <= $count; ++$i) {
// Vérifie si un fichier .php n'existe pas sur base du chemin
if (!file_exists($chemin)) {
$chemin = str_replace('.php', '', $chemin);
// Vérifie si un dossier n'existe pas sur base du chemin
if (!file_exists($chemin)) {
// Le fichier rechercher n'existe définitivement pas
$no_exist = true;
// Si un dossier existe sur base du chemin
} else {
// Vérifie s'il y a un slash au bout du chemin avec le dossier sinon le rajoute
if (!preg_match("/\/$/", $chemin)) {
$chemin .= '/';
}
// Si le dossier d'accueil existe
if (file_exists($chemin . 'accueil.php')) {
// Défini qu'on est à la racine du dossier
$file = true;
} else {
// Le fichier rechercher n'existe définitivement pas
$no_exist = true;
}
}
}
}
// Si l'URL est vide ou que le dossier a un "accueil" par défaut
if ($file == true) {
$chemin .= 'accueil.php';
}
// Si la page demandée n'existe pas
if ($no_exist == true) {
Erreur::notFound();
}
// Vérifie les permissions pour les panels
if ($url_coupe['0'] === 'bf-admin') {
if (!$user->isAdmin()) {
Erreur::forbidden();
}
} elseif ($url_coupe['0'] === 'bf-modo') {
if (!$user->isModo() && !$user->isAdmin()) {
Erreur::forbidden();
// Inclus la page demandée
require $chemin;
Mon serveur est sous NGINX, et lorsque je fais des erreurs PHP dans un fichier accessible en " .php " (malgré la présence de mon routeur ci-dessus (le routeur crée des urls comme celles-ci: www.domaine.com/accueil, mais les fichiers .php restent accessibles quand ils sont pas dans le dossier " pages/ ": www.domaine.com/test.php )) elles s'affichent. En revanche, si je fais une erreur dans un fichier créé et traité par la redirection de mon routeur, j'ai une erreur " HTTP ERROR 500 ". C'est peut-être un peu incompréhensible, alors voici des exemples (le contenu et l'erreur PHP est la même pour les deux fichiers):
Je ne pense pas que ça vient du fichier " router.php ", mais plutôt de mes règles NGINX qui s'occupent de mes URLs. Cependant, je ne vois pas comment régler ce comportement afin que les erreurs s'affichent même sur mes pages redirigées par NGINX sans me couper l'accès à la page ( HTTP ERROR 500 ). Voici la configuration NGINX par rapport à PHP:
location / {
try_files $uri /index.php?page=$uri;
}
location ~ /\. {
deny all;
}
location ~* \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
D'ailleurs les fichiers " .php " (s'ils existent) restent accessibles dans une url du type " www.domaine.com/test.php ", mais comment empêcher ce comportement ou/et comment rediriger vers une page 404 par exemple si le fichier .php n'existe pas ?
This function has a known bug (https://bugs.php.net/bug.php?id=58573) under some Linux installations: you can't encrypt your private key if you've compiled libssh2 using libgcrypt. According to the bug page, the solution is to rebuild libssh2 with OpenSSL. (Or don't encrypt your private key, but that seems irresponsible somehow.) This isn't a bug report -- the bug is apparently already being fixed -- but a note for others, because it took me at least an hour of Googling to realize the problem wasn't with my own code.
Par conséquent, je ne vois pas trop comment faire car je ne comprends pas comment "rebuild libss2"... auriez-vous une idée ?
Je suis désolé pour le nombre de question, mais je voudrais vraiment faire ça proprement ^^ ! Merci d'avance pour vos réponses (même si vous ne connaissez la réponse qu'à l'une de mes questions, ça m'aiderait déjà énormément) !
Cordialement,
// Vérifie les permissions pour les panels
if ($url_coupe['0'] === 'bf-admin') {
if (!$user->isAdmin()) {
Erreur::forbidden();
}
} elseif ($url_coupe['0'] === 'bf-modo') {
if (!$user->isModo() && !$user->isAdmin()) {
Erreur::forbidden();
il te manque pas 2 accolades pour fermer tes conditions ?
parce que une erreur 500, c'est générallement un problème php.
regarde dans /var/log/nginx/error.log tu trouveras surement plus d'infos
Merci de ta réponse,
Je ne sais pas comment est-ce que mon code s'est mal copié, mais dans mon code elle est bien présente. Les erreurs sont vides et les access:
80.*00.198.** - - [18/Feb/2017:01:56:11 +0100] "GET /page_no_router.php HTTP/1.1" 200 150 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
80.*00.198.** - - [18/Feb/2017:01:56:11 +0100] "GET /favicon.ico HTTP/1.1" 302 5 "http://pvp-blastfight.fr:800/page_no_router.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
80.*00.198.** - - [18/Feb/2017:01:56:11 +0100] "GET /accueil HTTP/1.1" 200 3771 "http://pvp-blastfight.fr:800/page_no_router.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
80.*00.198.** - - [18/Feb/2017:01:56:14 +0100] "GET /page_router HTTP/1.1" 500 5 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
Cordialement,
J'ai réussi a régler le problème du router en rajoutant:
ini_set('display_errors', 'on'); error_reporting(E_ALL);
En début de l'index.php ! Maintenant il me reste donc les autres questions :/
Bonjour.
Ce serait agréable que tu arrêtes de faire des relances de tes sujets dès que tu n'as pas de réponse pendant 24/48 heures, car c'est vraiment agaçant à la longue.
Bonjour,
C'est un forum d'entraide, je ne spamme pas les relances car mes deux messages précédents ont 2 jours de décalages et tout au moins, 24 heures. Pensant être tout à fait en accord avec le thème du forum ainsi que ses règles, je continuerai tant que mes réponses ne sont pas apportées et le fait que ça t'agace m'importe peu pour être franc ;)
Bonne continuation à toi,
ce que tu peux faire pour empecher l'accès a tes fichiers c'est simple, tu te fait un dossier "public"
App/
| public/
| | resources/
| | index.php
| core/
| | router.php
dans ton index.php, tu include('../core/router.php');
et tu fait pointer son serveur web sur App/public