2010-07-20 10 views
4

Je reçois une requête POST sur mon script api.php. Le rouge contenu en utilisant ce code:Lire les paramètres de requête POST correctement en PHP pour une demande de plus de 1450 B?

$fp = fopen('php://stdin', 'r'); 
$all = ""; 
while($line = fgets($fp, 4096)) { 
    $all .= $line; 
} 
echo $all; 

ressemble à ceci:

------------V2ymHFg03ehbqgZCaKO6jy 
Content-Disposition: form-data; name="intro" 

O 
------------V2ymHFg03ehbqgZCaKO6jy 
Content-Disposition: form-data; name="title" 

T 
------------V2ymHFg03ehbqgZCaKO6jy 
Content-Disposition: form-data; name="apiKey" 

98d32fdsa 
------------V2ymHFg03ehbqgZCaKO6jy 
Content-Disposition: form-data; name="method" 

/media/add 
------------V2ymHFg03ehbqgZCaKO6jy 
Content-Disposition: form-data; name="upload_field"; filename="original_filename.png" 
Content-Type: image/png 


------------V2ymHFg03ehbqgZCaKO6jy-- 

Comme vous pouvez le voir, je 4 paramètres appelés intro, titre, apiKey et méthode, et un fichier appelé original_filename.png avec taille de 1460 octets.

Malheureusement, mon tableau $ _POST est vide. Ce qui est bizarre quand orginal_filename.png est inférieur à 1450 octets $ _POST contient tous les paramètres, et stdin est vide.

Je voudrais pouvoir lire ces domaines comme PHP humain normal étant de $ _POST.

Que faire pour lire ces paramètres de la requête POST correctement à partir de $ _POST?

Répondre

1

Comme je viens de lire dans le manuel, les données post brut ne sont pas disponibles avec enctype = "multipart/form-data" mais peut vous pouvez aussi essayer avec

$fp = fopen('php://stdin', 'rb'); 

S'il vous plaît faites attention à la "b "drapeau.

Aussi, assurez-vous que always_populate_post_data = Sur dans votre php.ini

+0

??? Vous avez écrit la première ligne du code source que j'ai mis dans ma question. Ce n'est pas très utile ... –

+0

S'il vous plaît prêter attention aux drapeaux! J'ai écrit rb non seulement! –

+0

Ok, merci, je comprends que c'est une correction d'une erreur dans mon code ci-dessus, d'accord. Je l'apprécie, mais espère toujours trouver une solution pour le problème principal ici. Sincères amitiés! –

1

Y at-il dans la variable $_FILES?

Y at-il un élément MAX_FILE_SIZE sous la forme présentée?

Quelles sont les valeurs ici?

echo 'post_max_size = ' . ini_get('post_max_size') . "\n"; 
echo 'upload_max_filesize = ' . ini_get('upload_max_filesize') . "\n"; 
+0

Ces paramètres sont 16M. Dans FILES, il n'y a pas de données du tout. –

+0

Les fichiers téléchargés à partir d'un formulaire sur la page précédente ou d'une autre manière? S'il y a un formulaire, pouvez-vous poster la source pertinente pour cela? – pferate