PHP 脚本在托管系统上不起作用

PHP 脚本在托管系统上不起作用

我有以下脚本,该脚本在本地系统上运行,但在需要的 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 不正确。

我们只能说这几乎从来都不是正确的解决方案。

相关内容