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+

2 réponses

1 2
Avatar
Paul Delannoy
Julien a écrit:
Bonjour

"John Gallet" a écrit dans le message de
....

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 ?


La difficulté c'est que ce n'est pas le contenu du fichier qui
t'intéresse, mais le 'flux' résultat de son exécution, n'est ce pas ?

Parce que la finalité est de l' envoyer par mail HTML...
Peut être suffit il d'envoyer un mail contenant l'URL de facture.php ?

Ce qui signifie que chaque facture personnalisée est stokée sur le
serveur, en attente.. c'est sans doute assez lourd.

Devant ces deux difficultés, je crois que je ferais ainsi :
le script facture doit être un 'pur PHP', c-à-d commencer par <? php et
se terminer par ?>, tout l'html étant écrit par echo ou print.
Alors, au lieu d'écrire directement ses print, echo, et autres sorties
vers le navigateur, tu les envoie (fwrite) dans un FICHIER nommé, par
ex, "facture".$idc, et tu envoies par mail l'URL de ce fichier.

J'eqça
PAUL

Avatar
Mat Free
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...


Comme ça je pense :

<?

$idc = 100;

ob_start();
include( 'facture.php' );
$toto = ob_get_contents();
ob_end_clean();

?>

--
Mat


1 2