Curl MIS demande avec upload de fichier en PHP
Je suis en train de télécharger un fichier à l'aide de HTTP PUT.
Après avoir lu un peu, il semble que le $_FILES
tableau est uniquement avec la POSTE et multipart/form-data
. Tandis que de la METTRE, j'aurais besoin d'manuellement lire php://input
pour obtenir les données. Les deux méthodes ne fonctionnent pas.
J'ai essayé l'une des options suivantes et apprécie les conseils que vous pourriez avoir:
curl --upload avatar.jpg http://api.test.com/user/dsadasdsa
curl -X PUT -F "[email protected]" http://api.test.com/user/dsadasdsa
Mon Fichier PHP est en train d'imprimer le présent, mais retourne une chaîne vide:
echo file_get_contents("php://input");
J'ai commencé à penser que cela pourrait être un Nginx problème manquant METTRE SUPPRIMER support et installé nginx-les extras ainsi que l'ajout de ce qui suit à mon nginx config mais ça n'aide pas ainsi malheureusement.
root /var/www/;
dav_methods PUT DELETE MKCOL COPY MOVE;
create_full_put_path on;
dav_access group:rw all:r;
Je vous remercie. Je suis conscient de cette page mais il ne me dit quoi faire sur le PHP côté (qui, je le fais déjà). Et pas vraiment me dire ce que je fais mal sur le curl côté.
Aussi, essayer d'exécuter exactement le même code dans le manuel juste crée un fichier vide. Donc je suis sûr que ma demande CURL est du mauvais côté.
essayez de stackoverflow.com/questions/15106849/... s'il vous plaît
Je suis venu de là... je commence à penser que l'erreur est avec Nginx besoin spécifique d'installation pour AJOUTER/SUPPRIMER soutien et je vais essayer de le que. Merci pour votre aide!
OriginalL'auteur Shai Mishali | 2013-06-09
Vous devez vous connecter pour publier un commentaire.
J'ai quelques idées pour le débogage.
Faire un
var_dump(file_get_contents('php://input'));
au lieu d'un écho. Selon le référence:Si vous obtenez une
bool(false)
que la sortie, il y a quelque chose de mal qui en fait vous ne pouvez pas lirephp://input
- probablement un problème PHP. Si vous obtenezstring(0) ""
, il n'y a rien dansphp://input
(plus?), ce qui rend plus probable que ce soit un nginx question.Également, selon le
php://
de référence, vous ne pouvez pas utiliserphp://input
avecenctype="multipart/form-data"
. Êtes-vous sûr de ne pas l'utiliser? Vous pouvez également essayer un fichier HTML si c'est plus familier.Vous pouvez également vérifier les journaux d'erreurs,
/var/log/nginx/error.log
par défaut. En outre, vérifiez le code de réponse HTTP. Est-il 200? Si non, est-ce un code utile?s'il vous plaît laissez-moi savoir si vous avez testé. Et merci pour la rep 🙂
OriginalL'auteur Keelan
L'option-F vous avez été en utilisant des causes curl pour publier des données à l'aide du Contenu de Type multipart/form-data (voir l'homme curl).
Vous pouvez utiliser l'option --données-option binaire comme dans:
L'option-d est uniquement pour le texte et corrompre vos données.
Dans mes tests, la commande suivante donne les mêmes résultats.
Voici mon serveur
OriginalL'auteur BOC
Nginx prend en charge tous les verbes http (put, delete, options, etc). Si vous n'avez pas besoin d'une configuration particulière de nginx.
Les ouvrages suivants (je suis en php5.4 serveur pour tester facilement ce):
Ajouter ce test simple script php appelé put.php
Démarrer un serveur php à partir du même dossier de put.php:
Émettre une demande curl:
Cela permettra d'imprimer le contenu d'un fichier de put.php
[mise à jour]
Dans le cas où vous voulez utiliser php pour envoyer une demande curl à une api restful site, je le recommande Bouffer, avec qui vous n'avez pas à se souvenir de tous ceux curl options.
OriginalL'auteur Chuan Ma
Si vous essayez de créer une requête à un serveur et ne peut pas lire du php emballage, assurez-vous que:
vous avez le droit de METTRE de la demande. complet avec les en-têtes et des trucs (Faire une demande avec PHP et CURL)
votre serveur accepte les demandes PUT.
votre fichier php peut lire les simples demandes PUT d'abord (sans le télécharger partie)
Vous pouvez également vouloir vérifier la "note", a indiqué dans le php://input (http://php.net/manual/en/wrappers.php.php). Autre que cela, il pourrait être un problème sur le serveur.
OriginalL'auteur kapitanluffy
Je n'ai jamais essayé la mise en œuvre de DAV avec PHP, mais je peux vous assurer que le POST avec les uploads de fichier fonctionne, même avec nginx.
Je me serais attendu à ce travail que font les journaux de votre spectacle? Avez-vous essayé avec '--trace"?
À l'aide de l'option-F avec curl moyen de télécharger un fichier en tant que variable POST, à l'aide de " multipart/form-codage des données - qui n'a pas de sens avec une requête PUT.
OriginalL'auteur symcbean
Avez-vous éliminé PHP comme étant la cause du problème en mettant un genre différent de la webapp derrière nginx, et de tester pour voir si il peut METTRE la poignée uploads? Un très court Python Flacon application vous permettra de tester METTRE les téléchargements en une autre langue.
OriginalL'auteur SteelPangolin