PHP cURL error La URL no se formateó correctamente

Estoy tratando de cargar un archivo cURL simple de un servidor a otro. El problema es que obtengo el error n.º 3 de los códigos de error de cUrl: la URL no tenía el formato correcto.

Copié la URL en mi navegador y me conecté al sitio ftp sin ningún problema. También verifiqué el formato correcto y busqué en la web y en este sitio una respuesta sin ningún éxito.

Aquí está el código:

$ch = curl_init();

$localfile = '/home/httpd/vhosts/homeserver.com/httpdocs/admin.php';  
echo $localfile;  //This reads back to proper path to the file
$fp = fopen($localfile, 'r');
curl_setopt($ch, CURLOPT_URL, 'ftp://username:password@199.38.215.1xx/');
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec ($ch);
$error_no = curl_errno($ch);
curl_close ($ch);
if ($error_no == 0) {
  $error = 'File uploaded succesfully.';
} else {
  $error  = 'Upload error:'.$error_no ;//Error codes explained here http://curl.haxx.se/libcurl/c/libcurl-errors.html';
}
echo $error;

También he probado esto:

curl_setopt($ch, CURLOPT_URL, 'ftp://199.38.215.1xx/');
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');

Sigo recibiendo el error # 3.

¿Alguna idea?

preguntado el 12 de junio de 12 a las 16:06

PHP ha incorporado funciones FTP que pueden funcionar mejor que cURL. -

1 Respuestas

su URL remota debe contener la ruta y el nombre del archivo de destino, como se muestra en este ejemplo

<?php
// FTP upload to a remote site Written by Daniel Stenberg
// original found at http://curl.haxx.se/libcurl/php/examples/ftpupload.html
//
// A simple PHP/CURL FTP upload to a remote site
//

$localfile = "me-and-my-dog.jpg";
$ftpserver = "ftp.mysite.com";
$ftppath   = "/path/to";
$ftpuser   = "myname";
$ftppass   = "mypass";

$remoteurl = "ftp://${ftpuser}:${ftppasswd}@${ftpserver}${ftppath}/${localfile}";

$ch = curl_init();

$fp = fopen($localfile, "rb");

// we upload a JPEG image
curl_setopt($ch, CURLOPT_URL, $remoteurl);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);

// set size of the image, which isn't _mandatory_ but helps libcurl to do
// extra error checking on the upload.
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));

$error = curl_exec($ch);

// check $error here to see if it did fine or not!

curl_close($ch); 
?>

Respondido el 15 de junio de 12 a las 13:06

Gracias por el ejemplo, estoy un poco más cerca. Modifiqué el ejemplo para hacer eco del código de error y obtener el error 9: "Se nos negó el acceso al recurso proporcionado en la URL. Para FTP, esto ocurre al intentar cambiar al directorio remoto". Probé un sitio ftp diferente en el mismo servidor y me aseguré de que los permisos fueran correctos (puedo ftp a él sin problemas), así que no sé a dónde ir a continuación. - don clark

¿Qué dicen los registros (de errores) de su servidor ftp? ¿Está autenticado (¿y es el usuario correcto?), existe el directorio remoto, el usuario autenticado puede escribirlo y leerlo...? - Harald Brinkhof

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.