elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Uploader de archivos REMOTO
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Uploader de archivos REMOTO  (Leído 4,890 veces)
‭lipman


Desconectado Desconectado

Mensajes: 3.062



Ver Perfil WWW
Uploader de archivos REMOTO
« en: 30 Diciembre 2008, 22:34 pm »

Buenas, quiero hacerme un uploader de archivos remoto y por lo que he leido se puede hacer con la función copy() pero me da problemas. Por ejemplo, pongo en el servidor (local) esto:

Código
  1. $archivo = "http://es.php.net/images/php_snow_2008.gif";
  2. $directorio = "ejemplo.gif";
  3. copy($archivo, $directorio);

Y funciona, se copia esa imagen en el directorio donde tengo el script como ejemplo.gif.

Sin embargo, si lo subo a un servidor (el de mi web) me da el siguiente error:

Citar
Warning: copy() [function.copy]: URL file-access is disabled in the server configuration in /homepages/44/d217001018/htdocs/prueba/prueba.php on line 10

Warning: copy(http://es.php.net/images/php_snow_2008.gif) [function.copy]: failed to open stream: no suitable wrapper could be found in /homepages/44/d217001018/htdocs/prueba/prueba.php on line 10

¿Que es lo que sucede?

Otra cosa. Me gustaria tambien poner algo así como una barra para saber el progreso y la velocidad a la que va. ¿Cómo podría hacerlo? ¿Cambio de función?

Saludos


En línea

eLank0
eLhAcKeR r00Lz


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Uploader de archivos REMOTO
« Respuesta #1 en: 31 Diciembre 2008, 01:49 am »

Hola,

Podrías usar las funciones FTP de PHP para subir los archivos remotamente:

Código:
<?php

$conn = ftp_connect('servidor');

$log = ftp_login($conn, 'usuario','contraseña');

if (($conn) && ($log))
{

$local = $_FILES['archivo']['nombre_archivo'];

$remoto = $_FILES['archivo']['nombre_archivo_temporal']; //durante la transmision

        if (is_uploaded_file($remoto))
        {
    if(ftp_put($conn, $local, $remoto, FTP_BINARY))
            {
              //Archivo subido correctamente
            }
            else
            {
               //Error al subir el archivo
            }
        }
        else
        {
             //Error
        }

}

ftp_close($conn);

?>

En el ejemplo he supuesto que envias el archivo por formulario.

Es mejor usar funciones específicas para lo que uno quiere hacer, y si ya están hechas pues mucho mejor :)

Salu2


« Última modificación: 31 Diciembre 2008, 01:56 am por eLank0 » En línea

WannaBeHacker

Desconectado Desconectado

Mensajes: 273



Ver Perfil
Re: Uploader de archivos REMOTO
« Respuesta #2 en: 31 Diciembre 2008, 02:12 am »

Y lo de la barra de progreso y velocidad pues va a ser que con PHP sólo no, tendría que tirar de AJAX y algún script en perl.
Mira esta página, tal vez te interese:
http://www.codigo-fuente.com/nuevo-ejemplo-barra-de-carga-en-php-y-ajax/
En línea

‭lipman


Desconectado Desconectado

Mensajes: 3.062



Ver Perfil WWW
Re: Uploader de archivos REMOTO
« Respuesta #3 en: 6 Enero 2009, 03:34 am »

Hola,

Podrías usar las funciones FTP de PHP para subir los archivos remotamente:

Código:
<?php

$conn = ftp_connect('servidor');

$log = ftp_login($conn, 'usuario','contraseña');

if (($conn) && ($log))
{

$local = $_FILES['archivo']['nombre_archivo'];

$remoto = $_FILES['archivo']['nombre_archivo_temporal']; //durante la transmision

        if (is_uploaded_file($remoto))
        {
    if(ftp_put($conn, $local, $remoto, FTP_BINARY))
            {
              //Archivo subido correctamente
            }
            else
            {
               //Error al subir el archivo
            }
        }
        else
        {
             //Error
        }

}

ftp_close($conn);

?>

En el ejemplo he supuesto que envias el archivo por formulario.

Es mejor usar funciones específicas para lo que uno quiere hacer, y si ya están hechas pues mucho mejor :)

Salu2

No entiendo lo de:

Código
  1. $local = $_FILES['archivo']['nombre_archivo'];
  2. $remoto = $_FILES['archivo']['nombre_archivo_temporal']; //durante la transmision
  3.  

$local seria, la ruta del archivo que quiero subir no? por ejemplo:

$local = "http://foro.elhacker.net/Themes/converted/images/spanish/search.gif";

y remoto... no entiendo eso de temporal. Si lo que yo quiero es que se suba y se quede ahí xD.

Con lo de respecto a la barra, no me voy a meter en más lenguajes de programación web por ahora asi que prefiero no liarme con eso xD
¿Podría saber la velocidad de subida a la que va a cada instante (o a cada segundos)?

Un saludo y gracias
En línea

w0lfh4ck

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Uploader de archivos REMOTO
« Respuesta #4 en: 6 Enero 2009, 05:21 am »


No entiendo lo de:

Código
  1. $local = $_FILES['archivo']['nombre_archivo'];
  2. $remoto = $_FILES['archivo']['nombre_archivo_temporal']; //durante la transmision
  3.  

$local seria, la ruta del archivo que quiero subir no? por ejemplo:

$local = "http://foro.elhacker.net/Themes/converted/images/spanish/search.gif";

y remoto... no entiendo eso de temporal. Si lo que yo quiero es que se suba y se quede ahí xD.

Con lo de respecto a la barra, no me voy a meter en más lenguajes de programación web por ahora asi que prefiero no liarme con eso xD
¿Podría saber la velocidad de subida a la que va a cada instante (o a cada segundos)?

Un saludo y gracias

Hola, recuerda que para hacer un upload lo que generalmente se hace es enviar el archivo a subir a la carpeta de temporales.... de ahí el servidor copia o mueve (move_uploaded_file) al directorio que necesites...

El problema tuyo es que no tienes los permisos necesarios para acceder a esa imagen y enviarla a temporales, ya que esa imagen no está en tu máquina...

La forma que te dio el compañero eLank0 es simple, te conectas al FTP agarras la imagen, cierras y te vas....

Lo de los parámetros. La variable global FILE nos brinda 4 datos del archivo que se va a subir

Por ejemplo:
<input type="file" name="imagenes" />

$_FILE["imagenes"]["name"] = Me brinda el nombre del archivo, por ej: casa.jpg
$_FILE["imagenes"]["type"] = El tipo MIME del archivo en este caso "images/jpeg"
$_FILE["imagenes"]["tmp_name"] = La carpeta temporal a la que se encuentra en ese momento, por ej: "tmp/ajdhas545a"
$_FILE["imagenes"]["size"] = El peso del archivo.

Con esos datos validas lo necesario.

Un saludo y espero haber cooperado con tu duda.

;)
En línea

<?="w0lfh4cK";?>
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Uploader de archivos REMOTO
« Respuesta #5 en: 6 Enero 2009, 08:42 am »

Citar
Warning: copy() [function.copy]: URL file-access is disabled in the server configuration in /homepages/44/d217001018/htdocs/prueba/prueba.php on line 10

Warning: copy(http://es.php.net/images/php_snow_2008.gif) [function.copy]: failed to open stream: no suitable wrapper could be found in /homepages/44/d217001018/htdocs/prueba/prueba.php on line 10

Eso quiere decir que el servidor está configurado para no acceder a archivos remotos en ciertas funciones como copy, include, requiere_once, fopen, etc pero ahi te dan las alternativas, lo mas práctico sería utilizar sockets.

Busca:
fsockopen
fgets
fputs
fclose
en http://cl.php.net/

Acá lo explican super bién:

http://www.elguruprogramador.com.ar/articulos/introduccion-a-los-sockets-en-php.htm

http://theseismo.wordpress.com/2007/05/07/trabajando-con-sockets-en-php/

http://www.nociondigital.com/webmasters/php-tutorial-sockets-en-php-detalle-181.html
« Última modificación: 6 Enero 2009, 08:44 am por WHK » En línea

Erik#


Desconectado Desconectado

Mensajes: 1.138


Gundam


Ver Perfil
Re: Uploader de archivos REMOTO
« Respuesta #6 en: 6 Enero 2009, 17:27 pm »

En un uploader que hice hace meses use la funcion

Código
  1. move_uploaded_file($_FILES['userfile']['tmp_name'],$carpeta . $filename)
En línea

Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: Uploader de archivos REMOTO
« Respuesta #7 en: 7 Enero 2009, 05:35 am »

fijate esta función:

Código
  1. function xwUploadFile($campo,$destino,$nombre,$aiext=null,$filetypes=array('image/jpeg','image/pjpg'),$maxfilesize=250000){
  2.  //Verificamos datos...
  3.  if(($_FILES[$campo]['tmp_name']=="")||($_FILES[$campo]['name']=="")){
  4.    xwShowError(ERROR_BAD_ARGS);
  5.    return null;
  6.  }
  7.  //Verificamos tamaño
  8.  if(($_FILES[$campo]['size'] > $maxfilesize)||(!$_FILES[$campo]['size'])){
  9.    xwShowError(ERROR_INVALID_FILESIZE);
  10.    return null;
  11.  }
  12.  //Verificamos Tipo...
  13.  $validfiletype=false;
  14.  foreach($filetypes as $types)
  15.    if($_FILES[$campo]['type'] == $types)
  16.      $validfiletype=true;
  17.  if(!$validfiletype){
  18.    xwShowError(ERROR_INVALID_FILETYPE);
  19.    return null;
  20.  }
  21.  //Comprobamos exista el archivo temporal en el servidor...
  22.  if(is_uploaded_file($_FILES[$campo]['tmp_name'])){
  23.    //Si no existe la carpeta intentamos crearla...
  24.    if ((!file_exists($destino))&&(!mkdir($destino,644))){
  25.      xwShowError(ERROR_FAIL_CREATEFOLDER);
  26.      return null;
  27.    }
  28.    $nombrearchivo = "$destino/$nombre";
  29.    if($aiext!=null){//generamos nombre de archivo (no utilizaremos el enviado)
  30.     $index=0;$nombrearchivo.=$index.'.'.$aiext;
  31.     while(file_exists($nombrearchivo))
  32.          $nombrearchivo = "$destino/$nombre".(++$index).'.'.$aiext;
  33.     $nombre.=$index.'.'.$aiext;
  34.    }else//utilizamos el nombre de archivo enviado
  35.       if(file_exists($nombrearchivo)){
  36.  xwShowError(ERROR_FILE_EXIST);
  37.  return null;
  38.       }
  39.     //Si todo Ocurrió Correctamente subimos la imagen
  40.     if (!move_uploaded_file($_FILES[$campo]['tmp_name'], $nombrearchivo)){
  41.       xwShowError(ERROR_FAIL_UPLOAD);
  42.       return null;
  43.     }
  44.  }else{
  45.    xwShowError(ERROR_FILE_NOTFOUND);
  46.    return null;
  47.  }
  48.  return $nombre;
  49. }
  50.  

donde xwShowError es una función que imprime el error nada más... y $campo es el campo del formulario donde se ingresa el nombre del archivo...

S2
« Última modificación: 7 Enero 2009, 06:05 am por Karman » En línea

SaXo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Re: Uploader de archivos REMOTO
« Respuesta #8 en: 7 Enero 2009, 11:30 am »

Hola,

La función usa la estructura $_FILES por lo que se presume que esa función solo va a funcionar si los datos del fichero vienen de un formulario con un campo de tipo file.
 Por motivos de seguridad los formularios solo envían el nombre del fichero.

Actualmente la función file() de php soporta varios tipos de protocolos, como por ejemplo http por lo que es igual de válido realizar estas dos formas para leer un fichero.

file ('/files/ejemplo.gif');
file ('http://host/files/ejemplo.gif');

Lo que hay que hacer es lo mismo que cuando hacemos un stream para descargar ficheros. Leer el fichero y escribirlo en nuestra ubicación.

$archivo = "http://es.php.net/images/php_snow_2008.gif";

$recurso = @fopen($archivo, "r");
if ($recurso) {
   while (!feof($recurso)) {
       $lines[] = fgets($handle, 4096);
   }
   fclose($handle);
}
$d = file('destino','w');
foreach ($lines as $key => $line){
  fwrite($d,$line);
}
fclose($recurso);
fclose($d);


No he probado el código por lo que es probable que no funcione. Pero a modo de ejemplo vale para hacerse una idea de como hacer un stream para obtener ficheros de webs y guardarlos localmente.
En línea

eLank0
eLhAcKeR r00Lz


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Uploader de archivos REMOTO
« Respuesta #9 en: 13 Enero 2009, 09:54 am »

La esquema de SaXo está bien, sólo hay que usar las funciones pertinentes.

S2
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Proyecto]Facebook Photo Uploader « 1 2 »
Programación Visual Basic
LeandroA 14 6,576 Último mensaje 13 Marzo 2011, 04:00 am
por F3B14N
Zeta Uploader | Manda emails con archivos sin restricciones...
Software
SuperDraco 0 1,319 Último mensaje 8 Julio 2011, 05:19 am
por SuperDraco
Uploader de elhacker?
Dudas Generales
.:UND3R:. 6 3,952 Último mensaje 12 Julio 2011, 00:18 am
por raul338
w.filebackup (respaldador de archivos remoto automatizado)
Abril negro
WHK 0 3,595 Último mensaje 5 Abril 2017, 23:56 pm
por WHK
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines