我有以下脚本,该脚本在本地系统上运行,但在需要的 Web 托管系统上却无法运行。在本地,它可以毫无问题地下载文件。在托管时,我得到的是零字节或低字节文件,而不是整个文件。
<?php
$username = "user";
$password = "password";
$server = "ftp.domain.com";
$path = $_GET['p'];
$filename = $_GET['f'];
$file_full = $path."/".$filename;
$file_path = "ftp://".$username.":".$password."@".$server."/".$file_full;
$fsize = filesize($file_path);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
//header("Content-Type: $mtype");
header("Content-Type: application/octet-stream");
//header("Content-Disposition: attachment; filename=\"$asfname\""); */
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);
// download
// @readfile($file_path);
$file = @fopen($file_path,"rb");
if ($file) {
while(!feof($file)) {
print(fread($file, 1024*8));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
}
?>
我的主机提供商是 Hostmonster(如果有帮助的话)。
如果你想知道,我知道我可以通过 FTP 下载链接,但我需要强制用户选择“另存为”还是“打开”,因此需要脚本。
答案1
您正尝试通过 Web 服务器传输/转发远程 FTP 内容;那里可能会出现很多问题。
最明显的情况是,如果 FTP 机器不支持检索文件大小,并且计算的 fsize 不正确。
我们只能说这几乎从来都不是正确的解决方案。