LINUX.ORG.RU

php и ffmpeg (быдлокодинг)

 ,


1

1

Пытаюсь написать простейший пример конвертации видео при загрузке. Оно работает, но проблема в том, что работает если ролик не превышает 2 мегабайт. Не могу разобраться в чем проблема.

Код:

<?php
echo '
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title>Конвертирование видео на лету</title>

<style>
.flowplayer, #video {
margin: 0;
width: 460px;
height: 300px;
}
#video {
background: #000000;
}
</style>

<link rel="stylesheet" type="text/css" href="skin/functional.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="flowplayer.min.js"></script>

</head>
<body>
<h2><b>Форма для загрузки видео (макс. 30 мегабайт):</b></h2>
<form action="index.php" method="post" enctype="multipart/form-data">
<input type="file" name="filename"> <input type="submit" value="Загрузить и конвертировать в FLV">
</form>';
?>

<?php
if(isset($_FILES["filename"])) {
if($_FILES["filename"]["size"] > 1024*30*1024) {
echo ("Размер видео превышает 30 мегабайт");
exit;
}
// Проверяем загружен ли видеофайл
if(is_uploaded_file($_FILES["filename"]["tmp_name"])) {

// Если файл загружен успешно, перекодируем его
//move_uploaded_file($_FILES["filename"]["tmp_name"], "loadedvideo/".$_FILES["filename"]["name"]);
$tmp_name = $_FILES["filename"]["tmp_name"];
$new_name = "loadedvideo/load.flv";

if (file_exists($new_name)) {
unlink($new_name);
}

$cmd = "ffmpeg -i $tmp_name -f flv $new_name";
$converting = system($cmd);
}
else {
echo("Ошибка загрузки видео");
}
}
?>

<?php
echo '
<br>
<h2>Ваше сконвертированное FLV-видео:</h2>
<div id="video">
<div class="flowplayer" data-swf="flowplayer.swf" >
<video>
<source type="video/flv" src="loadedvideo/load.flv"/>
</video>
</div>
</div>

</body>
</html>';
?>


Из-за таких как ты PHP и обрёл славу говноязычка. Хотя проблема-то лично в тебе, а не в PHP.

1. Почитай хоть немного про MVC и пойми, что смешивать CSS, HTML и PHP — это не просто плохая идея, это наихудшая идея, которая только могла бы прийти программисту в голову.

2. Зачем ты сделал newline перед доктайпом? Это более чем вероятно вызовет проблемы в будущем. Я про этот кусок:

echo '
<!doctype html>

3. Конвертировать видео на лету, в том же процессе просто напросто неумно. Присланный файл нужно сохранять на диске и добавлять задачу по конвертации в очередь задач какую-нибудь (activemq, zeromq, gearman, celery и т.д.). Затем воркер-обработчик задач и начнёт обрабатывать видео в фоновом режиме, когда будет свободен.

То, что сделал ты имеет просто огромную массу ограничений и недостатков: пользователь должен очень долго ждать ответа страницы, а не наблюдаль AJAX'овый прогресс бар; выполнение PHP-процессов всегда ограничено по времени в несколько десятков секунд; твой подход точно не будет работать если 20 пользователей одновременно попробуют загрузить видео и т.д.

resurtm ★★★ ()
Последнее исправление: resurtm (всего исправлений: 2)
Ответ на: комментарий от resurtm

Это все ясно и совершенно не важно. Про MVC вообще смешно, я как бы цмс не собираюсь писать, это всего лишь пробный скрипт, использоваться в таком виде он естественно не будет. Проблема заключается в том, что должен работать, а не работает, даже если все убрать что для конвертации, раскомментить move_uploaded_file, то все равно не работает, не заливаются файлы больше двух мегабайт, убирание ограничения на размер без толку...

makeB ()
Ответ на: комментарий от makeB

быдлокодинг во всей красе. [sarcasm mode on]да MVC это смешно.[sarcasm mode off]

mkv1313 ()
Ответ на: комментарий от makeB

Проблема заключается в том, что должен работать, а не работает, даже если все убрать что для конвертации, раскомментить move_uploaded_file, то все равно не работает, не заливаются файлы больше двух мегабайт, убирание ограничения на размер без толку...

1. Если используется NGINX, то покрути client_max_body_size. Если Apache, то тоже есть наверное что-то (не разбираюсь в нём).

2. Добавь в форму скрытое поле с названием MAX_FILE_SIZE.

3. В php.ini ты точно смотрел, насколько я понял, но перепроверь ещё раз следующие переменные: max_execution_time, max_input_time, memory_limit, post_max_size, upload_max_filesize.

4. Какой HTTP статус возвращает веб-сервер? Покажи все хидеры запроса и ответа (посмотреть можно через Firebug или встроенные в Opera/Chrome средства).

Что в логах PHP и логах веб-сервера? Что показывает HTTP-сниффер?

Про MVC вообще смешно, я как бы цмс не собираюсь писать, это всего лишь пробный скрипт, использоваться в таком виде он естественно не будет.

Даже примеры и тесты лучше приучать делать себя правильно. Тем более с фреймворками (Yii, Symfony2, Zend Framework) это не так уж и сложно.

resurtm ★★★ ()
Последнее исправление: resurtm (всего исправлений: 1)
Ответ на: комментарий от resurtm

Еще один любитель ынтерпрайзного говнеца, давай еще скажи что писать надо на ruby или django.

anonymous ()
Ответ на: комментарий от r_asian

На твоём локалхосте в твоём присутствии.

Почему же, можно саппорт бесплатного hostinger.ru попросить поставить ffmpeg - интересно каким матерным словом пошлют?

makeB ()

А в php.ini ковырнуть и upload_max_filesize = 2M заменить на upload_max_filesize = 32M не судьба? Прежде чем использовать инструмент, его настроить нужно. Вы и ssh с дефолтными настройками юзаете?

lucentcode ★★★★★ ()
Ответ на: комментарий от resurtm

Добавь в форму скрытое поле с названием MAX_FILE_SIZE.

Каб он ещё про $_FILES[$filename]['error'] вспомнил…

Тем более с фреймворками (Yii, Symfony2, Zend Framework) это не так уж и сложно.

Слишком толсто.

Deleted ()
Ответ на: комментарий от Deleted

Тем более с фреймворками (Yii, Symfony2, Zend Framework) это не так уж и сложно.

Слишком толсто.

Что именно? Полноценный готовый сайт, пригодный для тестов и проверок мыслей на Yii я получаю после ввода одной команды в терминале. Занимает это секунд 15 от силы.

resurtm ★★★ ()
Ответ на: комментарий от Deleted

Помнится, базка там настраивалась отдельно.

Ну, это уже да. Правда и тут ну от силы 5—7 минут уйдёт.

Я обычно накатываю вот эту БД, добавляю свои таблицы по вкусу и тестирую что нужно. ActiveRecord-модели генерируются при помощи кодогенератора (Gii). Настройки БД и кодогенератора надо раскомментировать в конфиге.

Я, наверное, просто руку набил в деле создания тестового приложения. :-)

resurtm ★★★ ()
Ответ на: комментарий от resurtm

Я, наверное, просто руку набил в деле создания тестового приложения. :-)

Вот-вот. Хотя мне со своей стороны предложить нечего, потому что мой любимый фреймворк настолько маленький, что в нём нет поддержки моей любимой бд. Пришлось допиливать руками, да.

Deleted ()
Последнее исправление: fargred (всего исправлений: 1)

Настройки php.ini смотрите...

А именно максимально допустимый размер загружаемого файла...

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.