我正在創建pdf文件,我想用php下載多個文件。我可以寫這樣的標題嗎?php header在循環中下載多個文件
<?php
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
readfile('original.pdf');
?>
in while loop?
我正在創建pdf文件,我想用php下載多個文件。我可以寫這樣的標題嗎?php header在循環中下載多個文件
<?php
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
readfile('original.pdf');
?>
in while loop?
簡短的答案是否定的,你需要一些東西來告訴客戶端內容結束和新的標題開始。你可以或者使用zip實用程序並將它們打包下載,或者你可以看一下也許是一個MIME電子郵件格式(它在整個文檔中使用分隔符),但我不確定沒有明確地通過HTTP協議稱它爲「電子郵件」包。
我只是推薦使用zip實用程序。生成你需要的PDF,然後打包併發送出去。
不可以。HTTP不支持單個下載中的多個文件。有一些關於在HTTP消息中添加MIME風格語義的討論,因此您可以在一次傳輸中嵌入多個響應,但這並沒有到任何地方。
除非你做了類似於壓縮服務器上的多個文件並傳輸該zip的內容,否則無法爲每個請求下載多個文件。
不可以。該標準僅允許爲每個請求下載單個文件。如果上面提出的ZIP方法不可行,那麼您可以使用帶有JavaScript超時的基頁來將用戶重定向到每個文件,一次一個。例如:
<script type="text/javascript">
var file_list = new Array(
'http://www.mydomain.com/filename1.file',
'http://www.mydomain.com/filename2.file',
'http://www.mydomain.com/filename3.file'
);
for (var i=0; i < file_list.length - 1; i++) {
setTimeout(function() {
document.location = file_list[i];
}, i * 1000);
}
</script>
<h1>Please wait</h1>
<p>Your download will start in a moment.</p>
這是100%不可能的。更改文檔位置時。 Java腳本自動停止... – 2014-02-28 06:47:23
第一步:創建一個index.php文件,並添加以下代碼。
<?php
$path = $_SERVER['DOCUMENT_ROOT']."/your_folder/";
$files = scandir($path);
$count=1;
foreach ($files as $filename)
{
if($filename=="." || $filename==".." || $filename=="download.php" || $filename=="index.php")
{
//this will not display specified files
}
else
{
echo "<label >".$count.". </label>";
echo "<a href="download.php/?filename=".$filename."">".$filename."</a>
";
$count++;
}
}
?>
第2步:創建一個download.php文件並添加以下代碼。
<?php
function output_file($file, $name, $mime_type='')
{
/*
This function takes a path to a file to output ($file), the filename that the browser will see ($name) and the MIME type of the file ($mime_type, optional).
*/
//Check the file premission
if(!is_readable($file)) die('File not found or inaccessible!');
$size = filesize($file);
$name = rawurldecode($name);
/* Figure out the MIME type | Check in array */
$known_mime_types=array(
"pdf" => "application/pdf",
"txt" => "text/plain",
"html" => "text/html",
"htm" => "text/html",
"exe" => "application/octet-stream",
"zip" => "application/zip",
"doc" => "application/msword",
"xls" => "application/vnd.ms-excel",
"ppt" => "application/vnd.ms-powerpoint",
"gif" => "image/gif",
"png" => "image/png",
"jpeg"=> "image/jpg",
"jpg" => "image/jpg",
"php" => "text/plain"
);
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";
};
};
//turn off output buffering to decrease cpu usage
@ob_end_clean();
// required for IE, otherwise Content-Disposition may be ignored
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');
/* The three lines below basically make the
download non-cacheable */
header("Cache-control: private");
header('Pragma: private');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// multipart-download and download resuming support
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);
}
/* Will output the file itself */
$chunksize = 1*(1024*1024); //you may want to change this
$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);
print($buffer); //echo($buffer); // can also possible
flush();
$bytes_send += strlen($buffer);
}
fclose($file);
} else
//If no permissiion
die('Error - can not open file.');
//die
die();
}
//Set the time out
set_time_limit(0);
//path to the file
$file_path=$_SERVER['DOCUMENT_ROOT'].'/your_folder/'.$_REQUEST['filename'];
//Call the download function with file path,file name and file type
output_file($file_path, ''.$_REQUEST['filename'].'', 'text/plain');
?>
更改「您的文件夾」與你在這兩個文件夾的名稱。
不適用於PHP。但你應該能夠用一些Javascript來實現這一點。
從Javascript中創建循環,以PHP頁面爲源創建新框架。
雖然有些瀏覽器會警告他們的用戶有多個文件下載,但一旦他們接受它應該可以工作。
希望這可以幫助別人尋找答案。
以防萬一有人仍在尋找解決這個問題..我在這裏找到它..blog.drinkncode.com /下載多個文件通過循環在PHP – 2016-02-11 19:49:32