Un mio pari sta sviluppando un'applicazione per iPhone che permetterà agli utenti di pubblicare immagini sul mio sito tramite la mia API. Sto costruendo la parte dell'API che accetterà ed elaborerà le immagini.
Lo sviluppatore mobile sta inviando intestazioni come tali:
Content-Disposition: form-data; name="photo_1"; filename="photo_1.jpg" Content-Type: application/octet-stream
Quando cerchi le immagini inviate, è lo stesso metodo con i normali moduli HTML? Dovrei cercare $ _FILES?
Oppure, usando PHP, come troverei la sua image?
Non sembra essere inviato tramite un module, cioè <form enctype=multipart/form-data">
e <input type="file">
, quindi l'arrays $_FILES
non verrà popolato.
Probabilmente dovrai leggere:
$HTTP_RAW_POST_DATA
o fare:
$rawPost = file_get_contents("php://input");
Dal manuale :
php: // input consente di leggere i dati grezzi dal corpo della richiesta. In caso di richieste POST, è preferibile a $ HTTP_RAW_POST_DATA in quanto non dipende da speciali direttive php.ini. Inoltre, per quei casi in cui $ HTTP_RAW_POST_DATA non è popolato per impostazione predefinita, è un'alternativa potenzialmente less dispendiosa in termini di memory per l'triggerszione di always_populate_raw_post_data. php: // input non è disponibile con enctype = "multipart / form-data".
Per maggiori informazioni, controlla:
http://php.net/manual/en/wrappers.php.php
http://php.net/manual/en/reserved.variables.httprawpostdata.php
Suppongo che iOS stia inviando l'integer file come un singolo block di dati nella sezione POSTDATA della richiesta HTTP. È ansible recuperare l'intera POSTDATA (non analizzata):
<?php $postdata = file_get_contents("php://input"); ?>
$_FILES
è pensato per leggere i file inviati con enctype="multipart/form-data"
in un formato HTML corretto. Probabilmente iOS sta inviando un semplice vecchio POST contenente solo un mucchio di byte che rappresentano il file.
Dimmi se questo risolve!
Vedi queste risposte che ho dato a domande simili (elaborando gli upload da php://input
):