Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/01/2012, 09h14   #1
Membre du Club
 
Inscription : novembre 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 132
Points : 44
Points : 44
Par défaut php input (php://input)

Salut,

Je veux lire les variable envoyées par la méthode PUT.
J'utilise ce lien:
http://www.lornajane.net/posts/2008/...-Data-from-PHP.
Voici le code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?php
if($_SERVER['REQUEST_METHOD'] == 'GET') {
   echo "this is a get request\n";
   echo $_GET['fruit']." is the fruit\n";
   echo "I want ".$_GET['quantity']." of them\n\n";
} elseif($_SERVER['REQUEST_METHOD'] == 'PUT') {
   echo "this is a put request\n";
   parse_str(file_get_contents("php://input"),$post_vars);
   echo $post_vars['fruit']." is the fruit\n";
   echo "I want ".$post_vars['quantity']." of them\n\n";
}
?>
j'utilise l'extension Firefox "poster" pour exécuter cet exemple. GET
marche bien mais pas PUT, file_get_contents("php://input")
retourne une chaine vide.

J'ai trouvé un bug qi est relié mais cela a été réglé j'imagine: https://bugs.php.net/bug.php?id=51592

J'utilise xampp sur win7 :
+ Apache 2.2.17
+ MySQL 5.5.8 (Community Server)
+ PHP 5.3.5 (VC6 X86 32bit) + PEAR)

Toute suggestion est la bienvenue.

Merci
helpcomm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 11h55   #2
Membre confirmé
 
Homme Clément
Développeur informatique
Inscription : décembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 213
Points : 277
Points : 277
Ca devrait pourtant marcher ce code...
Est ce que cette méthode là marche : http://php.net/manual/fr/features.fi...put-method.php
(juste au niveau de la récupération des valeurs) ?

Sinon, peut être y'a-t-il un paramètre à configurer avec apache ? Peut être refuse-t-il le contenu avec la méthode PUT ?

Si tu utilises firefox, peut être peux tu utiliser firebug (onglet réseau) pour voir ce qui se passe.

Sinon, pourquoi vouloir faire ça ? Avec POST tu auras exactement le même résultat.
Climoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 21h51   #3
Membre du Club
 
Inscription : novembre 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 132
Points : 44
Points : 44
Salut,

Merci pour votre réponse. Concernant votre question de pourquoi je veux l'utiliser, ma réponse est que j'ai besoin de créer des services REST qui en plus de GET et POST utilisent PUT et DELETE. Personnellement, je ne suis pas très à l'aise avec la configuration d'apache. Mais si c'est la seule facon de faire je n'ai pas le choix.

Merci
helpcomm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 12h04   #4
Membre éclairé
 
Inscription : juin 2007
Messages : 335
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 335
Points : 391
Points : 391
Bien intéressant comme post,

alors j'ai trouvé comment faire avec 2 fichier, le premier ( test.php) appelant le fichier put.php ( dont l'url est http://localhost/traitement/put.php)


test.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$errno = 0;
$errstr = '';
$header='';
$req = 'fruit=orange&quantity=12';
$fid = fsockopen('127.0.0.1', 80, $errno, $errstr, 30);
if ($fid) {
 
$header .= "PUT /traitement/put.php HTTP/1.0\r\n";
$header .="HOST: localhost\r\n";
$header .="Connection: close\r\n" ;
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
fputs ($fid, $header . $req);
fpassthru($fid); 
}  
?>

put.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?php
if($_SERVER['REQUEST_METHOD'] == 'GET') {
   echo "this is a get request\n";
   echo $_GET['fruit']." is the fruit\n";
   echo "I want ".$_GET['quantity']." of them\n\n";
} elseif($_SERVER['REQUEST_METHOD'] == 'PUT') {
   echo "this is a put request\n";
   parse_str(file_get_contents("php://input"),$post_vars);
   echo $post_vars['fruit']." is the fruit\n";
   echo "I want ".$post_vars['quantity']." of them\n\n";
}
?>
__________________
Conception / Dev
ascito est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/01/2012, 19h05   #5
Membre confirmé
 
Homme Clément
Développeur informatique
Inscription : décembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 213
Points : 277
Points : 277
Si ton code marche bien ascito (je n'ai pas testé), cela signifie que le problème vient de l'emission de la requête PUT, et non pas du script de réception, car le code que tu as pour réceptionner est exactement le même que celui posté par helpcomm initialement.

Regarde donc du côté de ton extension firefox qui envoie les requêtes, peut être ne fait-elle pas ce que tu crois qu'elle fait. Peut être essayer de "sniffer" ce qui passe sur ton réseau, puis comparer la requête créée par le code de ascito et celle crée par ton extension firefox ?

RQ : tu utilises aussi le protocole HTTP 1.0, alors qu'en général, tout le monde utilise le 1.1 maintenant. Je sais pas si ça a une incidence.
Climoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h38.


 
 
 
 
Partenaires

Hébergement Web