Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Jukuqs en 9 Noviembre 2009, 19:20 pm



Título: Manejo de ficheros en PHP
Publicado por: Jukuqs en 9 Noviembre 2009, 19:20 pm
Hola a todos.

Estaba intentando crear un script en PHP que copiara un fichero (una imagen mas concretamente) de una URL a una carpeta en mi seridor, está en un hosting privado pero tengo control casi total sobre este (o eso me gustaria pensar).

El caso es que al ejecutar la función:

Código
  1. copy($avatar, "/avatars/$id.$extension");

Donde:

Código
  1. $avatar = "http://foro.elhacker.net/Smileys/cowboy/grin.gif"; // Por ejemplo.
  2. $id = 29;  // Id del usuario.
  3. $extension = "jpeg";  // Podria ser cualquier otra.

Me devuelve:

Warning: copy() [function.copy]: URL file-access is disabled in the server configuration in /homepages/14/d298835369/htdocs/update.php on line 67

Warning: copy(http://foro.elhacker.net/Smileys/cowboy/grin.gif) [function.copy]: failed to open stream: no suitable wrapper could be found in /homepages/14/d298835369/htdocs/update.php on line 67

El error lo deja muy claro, el acceso a ficheros mediante URL esta deshabilitado en la configuración del servidor, ahora bien, ¿como lo habilito? Es decir, si con configuración del servidor se refiere a .htaccess, ¿que debo cambiar? Y si no lo hace ¿a que se refiere y como lo arreglo?

Huelga decir que la carpeta "avatars" tiene todos los permisos menos ejecución y el fichero update.php los tiene todos.

Gracias de antemano.


Título: Re: Manejo de ficheros en PHP
Publicado por: Red Mx en 9 Noviembre 2009, 22:19 pm
Código
  1. $avatar = "http://foro.elhacker.net/Smileys/cowboy/grin.gif"; // Por ejemplo.

Con esa linea le estas asigando el texto http://foro.elhacker.net/Smileys/cowboy/grin.gif  a la variable $avatar.


Primero tienes que  obtener la imagen guardar el archivo y cuando tengas el archivo entonces si copiarlo.

Código
  1. $id = 29;  // Id del usuario.
  2. $extension = "gif";  // Podria ser cualquier otra.
  3.  
  4. $imagen= file_get_contents('http://foro.elhacker.net/Smileys/cowboy/grin.gif'); // obtenermos el archivo
  5.  
  6. $fp=fopen('temporal.dat','w');        // Abrir el archivo para anexar al final
  7. fwrite($fp,$imagen);            // Escribir en el archivo
  8. fclose($fp);                    // Cerrrar el archivo
  9.  
  10. copy('temporal.dat', "/avatars/$id.$extension");
  11.  
  12. echo 'LISTO';
  13.  


Listo!!.


Título: Re: Manejo de ficheros en PHP
Publicado por: Jukuqs en 9 Noviembre 2009, 23:02 pm
Wow, no conocia la función get_file_contents ^.^, muchas gracias, mañana edito y te comento como me ha ido.

En mi defensa debo decir que cuando decia que $avatar = "" no pretendia hacer que la variable $avatar contubiera el fichero sino solo la dirección de este.

Muchissimas gracias de nuevo.


Título: Re: Manejo de ficheros en PHP
Publicado por: Jukuqs en 10 Noviembre 2009, 07:36 am
Ains, edito para decir que el problema persiste, el error que devuelve ahora es:

Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /homepages/14/d298835367/htdocs/update.php on line 67

Warning: file_get_contents(http://foro.elhacker.net/Smileys/cowboy/grin.gif) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in /homepages/14/d298835367/htdocs/update.php on line 67

Warning: copy(/avatars/13.png) [function.copy]: failed to open stream: No such file or directory in /homepages/14/d298835367/htdocs/update.php on line 73

Creo que el problema esta en que el servidor no me deja acceder a ficheros mediante PHP.

El código es este:

Código
  1. if($avatarurl){
  2.  
  3.  $avatar = str_replace($forbidden, "", $avatarurl);
  4.  $alloweds = array('jpg','jpeg','png','gif','bmp');
  5.  if(!eregi('.', $avatar)){
  6.   echo "<script>alert(\"The avatar extension is missing!\");</script>";
  7.  
  8. echo "<meta http-equiv=\"refresh\" content=\"0; url=cp.php\">";
  9.  }else{
  10.          $extension = explode('.', $avatar);
  11.          $extension = $extension[count($extension) - 1];
  12.          foreach($alloweds as $allowed){
  13.           if($allowed == strtolower($extension)){
  14. $correct = true;
  15.   }
  16.  }
  17.  }
  18.  if ($correct != true) $correct = false;
  19.  
  20.  if($correct==true){
  21.  $query = mysql_query("SELECT id FROM usersdb WHERE username ='$username'") or die(mysql_error());
  22.  $data = mysql_fetch_array($query);
  23.  $id = $data['id'];
  24.  $imagen= file_get_contents($avatar);
  25.  
  26.  $fp=fopen('temporal.dat','w');
  27.  fwrite($fp,$imagen);
  28.  fclose($fp);
  29.  
  30.  copy('temporal.dat', "/avatars/$id.$extension");
  31.  $avatar = "/avatars/$id.$extension";
  32.  
  33.  $query = mysql_query("UPDATE usersdb SET avatar='$avatar' WHERE username ='$username'") or die(mysql_error());
  34.  }else{
  35.   echo "<script>alert(\"The avatar has a wrong format!\");</script>";
  36.  
  37. echo "<meta http-equiv=\"refresh\" content=\"0; url=cp.php\">";
  38.  }
  39.  
  40. }

Pero el problema esta básicamente aqui:

Código
  1. $imagen= file_get_contents($avatar);
  2.  
  3. $fp=fopen('temporal.dat','w');
  4. fwrite($fp,$imagen);
  5. fclose($fp);
  6.  
  7. copy('temporal.dat', "/avatars/$id.$extension");

Gracias de antemano!


Título: Re: Manejo de ficheros en PHP
Publicado por: ‭‭‭‭BadStupidMonkey. en 10 Noviembre 2009, 14:41 pm
El servidor tiene deshabilitado el accesso a ficheros externos al servidor... o editas el php.ini en la linea allow_url_fopen o creas un .htaccess en el directorio con la linea php_value allow_url_fopen on ...




Saludos


Título: Re: Manejo de ficheros en PHP
Publicado por: Jukuqs en 10 Noviembre 2009, 16:23 pm
Exacto! Era eso último, con ese cambio tanto mi código cómo el de Red Mx funcionan.

Muchas gracias a todos!