2011-08-15 5 views
1

J'ai des problèmes pour poster des fichiers sur une API que j'ai créée en utilisant cURL.Publication de fichiers à l'aide de cURL en utilisant PHP

Je peux poster des petites images (par exemple 4Ko) mais quand je tente de joindre une grande image que je reçois l'erreur suivante:

erreur Curl: failed création de données formpost

Le code que je utilise pour faire l'appel cURL est ci-dessous:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 100); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 

try { 
    switch($type) { 
     case "GET": 
      break; 
     case "POST": 
      curl_setopt($ch, CURLOPT_POST, true); 
      curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); 
      break; 
     case "PUT": 
      $fh = fopen('php://memory', 'rw'); 
      $data = http_build_query($vars, '', '&'); 
      fwrite($fh, $data); 
      rewind($fh); 
      curl_setopt($ch, CURLOPT_INFILE, $fh); 
      curl_setopt($ch, CURLOPT_INFILESIZE, strlen($data)); 
      curl_setopt($ch, CURLOPT_PUT, true); 
      break; 
     case "DELETE": 
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
      break; 
     default: 
      throw new InvalidArgumentException('Current verb is an invalid REST verb.'); 
    } 
} catch (InvalidArgumentException $e) { 
    curl_close($ch); 
    throw $e; 
} catch (Exception $e) { 
    curl_close($ch); 
    throw $e; 
} 
$result = curl_exec($ch); 
$info = curl_getinfo($ch); 
if(curl_errno($ch)) { 
    echo 'Curl error: ' . curl_error($ch); 
} 

curl_close($ch); 

y at-il un plafond sur la taille du fichier pour le téléchargement d'une image par cURL.

Votre aide serait appréciée.

+0

Limite de mémoire de PHP, système 32 bits vous limitant aux fichiers 2gig, limite de fichiers ouverts, etc ... il y a beaucoup de limites. Sans plus de détails, je ne peux pas répondre mieux que ça. Qu'y a-t-il dans '$ vars'? –

+0

$ vars est les variables que je publie donc ressemblerait à ceci: $ vars = array ("nom" => $ name, "image" => "@/tmp/image.jpg"); –

+0

Bien que je ne cherche pas à télécharger des fichiers de 2 Go. Cela arrive avec un fichier de 148 Ko! –

Répondre

0

Vous pouvez être en cours d'exécution dans une limite définie sur le serveur. Apache a la directive LimitRequestBody pour permettre à l'administrateur du serveur de restreindre les tailles de téléchargement. Vous pouvez en savoir plus à ce sujet ici: http://httpd.apache.org/docs/2.1/mod/core.html#limitrequestbody

Les administrateurs de serveur peuvent également appliquer des limites sur les services Windows IIS, mais uniquement de manière fiable à partir de la version 6.0.

+0

Un grand merci pour le pointeur, mais j'ai essayé d'ajouter ce qui suit à mon fichier httpd.conf et de redémarrer Apache et je suis toujours incapable de télécharger de gros fichiers. LimitRequestBody 0

+0

Avez-vous essayé d'exécuter curl manuellement à partir de la ligne de commande pour vous assurer que cela fonctionne? J'avais l'habitude de faire cela pour m'assurer que les appels curl fonctionneraient avant de le mettre en PHP. De cette façon, vous savez si c'est un problème php seulement les documents sont ici: http://curl.haxx.se/docs/manpage.html – ghostJago

Questions connexes