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:
copy($avatar, "/avatars/$id.$extension");
Donde:
$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.
$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.
$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!!.
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.
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:
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:
$imagen= file_get_contents($avatar);
$fp=fopen('temporal.dat','w');
fwrite($fp,$imagen);
fclose($fp);
copy('temporal.dat', "/avatars/$id.$extension");
Gracias de antemano!
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
Exacto! Era eso último, con ese cambio tanto mi código cómo el de Red Mx funcionan.
Muchas gracias a todos!