mod rewrite — запуск скрипта PHP перед прямым доступом к mp3-файлу

Я пытаюсь добавить в Google Analytics статистику, касающуюся прямого доступа к файлам mp3 (например, через iTunes) на этом сервере. Я хочу запустить эту функцию PHP и доставить файл, как будто не было перенаправления.

Эта часть mod_rewrite, кажется, работает нормально. Мои сценарии загрузки на месте и потоковый проигрыватель могут получать доступ к mp3-файлам, не вызывая правила.

RewriteCond %{HTTP_REFERER} !^http://(www\.)?mysite\.com [NC]
RewriteRule ^audio/episodes/([^/\.]+).mp3$ /audio/episodes/google_analytics_mp3.php?mp3=$1&redirected=1 [L,QSA]

Однако моя первоначальная попытка доставки mp3 после запуска скрипта PHP не доставляет файл для прямого доступа. Просто белый экран в браузере и ошибка в iTunes.

if ($id = intval($_REQUEST['mp3'])) {
$e = new Episode;
list($ep) = $e->retrieve("id = $id");
if ($ep) {
ga_send_pageview(basename($ep->audio_link), $ep->google_title());
if ($_GET['redirected'] == 1) {
$fileLocation = '/'.$ep->audio_link;
header("Location: $fileLocation");
exit();
}
}
}

Также попробовал отправку header('Content-Type: audio/mpeg'); перед заголовком местоположения. Тот же результат.

Моя вторая попытка сделать браузер загрузкой файла в виде вложения, которое не будет работать для таких программ, как iTunes, и не является желаемым результатом.

if ($_GET['redirected'] == 1) {
$fileName = basename($ep->audio_link);
$fileLocation = $_SERVER['DOCUMENT_ROOT'].'/audio/episodes/'.$filename;
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header('Content-length: ' . filesize($fileLocation));
header('Content-Disposition: attachment; filename="'.$fileName.'"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile($fileLocation);
exit();
}

Обновить: Предложение Пера Мартина также попробовало этот второй подход, но с расположением, установленным в линию header('Content-Disposition: inline; filename="'.$fileName.'"'); но Chrome просто показывает белый экран. Если я отключу правило для удаления скрипта из уравнения, Chrome покажет родной mp3-плеер и воспроизводит файл.

Как я могу просто разрешить нормальный доступ к mp3-файлу после запуска скрипта PHP?

1

Решение

У меня ранее были проблемы с Content-length: Вы можете попробовать закомментировать эту строку. Я думаю, что программа чтения файловой системы отличается от квантификатора размера файлов браузера, поэтому браузер ожидает (и получает) 99% файла, который, очевидно, затем является неполным, поэтому он не может вывести файл, поскольку он воспринимает его как неполные данные.

File System File Size as read !== browser file size

Однако я не уверен, почему это так.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]