【问题标题】:Download and rename file from Server using php script使用 php 脚本从服务器下载和重命名文件
【发布时间】:2014-06-06 09:25:55
【问题描述】:
我正在存储我的所有文件,例如“8asd98asd9as7d98asd9.file”,并从 mysql 数据库中检索“真实”文件名:id (INT) AI PK, pathOnServer TEXT NOT NULL, realFilename VARCHAR(200) NOT NULL。
我需要一个脚本来访问“www.website.com/getFile?id=2”之类的文件,该脚本会下载文件并将其重命名为“realFilename”。
如何做到这一点?
【问题讨论】:
标签:
php
file
download
rename
【解决方案1】:
您可以使用Content-Disposition HTTP 标头告诉浏览器您的文件名,然后使用readfile 加载并回显该文件。
header("Content-Type: application/octet-stream");
header('Content-Length: ' . filesize($path));
$name = basename($path);
header('Content-Disposition: attachment; filename="' . $name . '"');
readfile($path);
exit;
【解决方案2】:
我相信这段代码会起到你想要的作用
<?php
if(!is_numeric($_GET['id'])) { // We validate parameter
echo 'Wrong parameter';
exit();
}
$oDb = new mysqli("ip","user","pass","databasename"); // Connecting to database
if($oDb->connect_errno) { // Check for an error
echo 'Error';
exit();
}
$oResult = $oDb->query('SELECT `pathOnServer`, `realFilename`
FROM --tablename--
WHERE id = '.(int)$_GET['id'].'
LIMIT 1'); // make query
if($oResult->num_rows != 1) {
echo 'No file found';
exit();
}
$oQuery = $oResult->fetch_object();
header('Content-disposition: attachment; filename='.$oQuery->realFilename); // put special headers
readfile($oQuery->pathOnServer.$oQuery->id); // put the file
?>
您还可以添加带有文件大小的标题。
希望对你有帮助。