За последние 24 часа нас посетил 18081 программист и 1599 роботов. Сейчас ищут 896 программистов ...

Проблемма с видео

Тема в разделе "PHP и базы данных", создана пользователем Vangok, 4 окт 2010.

  1. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    тут уже надо знать что именно проигрывателю нужно, заголовки послать.

    Вот пример для картинки

    Код (Text):
    1. <?php
    2. $sImage = 'imagename.jpg';
    3. header("Content-Type: image/jpeg");
    4. header("Content-Length: " .(string)(filesize($sImage)) );
    5.  
    6. echo file_get_contents($sImage);
     
  2. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Отсылаются 2 заголовка - тип и размер, а после них - выводится в поток содержимое.
    Узнай что нужно твоему плейеру - и пришли ему это)))
     
  3. Vangok

    Vangok Активный пользователь

    С нами с:
    4 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Вот код страницы attacment.php
    Код (Text):
    1.  
    2. $sql = "SELECT path FROM mbase WHERE name=".$_GET["filename"];
    3. if (!$sql) die(mysql_error());
    4. $result = mysql_query($sql);
    5. $result = mysql_fetch_row($result);
    6. $path = $result[0];
    7. $sVideo = $path;
    8. header('Content-Type: video/x-flv');
    9. header('Content-Type: video/3gpp');
    10. header('Content-Type: video/ogg');
    11. header('Content-Type: video/avi');
    12. header('Content-Type: video/x-msvideo');
    13. header('Content-Type: video/mpeg');
    14. header('Content-Type: video/x-ms-wmv');
    15. header('Content-Type: video/mpg');
    16. header('Content-Type: video/x-ms-asf');
    17. header("Content-Length:".(string)(filesize($sVideo)));
    18. return $sVideo;
    Передаю этот аттачмент с filename=hashу файла из база И все равно не воспроизводит((
    То есть вот таким образом:
    Код (Text):
    1.  
    2. $sql="SELECT name FROM mbase WHERE iden=".$_GET["iden"];
    3. if (!$sql) die(mysql_error());
    4. $query = mysql_query($sql) or die(mysql_error());
    5. $query = mysql_fetch_row($query);
    6. $path = $query[0];
    7.  
    8. <PARAM NAME="URL" VALUE="attachment.php&filename=<?echo $path;?>">
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тяжелый случай.
     
  5. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    блин, ну зачем же ему все заголовки скопом????
    Один нужен, для конкретного файла, который отправляешь.

    Вот честно скажу - мне лень разбираться с твоим плейером и искать что ему нужно посылать. Есть Гугл - и вперед. Удачи.

    Приведенный пример с картинками и путем в .htaccess работает 100%, у себя проверял.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да, еще на дорожку: отдавай скриптом спокойно и будь счастлив. Имя файла никого не ебет, можешь отдавать любой мусор действительный 10 минут. А при следующем запросе снова геренить его на основе айпи, агента и какойнить матери. Тогда уж точно если за 10 минут не скачают, то уже никогда не найдут по этому адресу файл.

    что правда не мешает человеку подсмотреть сам запрос на имя этого файла =)
     
  7. Vangok

    Vangok Активный пользователь

    С нами с:
    4 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    А если у меня разные расширения для файлов. Вот я и передаю все заголовки.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Vangok
    хватит дебилизмом страдать. пойди погуляй 15 минут, покури, потом возьми бумажку, на нее напиши что как ты хочешь сделать, в какой последовательности и т.п.

    файл при заливке переименовывай в случайную последовательность символов, название и описание и это дело - в БД, туда же дописывай и его тип в миме. Потом при выдаче файла скриптом бери тип из бд, название вобще пох какое - я уже отписался по этому поводу, и отдавай файл на плеер. Счастье-счастье, радость-радость.

    миме кстати при заливке есть в массиве $_FILES, а если нету - можно отловить чемнить типа этого http://ru2.php.net/manual/en/function.m ... t-type.php
     
  9. Vangok

    Vangok Активный пользователь

    С нами с:
    4 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Собственно говоря попробовал вызвать страницу аттачмента И она вывела ошибку

    Unknown column '2921f158e885f9b18a89c7b50e4590fb' in 'where clause'

    Если делать просто по иду то выводит путь.
     
  10. Vangok

    Vangok Активный пользователь

    С нами с:
    4 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Поздравьте меня у меня получилось выудить хоть что-то из базы, но воспроизведение идет всего 9 секунд и собственно говоря нет картинки.
    Вот код:
    Код (Text):
    1.  
    2. $index = $_GET["index"];
    3. $sql = "SELECT path FROM spis_menu WHERE iden=".$index;
    4. if (!$sql) die(mysql_error());
    5. $result = mysql_query($sql) or die(mysql_error());
    6. $result = mysql_fetch_row($result) or die(mysql_error());
    7. $path = $result[0];
    8. $sVideo = $path;
    9. $mime = basename($sVideo);
    10. header('Content-Type: '+returnMIMEType($mime));
    11. header("Content-Length:".(string)(filesize($sVideo)));
    12. echo file_get_contents($sVideo);
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Советую никому и никогда не говорить адрес где этот скрипт стоит... (ибо его тут-же любой ламер приспособит под свои нужды, например как спам-сервер)
     
  12. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Vangok

    Слушай, ну сколько ж можно разжевывать....

    В базе у тебя таблица attachments

    В ней поля iden, path, mime-type - это как минимум, можно еще название, можно filesize считать сразу при загрузке.
    Так даже лучше.

    делаешь запрос - $sql = "SELECT path, mime-type FROM attachments WHERE iden = " . $index;
    $result = mysql_query($sql) or die(mysql_error());

    $video = mysql_fetch_assoc($result) or die(mysql_error());

    Получаешь массив, в котором есть элементы $video['path'], $video['mime-type']

    А дальше

    header('Content-Type: ' . $video['mime-type']));
    header("Content-Length:".(string)(filesize( $video['path'])));
    echo file_get_contents($video['path']);
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  14. Vangok

    Vangok Активный пользователь

    С нами с:
    4 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Так у меня так и сделано, но воспроизводит всего 9 секунд и то всякую белеберду и картинки нету
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Vangok
    прости, чел, но это все ни к пхп ни к базам данных отношения не имеет =)
     
  16. Vangok

    Vangok Активный пользователь

    С нами с:
    4 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Вот написал код:
    Код (Text):
    1.  
    2. $index = $_GET["index"];
    3. $sql = "SELECT path,myme_type,size FROM spis_menu WHERE iden=".$index;
    4. if (!$sql) die(mysql_error());
    5. $result = mysql_query($sql) or die(mysql_error());
    6. $row = mysql_fetch_assoc($result) or die(mysql_error());
    7. header('Content-Type: '.$row['myme_type']);
    8. header("Content-Length: ".$row['size']);
    9. echo file_get_contents($row['path']);
    Данный скрипт находится в отдельном файле attachment.php.
    Передаю в проигрыватель по такой ссылке
    Код (Text):
    1. index.php?page=attachment&index=0&filename=2921f158e885f9b18a89c7b50e4590fb
    Она воспроизводит ровно 9 секунд и то какую-то белеберду и картинки нету.
    Если я не прав в коде скажите в каком месте.
     
  17. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Варианты:
    1) не туда передаешь. Еще раз проверь код для вставки плейера. Есть 2 места где указан src - в один надо передать путь до скрипта самого плейера, во второй - путь до файла, который воспроизводится.
    Как там правильно я хз - плейеры бывают разные.
    2) проверить пути - может быть где-то пропущен слеш или точка.
    3) реальный mime-type файла не соответствует тому заголовку который посылаешь
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Vangok
    откуда проигрыватель берет то что проигрывать?
     
  19. Vangok

    Vangok Активный пользователь

    С нами с:
    4 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Спасибо за наводку насчет двух src действительно если в тег парам передавать сам файл а в тег embed путь до скрипта то возпоризводит все на ура. Все получилось.
     
  20. Vangok

    Vangok Активный пользователь

    С нами с:
    4 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Но все равно не защищенно получается как то. в одном месте значит поставили защиту на невидимость файла во втором открыли доступ.
    Если только ява скрипт какой нить допом написать и запретить пользователю сохранять страницу
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Vangok
    я тебе предложил ссылки на 10 минут.

    способа скрыть проигрываемое во время проигрывания - не существует =)
     
  22. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Vangok

    Не забывай, чтобы файл можно было воспроизвести он должен быть доступен браузеру)))
    Если отлистаешь страницу - в самом начале я спрашивал - от чего хочешь защититься?
    Ответ был - вынести файл из public директории. Этого мы успешно добились.