Include dans un tableau Array ?

hakeem69 Messages postés 30 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 7 mai 2009 - 31 janv. 2008 à 16:33
damsterdamer Messages postés 15 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 25 septembre 2009 - 6 juin 2009 à 16:06
Bonjour à tous




<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 






Bon je ne vais pas vous la faire : ‘’oui, dsl mais je suis débuant etc... ‘’ car de toute façon vous allez le remarquez vous-même, en effet j’ai ouvert ma première balise PHP il y a quelques semaines.






 






Mon problème se situe au niveau d’un tableau, pour mon  job l’objectif est de compléter / modifier un tableau par des personnes non avertis en programmation (dont moi lol).





Et j’ai donc effectué ce petit script de test :






 






FICHIER.TXT (que mes collègues pourront éditer) :







'google'=>'http://www.google.fr/' , 'Jeux Vidéo'=>'http://www.jeuxvideo.com/'






 






FICHIER.PHP :







<?php



$fixe = array ( ?><?php include(‘FICHIER.TXT’); ?><? );





reset($fixe);





while (list($nom,$lien) = each($fixe))





{echo "$nom
";}






 ?>






Mais voila la vie ne serait pas assez belle si tout marchait du 1ere coup alors je vous demande si il est possible d’inclure un include d’un ficghier TXT dans mon tableau ?





Et sinon quelle solution aurai-je ?





A noter que lorsqu’on remplace le contenu du fichier txt dans le tableau, ça fonctionne nickel !.






 






Merci d’avance pour votre aide !

12 réponses

sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
31 janv. 2008 à 16:44
salut

il me semble que include devrait appeler une page php
pour lire un.txt en boucle, vois fopen, fgets
0
bcmfr Messages postés 137 Date d'inscription jeudi 18 juillet 2002 Statut Membre Dernière intervention 20 novembre 2016
31 janv. 2008 à 17:06
Slt
comme le dit sidf, il faut ouvrir le fichier pour pouvoir le lire.
regarde cet article pas mal fait pour utiliser des fichiers
http://www.phpdebutant.org/article58.php
@+
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
31 janv. 2008 à 18:25
il faut utiliser la fonction eval de php !
http://de3.php.net/manual/fr/function.eval.php (j'adore cette fonction Hein malalammmmmm )

Afin d executer ton truc...
FICHIER.TXT
['google']=>'http://www.google.fr/' , ['Jeux Vidéo']=>'http://www.jeuxvideo.com/'

$sContent=file_get_contents('./FICHIER.TXT');
eval("$assSites=array($sContent);");
print_r($assSites);

//ya ptet des erreurs mais j ecris ça sans editeur et avant de partir du taf

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
hakeem69 Messages postés 30 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 7 mai 2009
31 janv. 2008 à 19:36
RE,

Sidf => je ne pense pas que la foction include soit
réservée au page PHP puisque ca marche très bien avec de l’HTLM etmême avec le
fichier TXT, par exemple :

Fichier.txt :
Bla bla bla !

Fichier.php :
<?php include ‘Fichier.txt’?>

Dans ce cas la page php affichera bien Bla bla bla !

Le souci dans mon script c’est qu’a mon avis, ‘google.. etc..
est reconnue comme une chaîne de caractère je pense.

Bcmfr => Je n’y arrive pas non plus comme ca, j’ai essayé :

<?php

$fichier = "fichier.txt";

$lire = fopen ($fichier, 'r');

$var = fgets ($lire, 255);

echo $var;

// la c’est parfait, le contenu du fichier TXT s’affiche !
mais en faisant ce qui suit :

$fixe = array($var);

reset($fixe);

while
(list($f,$g) = each($fixe))

{echo
"$f
";}

// la ce ne fonctionne plus !
?>

Personne à une idée pour simplement inclure le contenu de
mon fichier TXT dans le tableau ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 janv. 2008 à 19:51
Hello,

c'est surtout que la façon de l'écrire est pourrie ;-)

$fixe = explode(',', file_get_contents('FICHIER.TXT'));
0
hakeem69 Messages postés 30 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 7 mai 2009
1 févr. 2008 à 19:46
Bonjour,

Je m’excuse de ne pas m’être manifesté avant mais j’ai été
pris par le boulot.
C’est très gentil à vous, surtout à toi malalam qui souligne
cordialement que ma façon d’écrire est pourris.
Cela dit, je me vois obligé de te retourner le compliment avec
autant de cordialité car avec ta façon ça ne marche pas non plus.



Après quelques recherches, je pense m’orienter vers une
solution PHP / XML, mais si vous trouvez la solution pour l’enrichissement
commun, je suis preneur.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 févr. 2008 à 20:36
Ahem.
Donc déjà, tu n'auras visiblement pas remarqué mon ";-)" enfin de phrase. Aucune importance, très sincèrement.
FICHIER.TXT (que mes collègues pourront éditer) :

'google'=>'http://www.google.fr/' , 'Jeux Vidéo'=>'http://www.jeuxvideo.com/'

 

FICHIER.PHP :

<?php

$fixe = array ( ?><?php include('FICHIER.TXT'); ?><? );

reset($fixe);

while (list($nom,$lien) = each($fixe))

{echo "$nom
";}

 ?>

On reprend :
'google'=>'http://www.google.fr/' , 'Jeux Vidéo'=>'http://www.jeuxvideo.com/'
ça, c'est un hash. Chaque élément est séparé par une virgule.
explode(',', "'google'=>'http://www.google.fr/' , 'Jeux Vidéo'=>'http://www.jeuxvideo.com/'")
un print_r() là_dessus donne bien un tableau.
ce que je n'avais pas noté, c'est que tu voulais avoir la paire clef => valeur.
Donc :
<?php
function mySplit($sChaine) {
    if(!is_string($sChaine)) {
        throw new Exception('Le paramètre doit être une chaîne');
    }
    $aFinal = array();
    $aEntries = explode(',', $sChaine);
    if(count($aEntries) !== 2) {
        throw new Exception('Problème de format');
    }
    foreach($aEntries as $sEntry) {
        $aTmp = explode('=>', $sEntry);
        $aFinal[$aTmp[0]] = $aTmp[1];
    }
    return $aFinal;
}
$sChaine = "'google'=>'http://www.google.fr/' , 'Jeux Vidéo'=>'http://www.jeuxvideo.com/'";
print_r(mySplit($sChaine));
?>

Maintenant, sur ton code, puisque tu veux (d'ailleurs si tu ne le veux pas, c'est pareil) que j'explique mon commentaire malgré mon clin d'oeil :
reset() sur un tableau que tu n'as pas parcouru est stupide : tu réinitialises un tableau qui vient d'être initialisé.
Mais surtout, tu devrais revoir les fondamentaux de php :
un include inclus un fichier. Certes. Si ce n'est pas du php, le fichier est "affiché" tel quel. C'est de l'output. Et sans header() particulier indiquant à la page ce que devra être son output, ce sera du texte (plain/text).
Maintenant, faisons un array(texte). Que fait on ? On dit explicitement à php de convertir le texte en tableau. Mais comment php peut-il deviner qu'il doit parser ton texte pour faire ce que dans ta tête tu as imaginé qu'il devait faire ? "'bla'=>'toto'", ça n'est qu'une chaîne. Rien d'autre. A aucun moment tu n'as dit à php : attention, c'est un peu comme du php mon truc, donc essaye de l'analyser, ça ressemble à un tableau!! Et même si tu l'avais dit...ça ne fait qu'y ressembler.
?><? : là, faut que tu m'expliques. Tu fermes un tag php pour le réouvrir juste après ? Quand tu veux sortir d'une salle dont la porte ouverte, tu fermes d'abord la porte puis tu la réouvres après ? Sait-on jamais, des fois que ce soit un piège, elle était peut-être, en réalité, fermée, la porte...on n'est jamais trop prudent.
Re sur les tags : <? est déprécié. C'était bon en php3, nettement moins en php4, carrément déconseillé en php5 et surtout avec l'avènement de xml, et on est à l'aube de php6. Ca fait quand même 3 versions de retard si tu veux le justifier.
Et pour finir : les valeurs d'attributs html entre apostrophes, c'était en html4. On en est au xhtml, et là, pas de possibilité de faire autrement : ce sont des guillemets, parce qu'on est à l'ère du xml.

Franchement, les petites erreurs de ton code, je n'en avais rien à faire, c'était une boutade. Mais maintenant, tu as le fond de vérité de ma boutade. Et tu peux me maudire avec raisons, là :-)

Juste : eval() est valable. C'est juste que c'est une fonction :
- dangereuse
- affreusement lente
Lais sinon, la solution est valable :-) De tte manière, toutes les solutions de Teclis sont valables. C'est juste qu'elles sont tjrs dangereuses et affreusement lentes ;-) (et Teclis, lui, notera le clin d'oeil...).
0
hakeem69 Messages postés 30 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 7 mai 2009
1 févr. 2008 à 22:33
Ok merci malalam





Je vais
bosser dans ce sens.





Par contre
tu t’es un peu enflammé la, tu rigolais, je rigolais aussi, tout le monde est
détendu ok ?

Que ton ego
d’Admin ne vienne pas perturber ta perception de l’humour surtout ! <= ça
aussi c’est de l’humour hein !



CDLT, Hakim
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 févr. 2008 à 11:27
Eh bien si j'ai aussi loupé ton humour, j'en suis désolé. La prochaîne fois, fais un signe, histoire que mon ego démesuré d'admin ne s'offusque pas.
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
2 févr. 2008 à 22:23
Note @[auteur/TECLIS01/403016.aspx Teclis01] : Pas besoin de faire un eval ! franchement ! :p
0
damsterdamer Messages postés 15 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 25 septembre 2009
6 juin 2009 à 14:56
Bonjour !
Je me permet de poser une autre question sur ce topic en particulier, car elle s'approche énormément de ce sujet..
J'ai un problème presque similaire, et mes connaissance en PHP étant limitées, j'ai du mal à trouver (et pourtant, vraiment, j'ai cherché... peut-être de travers ?) la solution...

J'ai un fichier "pages_auth.txt" (ou "pages_auth.php", ça donne le même résultat) contenant :
"valeur1","valeur2","valeur3"

Si j'écris :
<?php
$sContent=file_get_contents('./inc/pages_auth.txt');
echo $sContent;
?>

J'obtiens bien "valeur1","valeur2","valeur3" sur ma page.

Mais si je tape :

<?php
$sContent=file_get_contents('./inc/pages_auth.txt');
$arrayPages=array($sContent);
define("STRINGTAB",implode(",",$arrayPages));

function include_secure($p){
  if(file_exists($p.".php")){
    if(in_array($p,explode(",",STRINGTAB))){
      include($p.".php");
      return true;
    }
    else return false;
  }
  else return false;
}
?>

Beh ma fonction ne fonctionne pas, le $arrayPages=array($sContent); pose problème...
Pourtant, $arrayPages="valeur1","valeur2","valeur3"; fonctionne :\

J'imagine que l'erreur est toute bête, j'ai meme essayé le "eval" (qui m'a sorti des erreurs lors de l'interprétation...), j'ai lu le commentaire de Malalam mais non, rien à faire, je saisi pas le soucis...
Dans le commentaire de Malalam, il est dit qu'il faut faire "comprendre" qu'il s'agit de PHP et l'analyser comme tel, sauf que là finalement, est-ce vraiment nécessaire, ça n'est qu'une variable contenant des caractères qui seront interprétés par la suite..

Vraiment, je suis dans le flou :x

Merci d'avance !
0
damsterdamer Messages postés 15 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 25 septembre 2009
6 juin 2009 à 16:06
Bon beh j'ai trouvé une petite solution alternative, mais qui ne me plait guère.. provisoirement ça fera l'affaire, mais si vous trouvez directement comment résoudre mon problème précédent, j'en serais ravi :)

Je poste tout de même mon alternative médiocre :
<?php
function include_secure($p){
  $sContent=file_get_contents('./inc/pages_auth.txt');
  if(file_exists($p.".php")){
    if(strpos($sContent, $p) !== FALSE){
      include($p.".php");
      return true;
    }
    else return false;
  }
  else return false;
}
?>
<code class="php_operator">

Mais alors c'est moche et pas fiable... (quoi qu'avec 
le file_exists, j'ai un sentiment de sécurité qui 
m'envahit sans pour autant être vraiment sûr de 
son efficacité ^^)
Du bricolage maison quoi.

Damien J.
</code>
0
Rejoignez-nous