У меня есть следующий сценарий, который работает в локальной системе, но не в системе, размещенной в Интернете (где он должен быть). Локально он скачивает файл без проблем. При размещении я получаю файлы с нулевым или младшим байтом вместо всего файла.
<?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, но мне нужно заставить пользователя выбирать, «Сохранить как» или «Открыть», отсюда и сценарий.
Вы пытаетесь передавать / пересылать удаленный FTP-контент через свой веб-сервер; дюжина вещей может пойти не так.
Наиболее очевидный из них - если FTP-машина не поддерживает получение размера файла и вычисленный fsize неверен.
Скажем так, это почти никогда не решение.