Lire les variables d'un autre fichier PHP, sans l'inclure

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !

Modérateur : Asumbaa

Nicosmos
Iguane
Messages : 633
Inscription : 20 août 2005, 14:17

Lire les variables d'un autre fichier PHP, sans l'inclure

Message par Nicosmos » 19 févr. 2010, 23:15

Bonjour,

Juste une question. Je voudrais lire depuis 1.php une variable (ou une constante plutôt) définie dans un fichier 2.php . Mais je ne veux pas utiliser include, vu que 2.php possède aussi du contenu (qui ne doit pas apparaître là sur 1.php, c'est juste les données de la constante qui m'intéresse ici).

Est-il possible de juste "inclure les variables", sans insérer et afficher pour autant le fichier en entier ? :)

(en réalité, 2.php est inclu plus bas, mais j'ai besoin d'accéder à une de ses variables avant son inclusion)

Merci ! :)
Nico.

Avatar de l’utilisateur
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51
Localisation : Le frigo scandinave
Contact :

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par calimo » 20 févr. 2010, 10:05

La solution est d'avoir un fichier 3.php dans lequel sont définies ces variables / constantes, et de l'appeler (include) au début de 1.php et 2.php…

Nicosmos
Iguane
Messages : 633
Inscription : 20 août 2005, 14:17

Ave

Message par Nicosmos » 20 févr. 2010, 13:16

Mmh, merci, mais non, dans ce cas, ça perd l'intérêt que je cherchais. J'explique plus en détail la situation. :)

En réalité, 2.php n'a pas besoin lui-même de la variable qu'il contient. Seul 1.php s'en servira.
2.php est un contenu, 1.php est la structure du site (avec le <head>, le titre principal, la navigation, tout ça).
Et en fait, 2.php peut représenter n'importe laquelle des pages de contenus. Il y en a plusieurs.

L'idée, c'était que ceux qui mettent à jour le contenu puissent simplement spécifier un nom de page directement dans le fichier de la page correspondante. Avec un <?php $titre="Titre de la page" ?> dans chacun des fichiers.

Hors, dans le template 1.php, j'ai besoin du titre de la page avant l'inclusion du contenu. Par exemple pour compléter la balise <title>. Après, je vois comment faire avec un autre fichier contenant tous les titres de pages associés à leurs id, mais c'est pas l'idée. Pour faciliter la tâche des rédacteurs et mainteneurs, il faudrait pouvoir spécifier le titre de la page directement dans le fichier du contenu de la page. :P

C'est temporaire, juste trouver une petite solutions simple qui fait ça, le temps de trouver le temps pour avoir le temps de passer tout vers un petit CMS. :wink:

Merci :)
Nico.

Avatar de l’utilisateur
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51
Localisation : Le frigo scandinave
Contact :

Re: Ave

Message par calimo » 20 févr. 2010, 14:58

Nicosmos a écrit :En réalité, 2.php n'a pas besoin lui-même de la variable qu'il contient. Seul 1.php s'en servira.
Alors pourquoi ne pas la mettre dans 1.php ? Pas sûr de bien saisir ton problème :|
La situation serait probablement plus claire si tu mettais des titres plus explicites à tes fichiers. Par exemple header.php, skeleton.php, footer.php, accueil.php, pageblabla.php, variablesGlobales.php, … Tu arriverais probablement plus facilement à cibler ce que fait chaque fichier et donc à mettre chaque chose dans le bon.

À part ça, et sans avoir vraiment compris ce que tu fais ou veux faire, je vois déjà la tour posée sur un marécage. Le marécage, c'est ce que tu as mis en place lorsque tu n'avais qu'une page ou deux à gérer et que des fondations peu robustes suffisaient. Mais ce n'est plus le cas. Tu y gagnerais probablement à n'avoir qu'une seule page "squelette" que tu appellerais avec le nom de la page comme argument (type squelette.php?page=accueil ou squelette.php?page=blabla), squelette qui se chargerait d'inclure les bons entêtes et pieds de page et d'aller chercher le contenu dans une base de donnée structurée… un CMS en somme :wink:

Nicosmos
Iguane
Messages : 633
Inscription : 20 août 2005, 14:17

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par Nicosmos » 20 févr. 2010, 18:42

En fait, 1.php et 2.php était juste pour l'exemple vague du premier message. La page 1.php, c'est index.php. C'est le squelette.
2.php c'est n'importe quelle page de contenu (qui est différent selon la variable $page dans index.php). Donc il y a bien des index.php?page=trucs. :)
Et la structure du site, je n'en suis pas à l'origine, je fais qu'apporter des modifications à ce qui a déjà été fait.

Les rédacteurs/mainteneurs ne touchent que les fichiers de contenus, qui sont donc appelés dans index.php selon la variable page. Le problème, c'est notamment pour le <title> de la page. Ce serait possible de faire une liste de toutes les pages et de leurs titres, genre « si $page='machin' alors $titre='Le titre de la page Machin' ». Et après faire un echo de $titre là où on en a besoin, donc dans <title> par exemple. :P

Mais c'est pas très intéressant du point de vue du contributeur/rédacteur. Il faut maintenir la liste de toutes les pages et de leurs titres. Alors qu'un simple et direct $titre='Titre de la page' en haut du fichier de contenu direct serait beaucoup plus simple. Je veux créer un nouvelle page, je créé le fichier, je met la variable titre dedans avant le contenu, et c'est joué. :)

Pas besoin d'aller ajouter la page et son titre dans une liste contenu dans un autre fichier, qu'il faudra que je le télécharge depuis le FTP pour mettre à jour. Et si un autre contributeur fait aussi de nouvelles pages de son côté en même temps et qu'il les téléverse après, les noms des pages de miens sont perdus. C'est pas pratique. :|

Et le problème, c'est que le <title> est avant l'include, et n'accède donc pas à la variable. D'où la question de savoir si on pouvait juste 'importer' le $titre du contenu correspondant en $page avant même qu'il ne soit inclu.

De toute façon, on passera tout sur un petit CMS comme GetSimple ou PluXml ou je ne sais pas à terme. Mais pas le temps de tout réadapter maintenant, donc je cherche une solution super simple pour gérer les titres de pages plus ou moins comme ça. :wink:

Avatar de l’utilisateur
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51
Localisation : Le frigo scandinave
Contact :

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par calimo » 20 févr. 2010, 19:26

En perl, il y a une syntaxe pour définir des variables :

Code : Tout sélectionner

$contenu = <<'EOL';
      <p>Ici on peut entrer tout le contenu qu'on veut !</p>
 EOL
Tu peux entrer tout ce que tu veux sans te soucier entre ; et EOL (évidemment il ne faut pas que la page contienne "EOL", mais si c'est le cas tu peux mettre ce que tu veux à la place). Ce type de syntaxe te permettrait de mettre ton contenu de 2.php dans une variable et de ne l'inclure qu'après lecture de 2.php dans ton 1.php. Mais je ne sais pas si une syntaxe similaire existe en php… peut-être un truc du genre $contenu = ?> <p>le contenu</p><?php ; ? Pas sûr :roll:

Nicosmos
Iguane
Messages : 633
Inscription : 20 août 2005, 14:17

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par Nicosmos » 20 févr. 2010, 19:44

$contenu = ?> <p>le contenu</p><?php ; ?
Ah oui, un truc de ce genre, ça peut être pas mal. :) Si c'est possible de mettre un gros bout de code HTML avec plein de balises dans une simple variable ... Et de tout réaficher ensuite avec un simple echo. Je vais tester. :)

Bon, ça ajouterait un <?php ; ?> en bas de chaque page de contenu à ne surtout pas supprimer. :? Mais c'est jouable.

Avatar de l’utilisateur
Asumbaa
Tyrannosaurus Rex
Messages : 2411
Inscription : 08 déc. 2004, 20:07
Localisation : Paris
Contact :

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par Asumbaa » 21 févr. 2010, 12:38

Salut,

Tu pourrais aussi lire le fichier (sans l'inclure) pour récupérer le titre au moment où tu en as besoin, et puis l'inclure au moment où tu dois mettre le contenu. À voir.

Avatar de l’utilisateur
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51
Localisation : Le frigo scandinave
Contact :

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par calimo » 21 févr. 2010, 13:54

Selon http://www.php.net/manual/en/language.variables.php la syntaxe est plutôt comme ceci :

Code : Tout sélectionner

<?php
  $contenu = <<<END
    <p class="test">le contenu</p>
END;
?>
donc très proche de ce que permet perl. Tu peux mettre tout ce que tu veux dans le bloc, sauf une ligne qui commence par END : ça devrait être jouable. Et au pire tu remplace END par ce que tu veux :wink:

Nicosmos
Iguane
Messages : 633
Inscription : 20 août 2005, 14:17

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par Nicosmos » 21 févr. 2010, 14:09

Asumbaa a écrit :Tu pourrais aussi lire le fichier (sans l'inclure) pour récupérer le titre au moment où tu en as besoin
Ah oui, c'est justement ce que je cherchais au début ! Pouvoir lire le fichier sans l'inclure. On fait comment ? :)
calimo a écrit :Selon http://www.php.net/manual/en/language.variables.php la syntaxe est plutôt comme ceci :

Code : Tout sélectionner

<?php
  $contenu = <<<END
    <p class="test">le contenu</p>
END;
?>
donc très proche de ce que permet perl. Tu peux mettre tout ce que tu veux dans le bloc, sauf une ligne qui commence par END : ça devrait être jouable. Et au pire tu remplace END par ce que tu veux :wink:
Hé, c'est bien ça :) Je vais tester.

Avatar de l’utilisateur
Asumbaa
Tyrannosaurus Rex
Messages : 2411
Inscription : 08 déc. 2004, 20:07
Localisation : Paris
Contact :

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par Asumbaa » 22 févr. 2010, 10:39

Nicosmos a écrit :
Asumbaa a écrit :Tu pourrais aussi lire le fichier (sans l'inclure) pour récupérer le titre au moment où tu en as besoin
Ah oui, c'est justement ce que je cherchais au début ! Pouvoir lire le fichier sans l'inclure. On fait comment ? :)
On fait avec les fonctions de file ;-)

Avatar de l’utilisateur
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51
Localisation : Le frigo scandinave
Contact :

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par calimo » 22 févr. 2010, 17:10

Asumbaa a écrit :On fait avec les fonctions de file ;-)
Sauf que là tu lis un fichier, mais tu ne l'interprète pas. Tu n'as donc pas accès aux éventuelles variables qu'il pourrait contenir, à moins de le parser (et donc probablement d'inclure le code !) :|
La solution serait d'utiliser un format simple, du type la première ligne pour le titre. Tu ne lirais que la première ligne, mais alors là tu te retrouves avec quelque chose de vraiment pas robuste.

Avatar de l’utilisateur
Asumbaa
Tyrannosaurus Rex
Messages : 2411
Inscription : 08 déc. 2004, 20:07
Localisation : Paris
Contact :

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par Asumbaa » 22 févr. 2010, 17:50

Tout à fait.
Cela dépendra donc du besoin exact et des garde-fous existant à la rédaction des fichiers de contenu.

Avatar de l’utilisateur
lpgc
Lézard à collerette
Messages : 259
Inscription : 16 juil. 2006, 01:02
Localisation : Bruxelles - Belgique
Contact :

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par lpgc » 10 mars 2010, 21:24

... pt'être faire un truc dans le style ...

idxpage.php

Code : Tout sélectionner

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?php
	include "contenu.php";
	echo "<title>$wtitle</title>";
?>
</head>
<?php
	include "contenu.php";
?>
</html>
contenu.php

Code : Tout sélectionner

<?php
if (!isset($wtitle))
{
	$wtitle="Page avec contenu réel";
} else {
?>
<body>
Le contenu
</body>
<?php
}
?>
test : http://www.dvdlib.be/test/idxpage.php

Avatar de l’utilisateur
Zefling
Tyrannosaurus Rex
Messages : 2576
Inscription : 21 déc. 2004, 03:45
Localisation : France - 63
Contact :

Re: Lire les variables d'un autre fichier PHP, sans l'inclure

Message par Zefling » 20 mars 2010, 19:07

Pourquoi pas utiliser la programmation Objet ;)

Parce que sinon il faut récupérer le contenue, virer tout ce qui est fonction et faire un eval dessus (mais c'est un peu grados).

Perso, j'essaie de ne pas avoir un seul bout de HTML dans mon code. :oops:
Mon blog de dév web ― Thème pour le forum Geckozone ― Le clavier Latin-9 fr sous Windows ― Raccourcis clavier pour Firefox
Debian 8 KDE avec Firefox & Nightly

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité