Executer un script PHP a distance

Messages postés
1
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
17 juillet 2006
- - Dernière réponse :  inwebo - 19 août 2010 à 18:54
Bonjour!

J'ai une petite idee en tete, pouvez-vous me dire si elle est possible à réaliser, et comment la faire?

But: Lancer un script PHP par un autre script PHP se trouvant sur un autre serveur.

Explication:
Mon site est heberge chez Free. Mais malheureusement, la function mail() n’est pas activee chez eux. Je pense alors placer un script contenant une function mail() sur un autre serveur et lancer ce script par celui qui se trouve chez Free.

Exemple:
Un script de livre d’or (livredor.php) est place chez Free. Ce script affiche les messages contenus dans la base de donnees, tient compte que tous les champs sont remplis lors d’une nouvelle signature et ajoute la nouvelle entrée a la base de donnee.

Mais je compte utiliser la function mail() pour envoyer un mail de remerciement a la personne qui a signe le livre d’or et un autre mail a moi-meme pour m’alerter qu’un nouveau message a ete ajoute au livre d’or.

Probleme: Comment lancer le script mailer.php place chez Online par le script livredor.php place chez Free ?

Merci Beaucoup pour votre aide!
Afficher la suite 

20/21 réponses

Meilleure réponse
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
1
Merci
Bonjour,

Tu as un moyen très simple de réaliser cela, la fonction "fopen"








fopen
(
"http://www.tonsite.com/script.php"
, 
"r"


);

Seulement, je ne suis pas sûr du fait que cette fonction marche chez free...




Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 186 internautes nous ont dit merci ce mois-ci

Commenter la réponse de pcgpegase
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
1
Merci
tu compte faire quoi avec la fonction fopen pegase?
je comprends pas là ??

-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 186 internautes nous ont dit merci ce mois-ci

Commenter la réponse de davwart
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
0
Merci
Hello.

pour répondre a ta question, il faut comprendre un principe de base de PHP:
le PHP est exécuté coté serveur, il en ressoirt du HTML et ce HTML qui est envoyé au client.

Par conséquent, si tu fais par exemple un include d'un script PHP distant, ça ne marchera pas: tu incluras le HTML généré à partir du PHP distant.

Ce qui serait envisageable, c'est de faire un page php sur free qui prend en parametre (post par exemple) un destinataire, un message et envoie le message au destinataire via le mail() de free.

il te suffirait alors de faire un formulaire qui attaque ta page php distante avec les bns paramètres.

Le risque: que ta page soit utilisée comme relay de spam et que ton compte free soit fermé.

-------------------------------------

Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
Commenter la réponse de davwart
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
0
Merci


fopen
(
"http://www.tonsite.com/script.php"
, 
"r"


);

fopen permet l'éxécution d'un script à distance :) Après je sais pas si cette fonction est active chez free.

le site 1 : site.free.fr/livre.php
le site 2 : site.online.fr/mailer.php

dans ton livre.php une fois la requête d'insertion faite, tu balances un fopen('site.online.fr/mailer.php','r');
Et ca éxécutera le mailer.php du site 2 !

C'est bien ça que tu souhaitais faire ?



Commenter la réponse de pcgpegase
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
0
Merci
Houlà Pcpegase, j'ai bien peur que toi non plus tu n'aies pas compris le principe du langage serveur/client...
et d'une : fopen ne permet pas l'exécution d'un script;
et de deux : même si c'était le cas, tu ne risques pas d'y arriver à distance, pour les raisons qu'évoque Davwart. Surtout pas en http !!

Ctiven : la fonction mail( ) marche chez Free aux dernières nouvelles.
Mais en supposant que non, la solution à ton pb serait tout simplement de faire un script sur ton autre serveur qui reçoit les valeurs "destinataire" et "message" en GET (ou en POST si tu utilises une redirection javascript ave des champs hidden) et envoie le message en fonction de ça. Mais je te préviens, c'est la porte grande ouverte au piratage. Et en plus ça oblige ton visiteur à faire un aller-retour entre les deux sites, même si tu peux faire ça de façon transparente sans qu'il s'en rende compte (redirection immédiate). La seule solution pour utiliser cette méthode en limitant le danger de piratage serait d'utiliser un cryptage à clé, mais bon je pense que tu n'as pas envie d'en arriver là

à+
Commenter la réponse de Evangun
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
1
0
Merci
C'est un concours de troll ?


C'est quoi le "langage serveur/client" ?

"Une redirection javascript avec des champs hidden" ? < Qu'est ce
qui empêche de construire sa requête POST soi-même ? Quel rapport avec
Javascript (aucun navigateur dans l'histoire la... il parle du
traitement je crois) ?

"Et en plus ça oblige ton visiteur à faire un aller-retour entre les
deux sites, même si tu peux faire ça de façon transparente sans qu'il
s'en rende compte (redirection immédiate)" < ah bon ? qu'est ce qui
empêche le site free d'aller réaliser l'opération désirée lui même ? Où
a-t-on besoin d'une redirection ?


Je suis bien d'accord que l'exécution distante d'un script ne se fait
pas comme ca, mais je n'ai pas vraiment l'impression que cette dernière
réponse soit très claire ^^ (autant s'en tenir à celle de davwart héhé)


Cdt,


Pada
Commenter la réponse de cs_PaDa
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
0
Merci
Je viens d'essayer un script avec fopen et bien ça marche parfaitement...
Je viens de m'envoyer un mail avec mon serveur free à partir de mon serveur local simplement en utilisant :

fopen('http://fabseg.free.fr/test.php','r');

Résultat : j'ai bien reçu mon mail !

Donc je sais bien que PHP est un langage serveur, mais je vous le redis encore, fopen permet l'exécution de scripts php à distance à condition que la fonction fopen est activé...

Bye !

PS : Evangun a raison pour la fonction mail() de free, elle fonctionne bien :)
Commenter la réponse de pcgpegase
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
1
0
Merci
Tu n'aurais pas fait un fopen() sur le même site, par curiosité ?

Pouvoir exécuter du code php à distance n'importe où et de n'importe où, ca serait un petit peu la panique ;o)
Commenter la réponse de cs_PaDa
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
0
Merci
Bin non, absolument pas.

Le fopen() permet d'exécuter du code php à distance. Free avait bloquer cette fonction pour justement éviter les problèmes que peut apporter cette fonction, je crois même qu'elle est désactivée sur la plupart des serveurs. Mais essayé la fonction, vous verrez par vous même ! :)

Moi je l'ai testé comme ceci :

// Serveur local => test.php
<?php
fopen('http://fabseg.free.fr/test.php','r');
?>

// Serveur free => test.php
<?php
$email = "fabseg@gmail.com";
$sujet = "Test d'envoi de mail";
$message = "Hello World !";
$headers = "From: [email=fabseg@free.fr] fabseg@free.fr/email\n";
mail($email,$sujet,$message,$headers);
?>
Commenter la réponse de pcgpegase
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
0
Merci
Et dans ma boite gmail, l'expéditeur est bien Free !
Commenter la réponse de pcgpegase
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
1
0
Merci
Okk ;-)
Si tu veux juste faire ca, d'accord.

Ton fopen() n'a fait qu'ouvrir la page distante, qui a exécuté le code de la page distante.

Ce que disent les gens depuis le début, c'est que si tu places par
exemple ton affectation de $email dans le premier script, et que tu ne
le déclares pas dans le ssecond, ca ne marchera plus. Et qu'il faut le
passer par un GET, un POST, ou autre, de facon à ce que le script
distant le voit.. Je pense qu'il y a eu un quiproquo là =)
PaDa
Commenter la réponse de cs_PaDa
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
1
0
Merci
Bah c'est logique, tu as mis From: pouet@free.fr :-)

Tu t'attendais à quoi ?
PaDa
Commenter la réponse de cs_PaDa
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
0
Merci
Ouep,
Mais ce que [auteurdetail.aspx?ID=822228 ctiven]
voulais faire n'étais pas juste de taper sur son fichier mail.php placé sur online.fr pour que ça envoit un mail après l'insertion de données dans son livre d'or ?

Parce que le contenu de $email, c'est simplement son email à lui pour qu'il sache qu'on a posté sur son livre d'or ? Ou alors j'ai pas tout compris... :x

Mais sinon oui en effet avec fopen on ne peut pas changer la variable $email dynamiquement par rapport au premier script...

Bye !
Commenter la réponse de pcgpegase
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
0
Merci
Re-Bonjour,
effectivement pcpegase, ce que tu dis je n'appelle pas ça exécuter un script à distance, mais c'est évidemment possible, c'est ce dont je parlais...

Pada:
"Une redirection
javascript avec des champs hidden" ? < Qu'est ce qui empêche de
construire sa requête POST soi-même ? Quel rapport avec Javascript
(aucun navigateur dans l'histoire la... il parle du traitement je
crois) ?
Tu n'as pas suivi ce que je voulais dire : l'idée est de crypter les données avant de les envoyer à l'autre site (j'admets que c'est tiré par les cheveux mais bon). Donc le formulaire (POST évidemment) doit pointer vers son propre site, qui crypte les données, et pour ensuite faire une redirection avec des données POST, c'est là que t'as pas le choix ! la fonction header( ) ne prend pas de POST (elle peut juste... les rediriger). Donc à moins d'utiliser des fonctions curl ou cettelibrairie Zend, tu dois passer par une redirection javascript avec des champ hidden. Non non, je refuse de gagner le concours de troll lool

"Et en plus ça oblige ton visiteur à faire un aller-retour
entre les deux sites, même si tu peux faire ça de façon transparente
sans qu'il s'en rende compte (redirection immédiate)" < ah bon ?
qu'est ce qui empêche le site free d'aller réaliser l'opération désirée
lui même ? Où a-t-on besoin d'une redirection ?
Comment tu fais toi pour que php fasse une requête sur un site distant (toujours en POST), sans passer par le navigateur  ??
Commenter la réponse de Evangun
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
1
0
Merci
Pour les données POST, j'ai pas attendu le header() ou la librairie
Zend lol.. Je te dis justement que les construire soi même, à la main,
en sockets, c'est très simple ;o) Il n'y a pas grand chose à "crypter",
le pire que tu aies à faire revient à du rawurlencode.. Donc ni champs
hidden, ni javascript, tout peut se passer coté traitement php (si tu
as envie hein..).



Cf ci dessus, de simples sockets.. Je l'ai déja fait dans d'autres
langages comme en PHP, et ca marche très bien. (c'est peut être un peu
"bas niveau", mais ce n'est pas non plus des centaines de lignes de
code, t'as 5-6 lignes de header à fournir, tes données POST, c'est pas la fin du monde :o))


Pada
Commenter la réponse de cs_PaDa
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
1
0
Merci
Non testé mais je pense que ca doit marcher (j'ai simplement adapté depuis une de mes sources pour un site spécifique)


Je ne poste pas pour dire que c'est la meilleure soluce ou que c'est
bien codé, simplement pour montrer que c'est faisable ;o) et que c'est
pas si compliqué.



<?php



//paramètres à changer nécessairement (quelques adaptations des headers seront certainements utiles selon les cas)


$site = 'www.site.blah';


$page = '/bleh/traitement.php';


$champs array('name'> 'value','name2' => 'value2');



//ouverture socket


$fp = fsockopen($site, 80, $errno, $errstr, 30);


//si erreur, affichage


if (!$fp) {


    echo "$errstr ($errno)
\n";


}


//sinon, on continue


else {


    //encodage infos


    $a = array();


    foreach ($champs as $key => $value) {


        $a[] = $key.'='.rawurlencode($value);


    }


    //chaine des données formulaires à poster


    $fp_form = implode('&',$a);


    $fp_len = strlen($fp_form) + 1;


    //construction de la requête complète


    $fp_post = "POST $page HTTP/1.0\r\n";


    $fp_post .= "Connection: Keep-alive\r\n";


    $fp_post .= "Content-Type: application/x-www-form-urlencoded; charset="iso-8859-1"\r\n";


    $fp_post .= "User-Agent: Mozilla/4.7 [fr] (Win98; I)\r\n";


    $fp_post .= "Host: $site\r\n";


    $fp_post .= "Accept: */*\r\n";


    $fp_post .= "Content-Length: " . $fp_len . "\r\n\r\n";


    $fp_post .= $fp_form . "\r\n";


    //envoi de la requête


    fwrite($fp, $fp_post);


    //récupération de la page renvoyée


    while (!feof($fp)) {


        $line = fgets($fp, 128);


        echo nl2br($line);


    }


    //fermeture socket


    fclose($fp);


}



?>


Pada
Commenter la réponse de cs_PaDa
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
0
Merci
C'est vrai que le coup des sockets, j'avais lu ça quelque part et j'avais pas testé.
merci de l'info en tt cas, ça me servira certainement à l'occasion
Commenter la réponse de Evangun
Messages postés
2
Date d'inscription
samedi 24 juin 2006
Statut
Membre
Dernière intervention
29 mars 2010
0
Merci
Merci à toi

Fonctionne nikel je viend de tester.
Commenter la réponse de ThoraliasAngelus
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
0
Merci
Attention aux failles de sécu...

Si n'importe qui peut lancer ton script c'est pas terrible...

Dans les infos tu peux passer un système de mot de passe. Et sur ton script vérifier si le mot de passe correspond et qui appel le script surtout...

_________________________________
Min iPomme
Commenter la réponse de Tonio_35
Messages postés
5
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
19 août 2010
0
Merci
Interessant ton code, cependant, Pada peux tu expliquer ton code stp, suis encore un debutant alors....

ou Thorialas ?
Commenter la réponse de VIOLENT