Потерянные данные сеанса при установке заголовков http (в CodeIgniter) - PullRequest
3 голосов
/ 23 марта 2011

РЕДАКТИРОВАТЬ # 2
Хорошо, проблема отличается от того, что я первоначально думал, поэтому я помещаю это «редактировать» вверх.Я также обновил заголовок вопроса (старый был «Потоковая передача звука wav из BLOB-объекта mysql»).

Теперь проблема, похоже, связана с сеансами CodeIgniter.Вышеприведенный скрипт будет запускаться только в том случае, если пользователь вошел в систему. По какой-то причине, когда я вручную устанавливаю заголовки ответа (либо с помощью php header (), либо с выходным классом codeigniters), я вижу из своих журналов, что все загружается и переинициализируетсяи что данные сеанса потеряны, так что пользователь больше не вошел в систему, поэтому скрипт фактически выдает ошибку.

Как только я удалил любое требование или ссылку на данные сеанса, звук воспроизводится нормально ... ноэто не вариант, если я не смогу аутентифицировать пользователя другим способом.Очень расстраивает.

.
.
.

** Исходный текст **

У меня есть BLOB-объект mysql, который содержит аудиоданные в формате wav.Я пытаюсь вывести его в браузер для потоковой передачи через любой плагин аудиоплеера, который браузер хочет использовать.

Аудиоплеер работает нормально, если я указываю на физический файл .wav, так что это некажется, проблема.Однако, если я укажу его на свой PHP-скрипт, я получу всплывающее окно ' Поиск подходящего плагина? ' в Firefox (который ничего не может найти) и просто пустой неактивный проигрыватель в Chrome.

Вот PHP, объект $ aud содержит информацию, полученную из базы данных:

header("Content-length: $aud->size");
header("Content-type: audio/x-wav");
echo $aud->recording;
exit();

Если я добавлю заголовок ("Content-Disposition: attachment; filename = $name "); к вышесказанному я могу загрузить файл, который затем хорошо воспроизводится во внешнем аудиоплеере, но это не то, что мне нужно.

Этот фрагмент кода является частью приложения CodeIgniter, еслиэто будет иметь значение.Я настроил маршрутизацию таким образом, чтобы /audio/$id.wav захватывал соответствующие данные и выводил их с кодом выше.

Может кто-нибудь увидеть или подумать о любой причине, по которой может быть вышене работает?

РЕДАКТИРОВАТЬ
Это заголовки, возвращаемые скриптом php:

Date: Tue, 22 Mar 2011 22:12:06 GMT
Server: Apache/2.2.16 (Ubuntu)
X-Powered-By: PHP/5.3.3-1ubuntu9.3
Set-Cookie: ci_session=<long encrypted session string>; expires=Wed, 23-Mar-2011 00:12:06 GMT; path=/
Content-Length: 12345
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: audio/x-wav

200 OK

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

Date: Tue, 22 Mar 2011 22:10:53 GMT
Server: Apache/2.2.16 (Ubuntu)
Last-Modified: Tue, 22 Mar 2011 22:08:30 GMT
Etag: "200a83-3039-49f197bfcb380"
Accept-Ranges: bytes
Content-Length: 12345
Content-Type: audio/x-wav

200 OK

Сохранение и последующее открытие файла напрямую работает .Выход PHP-скрипта в браузер отсутствует.

Ответы [ 2 ]

0 голосов
/ 23 марта 2011

Попробуйте добавить туда этот заголовок:

header('Content-Transfer-Encoding: binary');

Посмотрите, поможет ли это.

0 голосов
/ 23 марта 2011

Я бы начал исследовать эту проблему со сравнения длины содержимого HTTP, типа содержимого и всех других заголовков, отправляемых веб-сервером при указании на физический файл .wav, с заголовками, отправляемыми при попытке открыть PHP.скрипт.Я думаю, что фактическое тело контента является правильным, согласно вашему сообщению, в котором говорится, что если вы загружаете файл как вложение, его можно воспроизвести с помощью приложения аудиоплеера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...