Назад | Перейти на главную страницу

Сценарий PHP не работает в размещенной системе

У меня есть следующий сценарий, который работает в локальной системе, но не в системе, размещенной в Интернете (где он должен быть). Локально он скачивает файл без проблем. При размещении я получаю файлы с нулевым или младшим байтом вместо всего файла.

<?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 неверен.

Скажем так, это почти никогда не решение.