ФОН:
Я создал веб-приложение для клиента, которое позволяет им сохранять файлы Excel на сервер.
Когда я впервые создавал приложение, я сохранял эти файлы в папке загрузки и связывал их непосредственно со страниц приложения (например, «Файл»).
По размышлениям это было не очень безопасно, поэтому я изменил файл загрузчика, чтобы хранить файлы над корневым веб-каталогом и тем самым предотвратить прямой доступ.
Я доставляю файлы обратно пользователю посредством php-файла 'retriever' (например, File). Файл (после некоторых проверок подлинности пользователя) выглядит так:
header("Content-type: application/octet-stream");
$_file = $_GET['filename'];
$sPattern = '/\s*/m';
$sReplace = '';
$_strippedfile = preg_replace( $sPattern, $sReplace, $_file );
header("Content-Disposition: attachment; filename=".$_strippedfile."");
echo file_get_contents('/var/www/uploads/'.$_file);
ПРОБЛЕМА:
Все вышеперечисленное работает нормально, если только пользователь не выберет «открыть», а не «сохранить» в Internet Explorer. Excel пытается открыть файл и выбрасывает ... не удалось найти. Проверьте правильность написания имени файла и убедитесь, что местоположение файла указано правильно.
Я погуглил эту ошибку, и похоже, что это связано с длиной имени файла (включая путь). К сожалению, путь к временным интернет-файлам находится вне моего контроля, поэтому мне было интересно, есть ли способ заставить пользователя сохранить файл, а не открыть его? [Очевидно, это можно настроить локально, но а) мои клиенты не очень техничны и б) потому что они находятся в корпоративной сети, все права администратора связаны.]
Любые другие идеи приветствуются.