PHP multipart formulaire de données sur demande?
Je suis en train d'écrire une API RESTful. Je vais avoir des problèmes avec le téléchargement d'images à l'aide de différents verbes.
Considérer:
J'ai un objet qui peut être créés/modifiés/supprimés/consulté par l'intermédiaire d'un post/put/delete/requête get sur une URL. La demande est partie multi forment lorsqu'il y a un fichier à charger, ou de l'application/xml quand il y a juste le texte à traiter.
Pour manipuler les images téléchargés qui sont associés à l'objet que je suis en train de faire quelque chose comme:
if(isset($_FILES['userfile'])) {
$data = $this->image_model->upload_image();
if($data['error']){
$this->response(array('error' => $error['error']));
}
$xml_data = (array)simplexml_load_string( urldecode($_POST['xml']) );
$object = (array)$xml_data['object'];
} else {
$object = $this->body('object');
}
Le problème majeur ici est lorsque vous essayez de gérer une demande, évidemment, $_POST ne contient pas de mettre les données (autant que je peux dire!).
Pour la référence c'est la façon dont je suis en train de construire la requête:
curl -F userfile=@./image.png -F xml="<xml><object>stuff to edit</object></xml>"
http://example.com/object -X PUT
Quelqu'un a une idée comment je peux accéder à la xml
variable dans ma requête PUT?
Vous devez vous connecter pour publier un commentaire.
Tout d'abord,
$_FILES
n'est pas remplie lors de la manipulation de requêtes PUT. Il est peuplé par PHP lors de la manipulation des requêtes POST.Vous devez analyser manuellement. Qui va pour "les" champs ainsi:
À chaque itération, la
$data
tableau sera rempli avec vos paramètres, et la$headers
tableau sera rempli avec les en-têtes de chaque partie (par exemple:Content-Type
, etc.), et$filename
contiendra le nom de fichier d'origine, si elle est fournie dans la demande et est applicable sur le terrain.Prendre note que le ci-dessus ne fonctionne que pour les
multipart
types de contenu. Assurez-vous de vérifier la demandeContent-Type
- tête avant à l'aide de la ci-dessus pour analyser le corps.Merci de ne pas supprimer ce qui, de nouveau, il est utile pour une majorité de gens viennent ici! Toutes les réponses précédentes ont été des réponses partielles qui ne couvrent pas la solution à une majorité des gens poser cette question aurait voulu.
Ce prend ce qui a été dit ci-dessus, et de plus, les poignées de multiples téléchargements de fichiers et les place dans la variable $_FILES que quelqu'un pourrait s'y attendre. Pour obtenir que cela fonctionne, vous devez ajouter "Script a MIS /put.php" pour votre serveur Virtuel pour le projet par La Documentation. Je pense aussi que je vais avoir à l'installation d'un cron pour le nettoyage de toute '.tmp fichiers.
$_FILES
et$_PUT
mais il fonctionne vraiment bien. Merci!Citant netcoder répondre : "Prendre note que le ci-dessus ne fonctionne que pour les types de contenu de type multipart"
De travailler avec tout type de contenu, j'ai ajouté les lignes suivantes à Monsieur le netcoder la solution :