Файл ленты за пределами общедоступного html


У меня возникли проблемы с загрузкой файла пользователю извне "public_html", который является папкой, к которой у всех есть доступ через http.Ex. www.website.com /все, что следует после /, является public_html. Я уверен, что вы все знаете, о чем я говорю.

Итак, у меня есть этот скрипт, который должен прочитать файл (образец.pdf) с (точки зрения сервера) /изображения/защищенный/, но PHP не найдет мой файл. Я делаю это неправильно?

<?php
$file = '/images/protected/sample.pdf';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
} else {
    echo "404 - FILE NOT FOUND!<br />\n";
    echo "File: $file";
}
?>

Каждый раз, когда я выполняю этот сценарий, я получаю 404 - FILE NOT FOUND!<br />\n вместо загрузки файла.

Author: JJJ, 2011-10-25

2 answers

Вы должны указать абсолютный системный путь. В настоящее время вы запрашиваете файл по адресу /images/..., а не /var/www/hosts/whateverdomain/images/....

$file = $_SERVER['DOCUMENT_ROOT'].'/images/protected/sample.pdf';

Если ваш файл действительно находится по адресу /images/protected/, убедитесь, что у вас есть достаточные разрешения для чтения этого файла.

 4
Author: Rob W, 2011-10-24 20:31:56

Оказывается, я на общем хостинге, поэтому правильным "корневым" путем для моего сайта был /home/me/

 0
Author: Axel Latvala, 2011-10-28 15:11:27