Ведение динамически обслуживаемых файлов в APACHE - PullRequest
1 голос
/ 18 января 2010

Я подаю файлы Zip и PDF на лету через PHP, используя вывод, такой как:

header('Content-Disposition: attachment; filename="'.$project->name .'.zip"');
echo($zipfile->zl_pack());

Я не могу найти ссылки на эти загрузки в моих журналах APACHE. Разве он не зарегистрирован из-за того, что он динамический?

Нужно ли мне на самом деле записывать файл на веб-сервер, а затем подавать результат для его регистрации или я что-то упустил?

Ура, Придирается

Ответы [ 4 ]

0 голосов
/ 20 января 2010

К вашему сведению, я нашел действительно хороший обходной путь.

Часть проблемы заключалась в том, что мы хотели вызвать диалог «сохранить как», так как многие пользователи запутались в том, где файл сохраняется.Вот почему я выбрал метод

Content-Disposition : attachment

.

Лучший метод, который все еще вызывает диалог, - это добавить его в .htaccess

<Files *.zip>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>

написатьПерейдите на файловый сервер и перенаправьте страницу на zip-архив.

Конечно, мне приходится чистить каждую ночь, но он регистрируется, и он все равно заставляет их выбирать, куда они загружают файл (практически на всем, кроме Safari [всегда есть один)).

Ура, Niggles

0 голосов
/ 18 января 2010

Запрос к программе PHP, которая генерирует этот заголовок, должен быть зарегистрирован. Имя файла, указанное в заголовке размещения контента, не будет.

Я полагаю, что mod_ Perl позволит вам добавить пользовательские записи , я не знаю, предоставляет ли mod_php аналогичную функцию.

0 голосов
/ 18 января 2010

В качестве обходного пути вы можете использовать mod_rewrite, чтобы зарегистрировать файл * .zip и по-прежнему обслуживать его через PHP без фактической записи его в файловую систему, однако клиенту придется отправить два запроса.

1) Измените ваш текущий скрипт, чтобы он не создавал файл, а вместо этого помещал параметры, необходимые для создания файла, в сеанс; вместо текущего заголовка и содержимого файла вы бы поместили header('Location: '.$project->name .'.zip');

2) Это вызовет второй запрос. Поскольку запрошенный файл еще не существует, вы можете использовать mod_rewrite, чтобы изменить запрос на файл * .zip на тот же или другой скрипт PHP, который считывает параметры из сеанса и создает файл так же, как вы это делаете. сейчас. Если вы используете тот же PHP-скрипт, вы бы дополнительно позволили mod_rewrite добавить в запрос некоторый параметр, например "? Action =roduFile", а затем протестировать этот параметр в скрипте.

Таким образом, у вас будет две хорошие записи в журнале Apache без физического сохранения файла (и, вероятно, удаления его позже).

0 голосов
/ 18 января 2010

Правильно. httpd не смотрит на исходящие заголовки для регистрации. error_log() отправит сообщение в журнал ошибок httpd, но в журнал доступа что-то добавить нельзя.

...