Récupération de fichier distant

Eléphanteau du PHP | 22 Messages

03 janv. 2009, 19:41

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 :)

ViPHP
fab
ViPHP | 2657 Messages

04 janv. 2009, 15:29

Pourrais tu nous montrer le contenu de ton login.php pour être sur qu'on comprenne bien?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 22 Messages

04 janv. 2009, 15:35

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

ViPHP
fab
ViPHP | 2657 Messages

04 janv. 2009, 15:53

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');
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 22 Messages

04 janv. 2009, 18:14

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 ?

ViPHP
fab
ViPHP | 2657 Messages

04 janv. 2009, 19:05

Sur le même serveur.
Pourquoi vouloir éviter un include?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 22 Messages

04 janv. 2009, 19:11

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 :)

ViPHP
fab
ViPHP | 2657 Messages

04 janv. 2009, 19:15

ta testé au moins ma solution du return et de son stockage par un include ? normalement il ne devrait pas avoir de soucis
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 22 Messages

04 janv. 2009, 19:17

Il y a le même soucis d'encodage car l'include ne fait qu'importer le code PHP :?

ViPHP
ViPHP | 4674 Messages

04 janv. 2009, 19:25

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 ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 22 Messages

04 janv. 2009, 19:27

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 :?

ViPHP
fab
ViPHP | 2657 Messages

04 janv. 2009, 19:34

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');
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

ViPHP
ViPHP | 4674 Messages

04 janv. 2009, 19:37

Sinon il suffit d'utiliser le même encodage que PhpBB3 ? Si c'est l'unicode, je te le conseille.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 22 Messages

04 janv. 2009, 19:46

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 :)

ViPHP
ViPHP | 4674 Messages

04 janv. 2009, 19:49

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 :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).