Intereting Posts
Доступ к переменным среды, установленным с помощью mod_rewrite в PHP Как я могу получить PHP-скрипт ** результаты **, включенные в другой скрипт PHP? Не удалось отправить электронное письмо с помощью CodeIgniter Что такое XML, и когда я должен его использовать? соответствующий вложенный тернарный оператор в php? Элементы подсчета в каждом вспомогательном массиве в php как получить доступ к базе данных через javascript? WordPress / PHP / Ajax Загрузка дополнительных сообщений phpmailer ERROR: не удалось создать почтовую функцию SOAP PHP разбор ошибок WSDL: не удалось загрузить внешний объект? Санитарный ввод HTML PHP: получить список всех имен файлов, содержащихся в моей директории images Как правильно обрабатывать запросы разбиения на страницы с помощью mongodb и php? Laravel: проверять целое поле, которое должно быть больше, чем другое Как получить переменную $ _POST из jquery serializearray ()

Как принудительно загрузить файл с помощью PHP

Я хочу, чтобы файл был загружен при посещении пользователем веб-страницы с помощью PHP. Я думаю, что это имеет какое-то отношение к file_get_contents , но я не уверен, как его выполнить.

 $url = "http://example.com/go.exe"; 

редактировать
После загрузки файла с header(location) он не перенаправляется на другую страницу. Он просто останавливается.

Прочтите документы о встроенном файле чтения PHP-функций

 $file_url = 'http://www.myremoteserver.com/file.exe'; header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); readfile($file_url); // do the double-download-dance (dirty but worky) 

Также обязательно добавляйте правильный тип контента на основе вашего приложения / zip файла, приложения / pdf и т. Д. – но только если вы не хотите запускать диалог сохранения.

 header("Content-Type: application/octet-stream"); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"file.exe\""); echo readfile($url); 

верно

или лучше для файлов типа exe

 header("Location: $url"); 
 <?php $file = "http://example.com/go.exe"; header("Content-Description: File Transfer"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename='" . basename($file) . "'"); readfile ($file); exit(); ?> 

Или, когда файл не открывается в браузере, вы можете просто использовать заголовок Location :

 <?php header("Location: http://example.com/go.exe"); ?> 

Если вам необходимо загрузить файл с размером, превышающим допустимый предел памяти (параметр memory_limit ini), что вызовет PHP Fatal error: Allowed memory size of 5242880 bytes exhausted , вы можете сделать это:

 // File to download. $file = '/path/to/file'; // Maximum size of chunks (in bytes). $maxRead = 1 * 1024 * 1024; // 1MB // Give a nice name to your download. $fileName = 'download_file.txt'; // Open a file in read mode. $fh = fopen($file, 'r'); // These headers will force download on browser, // and set the custom file name for the download, respectively. header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . $fileName . '"'); // Run this until we have read the whole file. // feof (eof means "end of file") returns `true` when the handler // has reached the end of file. while (!feof($fh)) { // Read and output the next chunk. echo fread($fh, $maxRead); // Flush the output buffer to free memory. ob_flush(); } // Exit to make sure not to output anything else. exit; 

Сначала отобразите файл и установите его значение в URL-адрес.

index.php

 <a href="download.php?download='.$row['file'].'" title="Download File"> 

download.php

 <?php /*db connectors*/ include('dbconfig.php'); /*function to set your files*/ function output_file($file, $name, $mime_type='') { if(!is_readable($file)) die('File not found or inaccessible!'); $size = filesize($file); $name = rawurldecode($name); $known_mime_types=array( "htm" => "text/html", "exe" => "application/octet-stream", "zip" => "application/zip", "doc" => "application/msword", "jpg" => "image/jpg", "php" => "text/plain", "xls" => "application/vnd.ms-excel", "ppt" => "application/vnd.ms-powerpoint", "gif" => "image/gif", "pdf" => "application/pdf", "txt" => "text/plain", "html"=> "text/html", "png" => "image/png", "jpeg"=> "image/jpg" ); if($mime_type==''){ $file_extension = strtolower(substr(strrchr($file,"."),1)); if(array_key_exists($file_extension, $known_mime_types)){ $mime_type=$known_mime_types[$file_extension]; } else { $mime_type="application/force-download"; }; }; @ob_end_clean(); if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off'); header('Content-Type: ' . $mime_type); header('Content-Disposition: attachment; filename="'.$name.'"'); header("Content-Transfer-Encoding: binary"); header('Accept-Ranges: bytes'); if(isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2); list($range) = explode(",",$range,2); list($range, $range_end) = explode("-", $range); $range=intval($range); if(!$range_end) { $range_end=$size-1; } else { $range_end=intval($range_end); } $new_length = $range_end-$range+1; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range-$range_end/$size"); } else { $new_length=$size; header("Content-Length: ".$size); } $chunksize = 1*(1024*1024); $bytes_send = 0; if ($file = fopen($file, 'r')) { if(isset($_SERVER['HTTP_RANGE'])) fseek($file, $range); while(!feof($file) && (!connection_aborted()) && ($bytes_send<$new_length) ) { $buffer = fread($file, $chunksize); echo($buffer); flush(); $bytes_send += strlen($buffer); } fclose($file); } else die('Error - can not open file.'); die(); } set_time_limit(0); /*set your folder*/ $file_path='uploads/'."your file"; /*output must be folder/yourfile*/ output_file($file_path, ''."your file".'', $row['type']); /*back to index.php while downloading*/ header('Location:index.php'); ?> в <?php /*db connectors*/ include('dbconfig.php'); /*function to set your files*/ function output_file($file, $name, $mime_type='') { if(!is_readable($file)) die('File not found or inaccessible!'); $size = filesize($file); $name = rawurldecode($name); $known_mime_types=array( "htm" => "text/html", "exe" => "application/octet-stream", "zip" => "application/zip", "doc" => "application/msword", "jpg" => "image/jpg", "php" => "text/plain", "xls" => "application/vnd.ms-excel", "ppt" => "application/vnd.ms-powerpoint", "gif" => "image/gif", "pdf" => "application/pdf", "txt" => "text/plain", "html"=> "text/html", "png" => "image/png", "jpeg"=> "image/jpg" ); if($mime_type==''){ $file_extension = strtolower(substr(strrchr($file,"."),1)); if(array_key_exists($file_extension, $known_mime_types)){ $mime_type=$known_mime_types[$file_extension]; } else { $mime_type="application/force-download"; }; }; @ob_end_clean(); if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off'); header('Content-Type: ' . $mime_type); header('Content-Disposition: attachment; filename="'.$name.'"'); header("Content-Transfer-Encoding: binary"); header('Accept-Ranges: bytes'); if(isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2); list($range) = explode(",",$range,2); list($range, $range_end) = explode("-", $range); $range=intval($range); if(!$range_end) { $range_end=$size-1; } else { $range_end=intval($range_end); } $new_length = $range_end-$range+1; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range-$range_end/$size"); } else { $new_length=$size; header("Content-Length: ".$size); } $chunksize = 1*(1024*1024); $bytes_send = 0; if ($file = fopen($file, 'r')) { if(isset($_SERVER['HTTP_RANGE'])) fseek($file, $range); while(!feof($file) && (!connection_aborted()) && ($bytes_send<$new_length) ) { $buffer = fread($file, $chunksize); echo($buffer); flush(); $bytes_send += strlen($buffer); } fclose($file); } else die('Error - can not open file.'); die(); } set_time_limit(0); /*set your folder*/ $file_path='uploads/'."your file"; /*output must be folder/yourfile*/ output_file($file_path, ''."your file".'', $row['type']); /*back to index.php while downloading*/ header('Location:index.php'); ?> 

Модификация принятого ответа выше, который также определяет тип MIME во время выполнения:

 $finfo = finfo_open(FILEINFO_MIME_TYPE); header('Content-Type: '.finfo_file($finfo, $path)); $finfo = finfo_open(FILEINFO_MIME_ENCODING); header('Content-Transfer-Encoding: '.finfo_file($finfo, $path)); header('Content-disposition: attachment; filename="'.basename($path).'"'); readfile($path); // do the double-download-dance (dirty but worky) 

Следующий код является правильным способом реализации службы загрузки в php, как описано в следующем учебном пособии

 header('Content-Type: application/zip'); header("Content-Disposition: attachment; filename=\"$file_name\""); set_time_limit(0); $file = @fopen($filePath, "rb"); while(!feof($file)) { print(@fread($file, 1024*8)); ob_flush(); flush(); } 

попробуй это:

 header('Content-type: audio/mp3'); header('Content-disposition: attachment; filename=“'.$trackname'”'); readfile('folder name /'.$trackname); exit(); 

http://php.net/manual/en/function.readfile.php

Это все, что вам нужно. «Monkey.gif» изменится на ваше имя файла. Если вам нужно загрузить с другого сервера, «monkey.gif» изменится на « http://www.exsample.com/go.exe »,