У меня есть несколько файлов, которые хранятся на сервере, но не в каталоге public_html. Идея состоит в том, что пользователи, которые вошли в систему, могут загружать файлы, используя переменные $ _SESSION, чтобы проверить, вошли ли они в систему, но если кто-то другой использует свой компьютер, они не могут видеть прямой путь к файлу в истории браузера, и даже если они он находится вне общедоступной html-директории, поэтому недоступен.
Я знаю, что для этого мне нужен сценарий, но я не могу понять, как это сделать где угодно, было бы очень полезно, если кто-нибудь скажет мне, как это сделать.
Вы можете использовать readfile
для получения вывода в качестве файла, о котором идет речь. НАПРИМЕР:
$file = '/absolute/path/to/file.ext'; 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; }
Если это вне папки public_html, создайте в файле php-скрипт для file_get_contents.
вот часть скрипта, который я использую
if ($type == "1" && $method == "f"){ header('Content-type: application/pdf'); } else { header('Content-type: image/jpeg'); } $fp = fopen($uploaded_dir . $result['theimage'], "r"); while ($data = fread($fp, 1024)){ echo $data; } fclose($fp);