Page 1 sur 2

Récupération de fichier distant

Posté : 03 janv. 2009, 19:41
par SiMax
Bonjour à tous,

J'ai un petit problème pour récupérer le contenu d'un fichier PHP. Je souhaite utiliser les variables de mon forum phpBB3. J'ai quelques problèmes d'encodage quand je l'utilise directement alors j'ai eu l'idée de former mon script comme cela :

- Une page login.php qui contient le code de connexion au forum et qui renvoie "0" ou "1" selon que l'utilisateur soit connecté ou non.

- Une page header.php qui correspond au haut de mon site.

La page header.php doit récupérer le contenu de login.php (un "0" ou un "1") grâce au code suivant :
<?php
$log = file_get_contents("login.php");
echo $log;
?>
Le problème c'est que, lorsque l'utilisateur est connecté au forum, quand on accède directement à la page login.php, un "1" apparait (normal) mais lorsque la page est appellée par header.php, c'est un "0" qui apparait.

J'aimerais trouver une solution qui permette de récupérer correctement le contenu de la page.

Merci d'avance pour votre aide :)

Posté : 04 janv. 2009, 15:29
par fab
Pourrais tu nous montrer le contenu de ton login.php pour être sur qu'on comprenne bien?

Posté : 04 janv. 2009, 15:35
par SiMax
login.php :
<?php
define('IN_PHPBB', true);
$phpbb_root_path = '../forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);

if((isset($user->data['is_registered'])) && ($user->data['is_registered'] == 0)) { echo "0"; }
if((isset($user->data['is_registered'])) && ($user->data['is_registered'] == 1)) { echo "1"; }
?>

Posté : 04 janv. 2009, 15:53
par fab
Ok c'est bien ce que je pensais tu fais une mauvaise utilisation de la fonction file_get_contents :
elle retourne le contenu de ton fichier si t'es en local et non le rendu après execution.
Par contre si tu fais un file_get_contents d'un fichier distant tu auras le rendu après execution.

A la place des echo mets des return et fait un
$code = include('login.php');

Posté : 04 janv. 2009, 18:14
par SiMax
Bonjour,

Merci de m'aider :)

Le problème c'est que j'aurais voulu éviter de faire un include. Il n'y a pas d'autre solution ?

Quand vous dites en local, c'est sous easyPHP ou c'est quand c'est sur le même serveur ?

Posté : 04 janv. 2009, 19:05
par fab
Sur le même serveur.
Pourquoi vouloir éviter un include?

Posté : 04 janv. 2009, 19:11
par SiMax
Car en fait la fonction (qui vient de phpBB3) que j'appelle sert à savoir si l'utilisateur est connecté ou non. Le problème est qu'en mettant la fonction comme telle, phpBB3 chamboule tout en encodant en UFT-8 je ne sais comment.

J'ai pensé que cette solution ferait l'affaire :)

Posté : 04 janv. 2009, 19:15
par fab
ta testé au moins ma solution du return et de son stockage par un include ? normalement il ne devrait pas avoir de soucis

Posté : 04 janv. 2009, 19:17
par SiMax
Il y a le même soucis d'encodage car l'include ne fait qu'importer le code PHP :?

Posté : 04 janv. 2009, 19:25
par Hywan
Hey :),

SiMax, j'ai juste rien compris à ton problème.
Reprenons les choses calmement : tu veux importer du code. Pour cela, on utilise les directives du langage include, include_once, require ou encore require_once. Ce ne sont pas des fonctions, mais des directives (ou des instructions), comme exit ou encore echo. Si tu utilises file_get_contents(), ça va te récupérer le contenu du fichier sans l'exécuter (et encore heureux !).

Donc d'après ce que j'ai compris, tu veux le résultat du fichier, donc il faut l'exécuter. Pour ça, on importe le code via un require par exemple. Une fois le code importé, il sera exécuté avec le reste du code pendant sa lecture (pour expliquer que l'exécution se fait après l'importation et pas avant ou pendant).

Maintenant, je ne vois pas le rapport avec la choucroutte (i.e. l'encodage). Peux-tu expliquer ça simplement ?

Posté : 04 janv. 2009, 19:27
par SiMax
Je ne peux pas expliquer vraiment ce qu'il se passe car je ne comprend pas moi même. Simplement, ce code, qui provient de phpBB3, sert à regarder si l'utilisateur est connecté ou non au forum phpBB3.

Le problème est que ce code, quand il est inclus dans une page chamboule l'encodage de celle ci :?

Posté : 04 janv. 2009, 19:34
par fab
Peux-tu stp nous donner la source HTML ( Ctrl + U sous firefox // click droit afficher la source sous IE ) lorsque tu accèdes à la page login.php? Ceci avant de voir si dans les fichiers que tu inclues y en a pas qui envoie des balises HTML.


De plus j'insiste sur le fait que normalement ma méthode d'include devrait t'éviter le problème sauf si des echo se baladent
login.php
<?php
define('IN_PHPBB', true);
$phpbb_root_path = '../forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);

if((isset($user->data['is_registered'])) && ($user->data['is_registered'] == 0)) { return 0; }
if((isset($user->data['is_registered'])) && ($user->data['is_registered'] == 1)) { return 1; }
?>

header.php
$code = include('login.php');

Posté : 04 janv. 2009, 19:37
par Hywan
Sinon il suffit d'utiliser le même encodage que PhpBB3 ? Si c'est l'unicode, je te le conseille.

Posté : 04 janv. 2009, 19:46
par SiMax
Effectivement, ça serait plus simple de passer au même encodage. Ça m'éviterai ces manip :D

Par contre, comment faire ? Mon site est déjà codé en ISO, j'ai une base de donnée déjà enregistrée et phpBB est en UFT-8 :)

Posté : 04 janv. 2009, 19:49
par Hywan
Regarde sur le forum, tu pourrais trouver des choses comme ça : UTF8izer : pour convertir en UTF-8 tous les fichiers ISO d'un dossier dans les contributions :).