2013-12-17 4 views
0

Я новичок в PHP и пробовал свои руки. Я создаю файл и записываю его обратно. Создание файла на каком-то пути и запись на него, отлично работает для меня. Но когда я пытаюсь загрузить тот же файл с одного и того же пути, его загрузка не будет загружаться, а я получаю пустой файл.в PHP Как загрузить файл из его пути к файлу?

header('Content-type: text/xml'); 
    header("Content-Disposition: attachment; filename=".'check.xml'); 
    header("Content-Length: " . filesize('./download/'.$_SESSION['user_name'].'/check.xml')); 
    readfile('download/'.$_SESSION['user_name'].'/check.xml'); 
      exit; 

Привет, Спасибо всем. Но я видел очень необычную вещь. Когда я загрузил файл, у меня не было полного файла.

Почему этот случай

+1

Вы уверены, что путь к файлу правильный? ./download будет каталогом, загружаемым в корневой каталог сервера. – ollieread

+0

Если этот файл завершен, а выходы загружаемых файлов находятся на одном уровне и находятся в одном каталоге. Разве это не правильно? – Aada

+0

Я отправил ответ, отражающий это, надеюсь, что это поможет :) – ollieread

ответ

1

Попробуйте удалить ./ с начала FilePath, как следует:

header('Content-type: text/xml'); 
header("Content-Disposition: attachment; filename=".'check.xml'); 
header("Content-Length: " . filesize('download/'.$_SESSION['user_name'].'/check.xml')); 
readfile('download/'.$_SESSION['user_name'].'/check.xml'); 
exit; 

с файловыми системами Linux, ./ означает корень, так что это эквивалентно / и ../ означает каталог выше текущего каталога. Лучше всего использовать абсолютные пути к файлам, но достаточно просто удалить ./.

+0

Это сработало. спасибо за тонну за то, что вы меня поняли. – Aada

+0

Отлично, и вы же не забудьте отметить как выбранный ответ :), также благодарит Фреда за то, что он стал более читаемым. – ollieread

+0

Привет, ollieared, загруженный файл не содержит полный текст, как тот, который я его создаю: - | – Aada

0

Вам также нужно очистить буферы записи из PHP с помощью flush()

Here является хорошей рабочей функции для загрузки файла

Вот версия адаптирована с этой страницы:

public static function downloadFile($fileName) { 
    $filePath = $fileName; 
    $size = filesize($filePath); 

    // Taken from http://w-shadow.com/blog/2007/08/12/how-to-force-file-download-with-php/ 
    header("Content-type: text/plain"); 
    header("Content-Disposition: attachment; filename=\"$fileName\""); 
    header("Content-Transfer-Encoding: binary"); 
    header("Accept-Ranges: bytes"); 
    // The three lines below basically make the download non-cacheable 
    header("Cache-control: private"); 
    header("Pragma: private"); 
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
    header("Content-Length: " . $size); 

    if ($file = fopen($filePath, "r")) { 
     $buffer = fread($file, $size); // this only works for small files! 
     print $buffer; 
     flush(); 
     fclose($file); 
    } 
} 
Смежные вопросы