Descargue el archivo remoto al servidor con PHP

He estado buscando por todos lados durante los últimos dos días y lo he intentado todo, y todavía no puedo hacer que nada funcione. Siento que esto debería ser algo relativamente simple de hacer.

Todo lo que quiero hacer es descargar un archivo remoto de una URL a un directorio en mi servidor.

Entonces, por ejemplo, si

$_url = http://www.freewarelovers.com/android/download/temp/1306495040_Number_Blink_1.1.1.apk 

y $_dir = /www/downloads/

Entonces, cuando todo esté dicho y hecho, quiero 1306495040_Number_Blink_1.1.1.apk en /www/downloads/

Probé la función copy() , lo he intentado

 file_put_contents("$_dir.$_file_name", file_get_contents($_url)); 

y recibe el siguiente error:

file_get_contents(): failed to open stream: HTTP request failed!

Esto debería hacerlo:

 set_time_limit(0); $url = 'http://www.freewarelovers.com/android/download/temp/1306495040_Number_Blink_1.1.1.apk'; $file = fopen(dirname(__FILE__) . '/downloads/a.apk', 'w+'); $curl = curl_init($url); // Update as of PHP 5.4 array() can be written [] curl_setopt_array($curl, [ CURLOPT_URL => $url, // CURLOPT_BINARYTRANSFER => 1, --- No effect from PHP 5.1.3 CURLOPT_RETURNTRANSFER => 1, CURLOPT_FILE => $file, CURLOPT_TIMEOUT => 50, CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)' ]); $response = curl_exec($curl); if($response === false) { // Update as of PHP 5.3 use of Namespaces Exception() becomes \Exception() throw new \Exception('Curl error: ' . curl_error($curl)); } $response; // Do something with the response. 
 $url = 'http://www.example.com/a-large-file.zip'; $path = '/path/to/a-large-file.zip'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); file_put_contents($path, $data); 

usa curl

$ url es la URL del archivo

$ ruta es donde y el nombre para guardar el archivo

espero que funcione

Use curl para descargar el archivo del servidor remoto como se muestra a continuación.

 $url = "http://path/toserver/filename"; $destination = "uploads/filename"; $fp = fopen ($destination, 'w+'); $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_BINARYTRANSFER, true ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, false ); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10 ); curl_setopt( $ch, CURLOPT_FILE, $fp ); curl_exec( $ch ); curl_close( $ch ); fclose( $fp ); 

referencia http://www.tricksofit.com/2014/04/download-file-from-remote-server-in-php

file_put_contents espera un nombre de archivo, no un nombre de directorio.

Dividirlo en diferentes etapas:

 $raw = file_get_contents($_url); ... check if $raw has anything useful in it file_put_contents($_dir, $raw); ... check if the file showed up 

O bien la recuperación está fallando en file_get_contents, o la escritura está fallando en file_put_contents, o el archivo que está descargando es demasiado grande y excede el memory_limit predeterminado de PHP.

Es posible que no tenga fopen wrappers habilitados para que file_get_contents no funcione. Intenta usar curl o una biblioteca como Snoopy .

Desde PHP 5.1.0, file_put_contents () admite la escritura pieza por pieza al pasar un controlador de flujo como el parámetro $ data:
No es necesario usar Curl

 file_put_contents("Tmpfile.zip", fopen("http://someurl/file.zip", 'r'));