Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, estou tentando desenvolver um web service em php.
Estou em duvida, esse web service irá atender um aplicativo para iphone, no caso ele fará upload de uma imagem.
Como recebo esta imagem ? utilizando $_FILES['campo'] ???
sim, exatamente.
Qual a dúvida ?
Para receber arquivos no servidor é dessa maneira sim. Qual o problema?
Era para confirmar pois as variáveis eu tentei recuperar com $_POST, mas aquelas que são envidas no body no formato json não são recuperadas por $_POST... ou será que posso está fazendo algo errado ?
mostre oque vc está fazendo.
não são recuperados pelo POST pq não são POST, como vc mesmo disse são JSON.
vc pode dar um json_decode que isso vai virar um array praticamente igual o POST
Estou usando um mini framework chamado RESPECT\REST (https://github.com/Respect/Rest);
Estou usando para testes o Advanced Rest Client para o google chrome.
segue o codigo de teste:
<?php
require_once 'vendor/autoload.php';
use Respect\Rest\Router;
$r3 = new Router;
$r3->post('/login', function() {
print_r($_POST);
//return file_get_contents('php://input');
});
se eu envio usando o Content-Type: application/json
E percebi que o php não recebe nada na variavel $_POST
Se uso outra codificação de "formulário" aí chega perfeito.
Pelo que tinha entendido achei que os dados enviados via post, mesmo sendo em json, eles chegariam no php dentro da variavel $_POST.
Esse é meu problema, se o pessoal do app usar content-type: application/json, eu terei que recebe-lo não via $_POST e sim trata-lo: file_get_contents('php://input')Mas na hora de consultar, qual método HTTP está usando?
Segundo [comentários do manual](http://www.php.net/manual/en/reserved.variables.httprawpostdata.php#112032), $_POST é a grosso modo uma *commodity* baseada nos dados "crus" (raw) recebidos pelo programa PHP, acessíveis através do **php://input**.
Sendo assim você não usaria $_POST, mas poderia muito bem quebrar os dados crus recebidos e continuar trabalhando na mesma notação.
Há ainda a possibilidade, na hipótese de haver JS envolvido, de você codificar todos os dados do formulário num único JSOn e enviá-lo via POST ao programa.
Daí sim você usaria $_POST.
Enrico Pereira, estou usando POST
Mas pelo que o Bruno falou foi o que eu pensei... terei que tratar de acordo com o content type que chegar...
Agora ... se eu usar o Slim Framework apenas para receber os dados e como "router" ele ja trata esses dados ? pelo que vi am alguns artigos ele tem essa opção:
$request = $app->request(); $body = $request->post();
E depois eu usaria apenas:
$body['campo'];
A questão é que será que ele trata todos os tipo de content-type que recebe ?
O content-type serve para determinar qual tipo de conteúdo você vai mandar para o usuário (html, json, xml, etc.) e não afeta os dados.
O Respect\Rest possui tratamento de content-type: https://github.com/Respect/Rest#content-negotiation
não essa opção é so para informar o tipo de retorno que a pagina vai aceitar (accept)
Mas consegui obter o content-type com $_SERVER['content-type'].. e aí eu trato os tipos mais comuns.
da um print_r nele e vc verá