Page 1 sur 2

probleme variables avec include()

Posté : 05 janv. 2007, 18:39
par zarbrok
bonjour à tous(tes)
je vous expose mon probleme :
j'ai une page (128.php) qui contient des variables .
Je fais un include d'une autre page ne se trouvant pas dans le meme répertoire(../categorie/gauche).
alors voila mon probleme :
si je met un chemin relatif (../categorie/gauche.php) il ne l'inclu pas
si je met un chemin absolue (http://.../categorie/gauche.php) la page est inclue mais elle les variables de la page(128.php) sont vides !!!
je travail sur un serveur dédié plesk en unix !
merci de votre aide

Posté : 05 janv. 2007, 18:42
par Ajoloca
Bonjour,

Surement que ton chemin relatif n'est pas bon.

Posté : 05 janv. 2007, 18:43
par zarbrok
et pourtant si il est bon !!
sinon est ce normal qu'en entrant le chemin absolue les variables ne sont pas récupérées ?

Posté : 05 janv. 2007, 18:46
par Ajoloca
Montre tes deux fichiers.
On pourra voir plus clair. Car aucune des deux choses sont normales.

Posté : 05 janv. 2007, 18:57
par zarbrok


//le code qui génère la page de la page 128.PHP 
$videotext = "
 \$t = \"$t\" ;
\$modele= \"$modele\";
\$img_cat=\"$img_cat\";
\$haut_cat= \"$haut_cat\";
\$largeur_cat= \"$largeur_cat\";
\$url_bouton=\"$url_bouton\";
\$hauteur_bouton= \"$hauteur_bouton\";
\$largeur_bouton= \"$largeur_bouton\";
\$telecharger= \"$telecharger\";
\$macat = \"../\".\"$cat\"; // contient : ../categorie/gauche.php
\$page = \"$page\";
\$nb_cat = \"$nb_cat\";
\$classement= \"$classement\";
\$nb_resultat= \"$nb_resultat\";
include \"http://www.monsite.com/include/dynamisme.php\";
\$separation = \"_\";
\$site = \"http://www.monsite.com\";
include (\"../include/configuration.php\");
include \"../include/fonctions.php\";
include \"../include/conf_mb.php\";
include (\"../t/meta_$t.php\");
echo \"<link href=\"../t/$t.css\" rel=\"stylesheet\" type=\"text/css\">\"

		
include (\"\$macat\");
include (\"http://www.monsite.com/include/pied.php\");
";
et la page gauche.php
<table border="0" align="left">
  <tr>
    <td>&nbsp;</td>
    <td><div align="left"><?php include ("$page"); ?></div></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td valign="top"><?php include( "http://www.monsite.com/categorie.php"); ?></td>
    <td align="left" valign="top"><?php
include ("../include/configuration.php");

$nb_avant = 4; // nombre de page avant la page courante 
$nb_apres = 6; // nombre de page après la page courante 
$premiere = 1; // aficher le lien "première page" (1 ou 0) 
$derniere = 0; // afficher le lien "dernière page" (1 ou 0) 
$courant = empty($_GET['page']) ? 1 : $_GET['page']; // page 
$start = ($courant - 1) * $nb_resultat; // start (requete mysql) 
$cont_filmx = mysql_query("SELECT count(id) FROM videos WHERE `id_emission` LIKE '%$cat%' AND valide='1' ORDER BY id ASC");
$ret_film_x = mysql_fetch_array($cont_filmx); 
$nb_results = $ret_film_x[0];
$nb_pages = ceil($nb_results / $nb_resultat); 
// nombre de pages avant 
$avant = $courant > ($nb_avant + 1) ? $nb_avant : $courant - 1; 
// nombre de pages après 
$apres = $courant <= $nb_pages - $nb_apres ? $nb_apres : $nb_pages - $courant; ?>
<?php 
$sql = "SELECT id, titre_fr, des_fr, poids, duree, img FROM videos WHERE `id_emission` LIKE '%$cat%' AND valide='1' ORDER BY $classement DESC LIMIT $start, $nb_resultat";
$result = mysql_query($sql);
echo "cat:".$cat ;
echo "classement:".$classement ;
echo "result:".$nb_resultat ;

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$id= $row["id"]; ?> 
<?php include "$adress_mod$modele$fin"; ?><?php 
}

mysql_free_result($result);

?>
</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><div align="left"><?php include ("$page"); ?></div></td>
    <td>&nbsp;</td>
  </tr>
</table>

Posté : 05 janv. 2007, 18:58
par Hubert Roksor
Attention, je te conseille de relire le manuel concernant include (qui n'est d'ailleurs pas une fonction). Pour te faire une idée simple, c'est comme si tu remplaçais ton "include" par du code PHP. Ce ne sont pas des frames, ce n'est pas une méthode magique qui assemble des bouts de pages entre eux. C'est comme si tu tapais le contenu du fichier include directement dans le fichier en cours.

Si tu utilise une URL extérieure ("http://...") alors c'est comme si tu faisais Affichage > Voir le source et que tu copiais/collais le HTML dans ton script PHP. En clair, ce n'est pas du PHP, tu ne transmets aucune variables de l'un vers l'autre. Donc, jamais jamais jamais d'include sur une URL autre que locale.

Posté : 05 janv. 2007, 19:03
par Ajoloca
Que dire après la réponse de Hubert ?

Posté : 05 janv. 2007, 19:03
par zarbrok
salut
merci pour ta remarque, mais je n'utilise aucune url exterieur à mon site
c d'ailleur un peu le sens de ma question, si le fait d'écrire une url en absolue et considéré comme une url exterieur ?
et je ne sais pas non plus pourquoi en indicant le chemin relatif de cet url, ça ne marche pas alors que les autres marchent tres bien

Posté : 05 janv. 2007, 19:06
par Ajoloca
Re,
Si tu regardes ton premier code, la coloration syntaxique, elle te donne à penser quoi ???

Posté : 05 janv. 2007, 19:12
par zarbrok
je vous avez la variable qui contenait le code à générer pour créer 128.php
donc la je vous met le code de la page ainsi créer 128.php

Code : Tout sélectionner

<?php $t = "128"; $modele= "1"; $img_cat=""; $haut_cat= ""; $largeur_cat= ""; $url_bouton=""; $hauteur_bouton= ""; $largeur_bouton= ""; $telecharger= ""; $macat = "categorie/gauche.php"; $page = "page.php"; $nb_cat = "6"; $classement= "date_enr"; $nb_resultat= "5"; include "../include/dynamisme.php"; $separation = "_"; $site = "http://www.monsite.com"; include ("../include/configuration.php"); include "../include/fonctions.php"; include "../include/conf_mb.php"; ?> <?php include ("../t/meta_128.php");?> <link href="../t/128.css" rel="stylesheet" type="text/css"> <?php include ("../"."$macat");?> <?php include ("http://www.monsite.com/include/pied.php");?>

Posté : 05 janv. 2007, 19:22
par Hubert Roksor
si le fait d'écrire une url en absolue et considéré comme une url exterieur ?
Ça n'est peut-être pas évident si tu débutes (PS: il y a un forum "Débuter en PHP", celui-ci est réservé aux problèmes propres à PHP5) mais tout se qui se trouve avant "://" est le protocole (sous-entendu, "de communication"). Le système de fichiers n'est pas réellement un protocole, mais pour des besoins pratiques on dit que c'est "file". Tout le reste est considéré comme extérieur, "http", "ftp", etc...

Voici quelques exemples d'URL:

Code : Tout sélectionner

// locales, relatives fichier.php ../fichier.php // locale, absolue /var/www/fichier.php (dans PHP) file:///var/www/fichier.php (dans PHP ou un navigateur... auquel cas tu accèdes aux fichiers locaux de l'utilisateur, ce qui est généralement interdit pour des raisons de sécurité) // extérieure, absolue http://www.example.com/fichier.php
Pour résumer, si l'URL commence par un protocole autre que "file" alors c'est extérieur.

Posté : 05 janv. 2007, 19:30
par zarbrok
merci pour ces explications ;)
mais que me conseilles tu d'utiliser ?
car si je tape include ("../categorie/gauche.php") qui est le bon chemin (je suis pas fou tout de meme) le include ne marche pas du tout

Posté : 05 janv. 2007, 19:33
par Ajoloca
Ton code est contenu dans une variable, tu dois exécuter cette variable. Regarde du coté de eval().

Posté : 05 janv. 2007, 19:40
par zarbrok
je vois bien ce que tu essais de me dire, mais on m'a demandé de déplacer un site qui marche nikel d'un serveur vers un serveur dédié, et la ça ne marche plus...
le code etait tout à fait valide je ne comprends vraiment pas !

Posté : 05 janv. 2007, 20:45
par titerm
un petit echo getcwd() te permettra d'etre sur que ton chemin relatif est correcte par apport a ton rep courant.
Ensuite, un is_readable($filename)) t'assurera que le fichier est bien lisible pour le serveur http qui fait tourner ton php.