probleme variables avec include()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme variables avec include()

par titerm » 09 janv. 2007, 21:04

si tu nous donnais un appercu de l'arborescence exacte,
du resultat de getcwd() et la ligne d'include qui ne fonctionne pas, on pourrait certainement te trouver la réponse. Ton include_path actuel et celui que tu avais sur ton serveur d'origine.

exemple :

Code : Tout sélectionner

Arbo /inc /css /lib/sect1 /lib/sect2 /js /home
l'url appelé est http:/home/index.php, le fichier index.php se trouve dans /home
Le getcwd retourne /sg/dev/www/home/

l'include qui échoue est include(../lib/sect1/lib1.inc)


Avec un énoncé de ce type, il est bien plus facile de répondre précisément.

par zarbrok » 09 janv. 2007, 19:37

salut
j'ai trouvé une solution de bricolage, mais une solution qd meme
je fais des include"http://monsite.com/mapage.php?madonee=$ ... =$variable..."
et ça marche, mais je pense qd meme qu'il doit y avoir une solution plus simpe

par zarbrok » 05 janv. 2007, 23:05

tout d'abord merci de votre aide, ça réconforte ...
sinon, donc comme je l'ai dit précedement, je déplace un site contenant pas moins de 2 ou 300 pages interconnectées entre elles par des tats d'inclusions de toutes sortes.
mes employeurs etant des gens pressés, je n'ai pas vraiment le temps de reconstruire le site à ma manière.
le site marchait donc tres bien sur son serveur initial, mais sur ce serveur plesk, tout fonctionne, sauf ça !!!
donc ça fait bien 3 jours que je cherche et je ne vois rien.
merci qd meme

par mojorisin » 05 janv. 2007, 22:08

Salut,
il y a des moyens simple de palier à tous ces soucis :
un fichier de configuration avec quelques constante définies :
fichier : includes/config.inc.php par exemple avec dedans (par exemple) :
define('INC_DIR',dirname(__FILE__));
define('GAUCHE_DIR',INC_DIR.'/../gauche');

Le but étant d'avoir un répertoire de base pour tes inclusions. Ensuite tu inclu s tes fichier relativement à ce répertoire :
// inclusion de la conf
include('includes/config.inc.php');

include(GAUCHE_DIR.'/monScript.inc.php');
include(INC_DIR.'/../autre_rep/autreFichier.php');

Enfin c'est ce que j'utilise personnelement, peut être y a-t-il d'autres méthodes plus pratique.

par titerm » 05 janv. 2007, 20:45

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.

par zarbrok » 05 janv. 2007, 19:40

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 !

par Ajoloca » 05 janv. 2007, 19:33

Ton code est contenu dans une variable, tu dois exécuter cette variable. Regarde du coté de eval().

par zarbrok » 05 janv. 2007, 19:30

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

par Hubert Roksor » 05 janv. 2007, 19:22

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.

par zarbrok » 05 janv. 2007, 19:12

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");?>

par Ajoloca » 05 janv. 2007, 19:06

Re,
Si tu regardes ton premier code, la coloration syntaxique, elle te donne à penser quoi ???

par zarbrok » 05 janv. 2007, 19:03

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

par Ajoloca » 05 janv. 2007, 19:03

Que dire après la réponse de Hubert ?

par Hubert Roksor » 05 janv. 2007, 18:58

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.

par zarbrok » 05 janv. 2007, 18:57



//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>