Récupération de fichier distant

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 : Récupération de fichier distant

par SiMax » 04 janv. 2009, 20:11

J'ai eu un petit bug avec le script :?

Finalement, je vais garder la première idée en la faisant fonctionner :)

Y a-t-il une solution pour juste récupérer le contenu du fichier (en exécutant la variable) sans utiliser d'include ?

par Hywan » 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 :).

par SiMax » 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 :)

par Hywan » 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.

par fab » 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');

par SiMax » 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 :?

par Hywan » 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 ?

par SiMax » 04 janv. 2009, 19:17

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

par fab » 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

par SiMax » 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 :)

par fab » 04 janv. 2009, 19:05

Sur le même serveur.
Pourquoi vouloir éviter un include?

par SiMax » 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 ?

par fab » 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');

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

par fab » 04 janv. 2009, 15:29

Pourrais tu nous montrer le contenu de ton login.php pour être sur qu'on comprenne bien?