OVH Cloud OVH Cloud

Contourner fopen distant

12 réponses
Avatar
Julien
Bonjour,

Je voulais faire un fopen sur une page pour générer un envoi de mail HTML
contenant la page facture

<?
$fic = fopen( "http://www.toto.com/facture.php?id=100", "r" );

echo fread( $fic, 100000 );
?>

Cela ne marche pas sur mon serveur (la page moulinne et ne sort rien ) et
mon infogéreur me répond cela :

"Le serveur ne peut pas faire de get http sur lui-même en utilisant son
adresse externe. Le Firewall interdit une requête de sortir pour
'réentrer'."

Y a t-il un moyen de contourner cela ?

j+

10 réponses

1 2
Avatar
Mathieu Goutelle
Bonjour,

Dans l'article <ce8ica$5b2$, Julien a écrit:
Y a t-il un moyen de contourner cela ?


Vous pouvez essayer ça :

<?
$fic = fopen( "http://localhost/facture.php?id0", "r" );

echo fread( $fic, 100000 );
?>

Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - <URL:http://webperso.easyconnect.fr/goutelle/>

Avatar
Paul Delannoy
Mathieu Goutelle a écrit:
Bonjour,

Dans l'article <ce8ica$5b2$, Julien a écrit:

Y a t-il un moyen de contourner cela ?



Vous pouvez essayer ça :

<?
$fic = fopen( "http://localhost/facture.php?id0", "r" );

echo fread( $fic, 100000 );
?>



Ca risque d'etre le meme resultat... c'est lusage de http qui est en cause.


Avatar
Thierry SCHMIT
bonjour,

peut être
$fic = fopen( "http://127.0.0.1/facture.php?id0", "r" );
ou plus surement
$fic = fopen( "http://127.0.0.1/$path/facture.php?id0", "r" );

où $path comporterait le chemin relatif de facture.php par rapport
au homedir du serveur http.
Avatar
Julien
Non marche pas, j' ai de plus essayer avec l' adresse IP privé de la
plateforme : meme resultat la page moulinne et ne sort rien.

Tant pis je vais devoir faire autrement.


"Mathieu Goutelle" a écrit dans le message de
news:
Bonjour,

Dans l'article <ce8ica$5b2$, Julien a écrit:
Y a t-il un moyen de contourner cela ?


Vous pouvez essayer ça :

<?
$fic = fopen( "http://localhost/facture.php?id0", "r" );

echo fread( $fic, 100000 );
?>

Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - <URL:http://webperso.easyconnect.fr/goutelle/>



Avatar
John Gallet
Bonjour,

"Le serveur ne peut pas faire de get http sur lui-même en utilisant son
adresse externe. Le Firewall interdit une requête de sortir pour
'réentrer'."


Donc le script appelant et le script appelé sont sur la même machine ou
le même réseau et il est "mal" configuré en termes de routage. Si c'est
sur la même machine, la réponse est simple : include ou require, modulo
include_path. En machine distante, configurer le routage pour qu'il ne
repasse pas par le firewall alors que les deux machines sont sur le même
réseau (à moins que ceci ne soit considéré faille de sécurité).

a++
JG

Avatar
Mathieu Goutelle
Bonjour,

Avant tout chose, je vous conseille la lecture de ce petit document sur
la façon de répondre sur Usenet :
<http://www.giromini.org/usenet-fr/repondre.html>.

Dans l'article <ceb2hs$qh8$, Julien a écrit:
Tant pis je vais devoir faire autrement.


Une solution pourrait être d'inclure ton fichier 'facture.php' et de
jouer un peu avec le mise en cache au niveau du serveur.
Cf. <http://fr2.php.net/manual/fr/function.ob-start.php> et consorts.

Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - <URL:http://webperso.easyconnect.fr/goutelle/>

Avatar
Mathieu Goutelle
Bonjour,

Dans l'article , Paul Delannoy a
écrit:
<?
$fic = fopen( "http://localhost/facture.php?id0", "r" );

echo fread( $fic, 100000 );
?>



Ca risque d'etre le meme resultat... c'est lusage de http qui est en cause.


Normalement, non : les requêtes sur 'localhost' sont interceptées par
l'OS et ne « sortent » jamais sur le réseau. Cela devrait marcher, à
moins que le filtrage soit en place sur la machine elle-même, ce qui
m'étonnerait pour un « vrai hébergeur », ou qu'il y ait un autre détail
de configuration.

Apparemment c'est le cas...

Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - <URL:http://webperso.easyconnect.fr/goutelle/>


Avatar
Julien
Bonjour

"John Gallet" a écrit dans le message de
news:

Donc le script appelant et le script appelé sont sur la même machine ou
le même réseau et il est "mal" configuré en termes de routage. Si c'est
sur la même machine, la réponse est simple : include ou require, modulo
include_path. En machine distante, configurer le routage pour qu'il ne
repasse pas par le firewall alors que les deux machines sont sur le même
réseau (à moins que ceci ne soit considéré faille de sécurité).


Oui le script appelant et le script appelé sont sur la meme machine

J' ai bien essayer :

<?
$idc = 100;
$toto = include( 'facture.php' );
?>

Seulement $toto contient 1, le code resultat de l' include.

Comment stocker le contenu de l' include dans une variable ?

Parce que la finalité est de l' envoyer par mail HTML...

a++


j+

JG


Avatar
- Sebastien -
Julien - Le 30/07/2004
Bonjour

"John Gallet" a écrit dans le message de
news:

J' ai bien essayer :
<?
$idc = 100;
$toto = include( 'facture.php' );
?>

Seulement $toto contient 1, le code resultat de l' include.

Comment stocker le contenu de l' include dans une variable ?


Il faut que le script facture.php envoie le résultat dans une variable
et non pas des ECHO d'affichage.

--
Seb.
Webmaster coste-du-rhone.com
Vente de grands vins des Côtes du Rhône
http://www.coste-du-rhone.com
(alcool, santé, modération toussa...)

Avatar
Taum
Bonjour,
Comment stocker le contenu de l' include dans une variable ?

Parce que la finalité est de l' envoyer par mail HTML...


Vous devriez pouvoir utiliser les fonctions de "bufferisation de sortie"
(à voir ici : http://fr.php.net/manual/fr/ref.outcontrol.php)

Dans votre cas, cela devrait ressembler à :
---
ob_start();

$idc = 100;
$toto = include( 'facture.php' );

$html = ob_get_contents();
ob_end_clean();

// utilisez $html
---

a+

1 2