[RESOLU] Lire un fichier dans un sous-répertoire

Avatar du membre
Eléphanteau du PHP | 49 Messages

27 janv. 2023, 10:55

Bonjour à tous,

Grâce à votre aide, j'ai pu avoir un code impeccable pour afficher la page index.php.

Là où j'ai commencé à galérer, c'est quand j'ai voulu faire des liens isset $_Get !
En effet, il aurait été trop fastidieux de faire des lien standards (<a href...) pour la mise en forme des pages appelées.

Donc, avec une petite aide , j'ai pu faire ce code dans index.php :
<?php

$pages = [
	"accueil" => ["titre" => "Accueil",],
	"loisirs" => ["titre" => "Loisirs",],
];
if (	!isset($_GET["page"])
	||	!isset($pages[$_GET["page"]])
) {
	$code_page_actuelle = "accueil"; // page par défaut
} else {
	$code_page_actuelle = $_GET["page"];
}
$informations_page = $pages[$code_page_actuelle];
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8"/>
	<title><?php echo htmlspecialchars($informations_page["titre"]);?> | Mon Site</title>
	<link rel="stylesheet" href="style.css"/>
</head>
<body>
	
	<h1>
		<?php echo htmlspecialchars($informations_page["titre"]);?>
	</h1>
	
	<div class="conteneur_page">
		<?php require "pages/$code_page_actuelle.html";?>
	</div>
	
	<div class="menu">
		
		<?php foreach ($pages as $code_page => $tab_page) {?>
			
			<a href="?page=<?php echo htmlspecialchars($code_page);?>">
				<?php echo htmlspecialchars($tab_page["titre"]);?></a>
		<?php }?>

	</div>
</body>
</html>
Jusque là, tout va bien puisque les fichiers à lire sont dans le dossier "Pages) !
Où ça se complique, c'est que si je crée un sous-répertoire en y mettant un fichier.html, j'ai des erreurs.
Warning: require(pages/loisirs.html): Failed to open stream: No such file or directory in C:\laragon\www\ori_multipages\index.php on line 40

Fatal error: Uncaught Error: Failed opening required 'pages/loisirs.html' (include_path='.;C:/laragon/etc/php/pear') in C:\laragon\www\ori_multipages\index.php:40 Stack trace: #0 {main} thrown in C:\laragon\www\ori_multipages\index.php on line 40
Et voici la ligne dans index.php
  <?php require "pages/$code_page_actuelle.html";?> 
Il faudrait lire le fichier mais d'abord définir le chemin du sous-répertoire où il se trouve.
J'ai regardé sur le Web mais en général c'est en anglais, j'ai pas trop bien compris... et comme je ne suis un pro du php, c'est pas gagné d'avance !

Si vous aviez une idée cclaire et concise, ça m'aiderait beaucoup !

Merci d'avance de vos réponses.

Cordialement,
jlb59430

Mammouth du PHP | 2664 Messages

27 janv. 2023, 13:06

il y a bien un fichier loisirs.html dans le répertoire pages ?

Avatar du membre
Mammouth du PHP | 1606 Messages

27 janv. 2023, 13:18

A priori la solution de base c'est d'avoir le chemin relatif complet dans $_GET["page"]. Après c'est pas idéal de passer par une variable en GET pour faire un include, faut le sécuriser.
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1490 Messages

28 janv. 2023, 19:58

Tout simplement utiliser la constante magique __DIR__ devant le chemin et éventuellement redescendre d'un dossier "dirname(__DIR__)", ou plusieurs avec "dirname(dirname(__DIR__)) "etc

Voir __DIR__ et les autres constantes magiques : https://www.php.net/manual/fr/language. ... .magic.php

Dans index.php, par exemple :
<?php require __DIR__ . "/pages/$code_page_actuelle.html";?> 
Si tu chercherais à afficher une page du dossier "pages" avec un fichier dans "un_dossier" ([racine]/un_dossier/index.php) :
<?php require dirname(__DIR__) . "/pages/$code_page_actuelle.html";?> 
Ceci fonctionnerait aussi je pense (pas testé) :
<?php require __DIR__ . "/../pages/$code_page_actuelle.html";?> 

Avatar du membre
Eléphanteau du PHP | 49 Messages

30 janv. 2023, 18:21

Bonjour,
Je conçois que l'instruction '__dir__" pourrait sembler idéale, mais avec l'aide qui m'a été apportée ici, j'ai pu m'en passer.
Je dois avouer que mes connaissances en PHP sont très limitées et qu'il serait fastidieux d'apprendre ce langage de A à Z.

Pour l'instant, je tâtonne avec mes connaissances actuelles et quand ça va vraiment pas, à force, je ne vois pas tout, je fais appel à de nouveaux yeux !

C'est qui est le cas actuellement !
A force de changements, d'améliorations, je m'emmêle les pinceaux, parce qu'on me dit que toutes les pages doivent être en PHP, puis que ça gêne en rien si certaines sont en HTML avec l'affichage de pages en PHP, comment savoir quelle est la meilleure solution .

A force d'essayer les codes que l'on me donne, bien-sûr, y toujours des erreurs, et quand je demande pourquoi, voilà qu'on me donne un autre code, soi-disant, parce qu'il serait meilleur, mais il y a toujours des erreurs !

Avatar du membre
Mammouth du PHP | 1490 Messages

30 janv. 2023, 19:07

Du code PHP ne peut pas s’exécuter dans un fichier ".html".

Tu peux cependant utiliser la réécriture d'URL si tu souhaite que ton site soit avec des pages .html à la place de l'extension .php (mais aucun intérêt si ce n'est faire croire que les pages sont en HTML pur avec du contenu statique).

Avatar du membre
Eléphanteau du PHP | 49 Messages

30 janv. 2023, 19:22

J'ai dû mal m'expliqué !
C'est dans le php, surtout l'index (header, nav, main, footer) que j'appelle des fichier html.
C'est juste que je pourrais les renommés ".php", mais dans l'immédiat, je n'en vois pas la nécessité.

Toi qui est bon développeur, quand j'appelle depuis index.php des fichier html, est-ce ces derniers doivent impérativement contenir un "<!DOCTYPE html>" ?
Je te demande ça car, il y en a qui disent que oui, d'autres non, et d'autres encore qui rajoute des truc dans le fichier, comme le style ou un petit JS !

Mammouth du PHP | 2664 Messages

30 janv. 2023, 19:29

https://validator.w3.org/ permet de savoir si le résultat final de l'exécution du php produit un code html correct ou non.

Avatar du membre
Eléphanteau du PHP | 49 Messages

30 janv. 2023, 19:42

J'ai compris pour W3, d'abord, c'est en anglais et c'est pas mon truc.
Même si je peux valider une page html, pour moi, c'est difficile à décrypter le résultat ! J'arrive à choper quelques mots par ci par là, mais assez pour savoir ce qui est bon ou pas !

Avatar du membre
Eléphanteau du PHP | 49 Messages

30 janv. 2023, 20:05

Du code PHP ne peut pas s’exécuter dans un fichier ".html".

Tu peux cependant utiliser la réécriture d'URL si tu souhaite que ton site soit avec des pages .html à la place de l'extension .php (mais aucun intérêt si ce n'est faire croire que les pages sont en HTML pur avec du contenu statique).
T'as raison, aucun intérêt et de toute manière, ce serait trop long à mettre en place ! :lol: :wink:

Avatar du membre
Mammouth du PHP | 1490 Messages

30 janv. 2023, 21:08

J'ai dû mal m'expliqué !
C'est dans le php, surtout l'index (header, nav, main, footer) que j'appelle des fichier html.
C'est juste que je pourrais les renommés ".php", mais dans l'immédiat, je n'en vois pas la nécessité.

Toi qui est bon développeur, quand j'appelle depuis index.php des fichier html, est-ce ces derniers doivent impérativement contenir un "<!DOCTYPE html>" ?
Je te demande ça car, il y en a qui disent que oui, d'autres non, et d'autres encore qui rajoute des truc dans le fichier, comme le style ou un petit JS !
Tu peux inclure des fichiers .html avec include de PHP, à toi de voir où tu place ton <!DOCTYPE> (obligatoire pour un document correct).

Pour le squelette d'une page HTML5, je te propose mon générateur de page HTML5

Avatar du membre
Eléphanteau du PHP | 49 Messages

31 janv. 2023, 08:25

Bonjour,

Je te remercie two3d de m'avoir donné ce lien, très bien fait d'ailleurs, mais j'avais fait valider une page html par W3 qui m'a préconisé de mettre
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
" après le "
<!DOCTYPE html>
C'est pas trop grave je pense, parce que sans, ça marche !
Enfin, ce n'est pas ce qui est le plus important pour moi car je suis plus à l'aise en html, où j'ai fait mes armes en 1994 avec https://www.webexpert.fr/, gratuit à cette époque, mais ai trop négligé le php et le JS, je le regrette maintenant.

Mais comme ça évolue tellement vite que j'ai du mal à suivre ! :cry:

Je me suis penché plus longuement sur ton site "https://www.c2script.com/", très utile pour le débutant, mais j'ai pas trop bien compris les prix bas que tu pratiques pour le site e-commerce et le site de rencontre !
Vu le travail apporté, par rapport à une agence, c'est donné, où presque !
En tout cas, toutes mes félicitations pour ce beau travail !

En tout cas, pour http://qi98.free.fr/site-temporaire/, je vais changer le code et essayer de placer le tien aux endroits nécessaire... si ça marche !
Dans l'état actuel, j'ai du mal à afficher la page d'accueil et lorsque je clique un lien, voilà ce qui se passe.
http://qi98.free.fr/temp/01.jpg
http://qi98.free.fr/temp/02.jpg

Là, j'aurais besoin de ton expérience.

Avant de mettre en place votre code, voudrez-tu me dire pourquoi à chaque lancement, j'ai une erreur. Je fais des essais en local.
Warning: Undefined array key "page" in C:\laragon\www\z___Copie-Sementic-Element-Html\index.php on line 64
pour ligne 64 qui se trouve dans le "conteneur/section".
<?php $page = $_GET['page']; ?>
Merci de ton aide.

Avatar du membre
Mammouth du PHP | 1606 Messages

31 janv. 2023, 11:57

Tout simplement, le tableau $_GET n'a pas de clé page. Arrive lorsque tu n'as pas de paramètre page dans l'url.

A partir de php 7 tu peux faire un
$page = $_GET['page'] ?? 'non de la page par défaut';
Qui équivaut à
$page = isset($_GET['page']) ? $_GET['page'] : 'non de la page par défaut';

PS : tu n'as pas besoin de remettre les doctype et compagnie dans toutes tes pages étant donné que tout cela est déjà présent dans ton index où tu inclus les autres pages.

Pour le html ou php c'est pas compliqué, tu veux mettre du php dans le fichier => .php, tu n'as pas de php dans le fichier => .html.
Mais le fait de faire que des fichiers .php reste plus simple, tu n'as pas à réfléchir et si jamais à un moment tu veux rajouter du php dans ces fichiers html, tu n'as pas besoin de modifier l'extension ni l'include.
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1490 Messages

31 janv. 2023, 12:10

Merci.

Je comprends pas tes images et ce que tu veux me dire...

Supposons que tu souhaite me dire : Pourquoi il ya "Accueil" d'afficher sur l'image 1, quand je clic sur le menu "Accueil" ?

La réponse est ce bout de code dans ton index.php :
  <h1>
    <?php echo htmlspecialchars($informations_page["titre"]);?>
  </h1>

Avatar du membre
Eléphanteau du PHP | 49 Messages

31 janv. 2023, 12:34

Oui two3d , c'est la question que j'ai posée.
Si tu me dis que ça vient de ce petit bout de code dans l'index, je fais le supprimer, on verra bien.

Pour l'instant, j'ai enlevé tout les code pour ne garder que le squelette du site afin de voir les erreurs avec W3, et y en a beaucoup malheureusement !

Je vais commencer par corriger ces erreurs et remettrais ensuite le code.

jlb59430