Il peut être intéressant de poster des données sans passer par un formulaire. En particulier, pour poster des données à un autre script, si celui-ci n'est pas sur votre site.
Il est possible d'envoyer la même chose que votre navigateur avec une socket. (il faut le module socket de php installé)
Exemple : envoyer des données à form2mail.pl sur FREE
Source / Exemple :
<?php
/*
-
- $Id: httppost.func.php,v 1.1 2003/12/28 12:48 adadou Exp $
-
- /
/*
- Permet d'envoyer des données par la méthode http POST
-
- @param string $Host : Hote du script destinataire
- @param string $URI : URI du script qui recevra les données
- @param string $Referer : page d'où sont émises les données
- @param array $Post : tableau de varaibles à envoyer
-
- @return array
-
- /
function httpPost($Host, $URI, $Referer, $Post)
{
$Body = '';
foreach($Post as $key => $value)
{
$Body.= urlencode($key).'='.urlencode(stripslashes($value)).'&';
}
$ContentLength = strlen($Body);
// Generate the Request header
$Request = "POST $URI HTTP/1.1\r\n";
$Request.= "Host: $Host\r\n";
$Request.= 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) ';
$Request.= "Gecko/20021204\r\n";
$Request.= 'Accept: text/xml,application/xml,application/xhtml+xml,';
$Request.= 'text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,';
$Request.= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n";
$Request.= "Accept-Language: en-us, en;q=0.50\r\n";
$Request.= "Accept-Encoding: gzip, deflate, compress;q=0.9\r\n";
$Request.= "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66\r\n";
$Request.= "Keep-Alive: 300\r\n";
$Request.= "Connection: keep-alive\r\n";
$Request.= "Referer: $Referer\r\n";
$Request.= "Cache-Control: max-age=0\r\n";
$Request.= "Content-Type: application/x-www-form-urlencoded\r\n";
$Request.= "Content-Length: $ContentLength\r\n\r\n";
$Request.= "$Body\r\n";
// Open the connection to the host
$socket = fsockopen($Host, 80, &$errno, &$errstr);
if (!$socket)
{
$Result['errno'] = $errno;
$Result['errstr'] = $errstr;
return $Result;
}
else
{
$idx = 0;
fputs($socket, $Request);
while (!feof($socket))
$Result[$idx++] = fgets($socket, 128);
fclose ($socket);
return $Result;
}
}
?>
/* form2mail.php */
<?php
/*
-
- Envoi d'un mail avec Form2Mail sur Free
-
- /
include('httppost.func.php');
$URI = "/cgi-bin/form2mail.pl";
$Host = "perso0.free.fr";
/* envoi un mail à LOGIN@free.fr */
//$Referer = 'http://adpro22.free.fr/dummy/form2mail.php';
$Referer = 'http://LOGIN.free.fr/dummy/form2mail.php';
$post['email'] = 'email@test.com';
$post['message'] = 'Hello World :)';
$post['ip'] = $REMOTE_ADDR;
echo '<pre>';
print_r(httpPost($Host, $URI, $Referer, $post));
echo '</pre>';
?>
Conclusion :
J'utilise ce script sur mon site. Les visiteurs postent à partir d'un formulaire. Un script PHP récupère les données et en ajoute d'autres.
On peut aussi bien passer directement $_POST au script en faisant httpPost($Host, $URI, $Referer, $_POST) mais ça manque d'intérêt...
---
update:
Il faut mettre votre login free à la place de LOGIN dans $Referer, car si vous laissez adpro22, c'est moi qui recoit votre mail :)
Host => ssl://host
Port => 443 (ou un autre si le serveur accepte sur un autre port)
Si quelqu'un à la solution, elle est le bien venue.
Merci d'avance
"Call-time pass-by-reference has been deprecated" <== Les appels par référence sont dépréciés
"argument passed by value;" <== argument passé par copie.
"If you would like to pass it by reference, modify the declaration of fsockopen()." Pour passer les variables par références, il suffit de modifier les arguments dans fsockopen();
"if you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file."Ou alors, modifier le PHP.ini => allow_call_time_pass_reference = "TRUE"
"However, future versions may not support this any longer." Sauf que plus tard, il se peut qu'il n'y ai aucun support la dessus.
"Undefined variable: debug in c:\program files\easyphp1-7\www\index.php on line 5" <== Variable $debug inexistante.
Voila.
ligne 5:
strong.bad { color: red; font-weight: bold; }
ligne 555:
"65000" => "Devil, Sockets des Troie, Stacheldraht",
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.