Manejo de ficheros en PHP

Iniciado por Jukuqs, 9 Noviembre 2009, 19:20 PM

0 Miembros y 1 Visitante están viendo este tema.

Jukuqs

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 (php) [Seleccionar]
copy($avatar, "/avatars/$id.$extension");

Donde:

Código (php) [Seleccionar]
$avatar = "http://foro.elhacker.net/Smileys/cowboy/grin.gif"; // Por ejemplo.
$id = 29;  // Id del usuario.
$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.

Red Mx

Código (php) [Seleccionar]
$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 (php) [Seleccionar]

$id = 29;  // Id del usuario.
$extension = "gif";  // Podria ser cualquier otra.

$imagen= file_get_contents('http://foro.elhacker.net/Smileys/cowboy/grin.gif'); // obtenermos el archivo

$fp=fopen('temporal.dat','w');        // Abrir el archivo para anexar al final
fwrite($fp,$imagen);            // Escribir en el archivo
fclose($fp);                    // Cerrrar el archivo

copy('temporal.dat', "/avatars/$id.$extension");

echo 'LISTO';



Listo!!.
Desarrollar Malware Es Causa De Cancer...

Jukuqs

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.

Jukuqs

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 (php) [Seleccionar]
if($avatarurl){

  $avatar = str_replace($forbidden, "", $avatarurl);
  $alloweds = array('jpg','jpeg','png','gif','bmp');
  if(!eregi('.', $avatar)){
  echo "<script>alert(\"The avatar extension is missing!\");</script>";

echo "<meta http-equiv=\"refresh\" content=\"0; url=cp.php\">";
  }else{
          $extension = explode('.', $avatar);
          $extension = $extension[count($extension) - 1];
          foreach($alloweds as $allowed){
          if($allowed == strtolower($extension)){
$correct = true;
  }
  }
  }
  if ($correct != true) $correct = false;
 
  if($correct==true){
  $query = mysql_query("SELECT id FROM usersdb WHERE username ='$username'") or die(mysql_error());
  $data = mysql_fetch_array($query);
  $id = $data['id'];
  $imagen= file_get_contents($avatar);

  $fp=fopen('temporal.dat','w');
  fwrite($fp,$imagen);
  fclose($fp);

  copy('temporal.dat', "/avatars/$id.$extension");
  $avatar = "/avatars/$id.$extension";

  $query = mysql_query("UPDATE usersdb SET avatar='$avatar' WHERE username ='$username'") or die(mysql_error());
  }else{
  echo "<script>alert(\"The avatar has a wrong format!\");</script>";

echo "<meta http-equiv=\"refresh\" content=\"0; url=cp.php\">";
  }

}


Pero el problema esta básicamente aqui:

Código (php) [Seleccionar]

$imagen= file_get_contents($avatar);

$fp=fopen('temporal.dat','w');
fwrite($fp,$imagen);
fclose($fp);

copy('temporal.dat', "/avatars/$id.$extension");


Gracias de antemano!

‭‭‭‭BadStupidMonkey.

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

Jukuqs

Exacto! Era eso último, con ese cambio tanto mi código cómo el de Red Mx funcionan.

Muchas gracias a todos!