Можно ли запустить файл PHP с HTML на сервере - PullRequest
1 голос
/ 04 апреля 2020

Обычно, когда у вас есть файл .PHP и клиент запрашивает его, код PHP запускается на сервере, а HTML и JavaScript отправляются клиенту.

Вопрос

Возможно ли, чтобы сервер запросил веб-страницу (локальную) и запустил на сервере код PHP и HTML с JavaScript? Я создал один .html файл, который после 3 секунд обработки локально создает данные изображения для миниатюры данного видео.

Почему

Мне нужно создать миниатюру для видео , Я использовал виртуальный хостинг, и мой хостинг-провайдер не поддерживает ffmpeg. Однако вы можете создавать эскизы, используя canvas и JavaScript. Я уже оказал большое давление на клиента. Если это возможно, время загрузки и выгрузки будет значительно меньше, чем при использовании клиента.

Попытки

Я пытался использовать file_get_contents(), но он не запускает код (делает смысл). Есть ли способ, которым я мог бы открыть и запустить его в течение x секунд, а затем получить содержимое?

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

Моя последняя попытка заключалась в использовании new DOMDocument(). Я даже не мог загрузить страницу, хотя. Во-первых, я не могу разобрать его с тегом video. Это выдает эту ошибку:

Warning: DOMDocument::load(): Specification mandates value for attribute controls in 
file:\path\to\html\document.html, line: 53 in C:\path\to\php\document.php on line 50

Если бы я удалил тег видео (который требуется), я получаю ошибки при синтаксическом анализе моего JavaScript. Так что эта попытка также не сработала.


Есть ли способ, которым я мог бы PHP обработать код (для чего-то на сервере) в течение x секунд до получения содержимого? Это позволило бы время для создания данных миниатюр. Если есть другой способ сделать это без использования ffmpeg на сервере, это было бы здорово.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Итак, как я уже упоминал в комментариях, я собираюсь объяснить только вариант (не самый лучший и просто отвечающий за необходимость запуска html кода!)

Где это сделать?

Лично я предпочитаю делать это, когда видео загружается браузером администратора, и самое лучшее, что вы можете сделать это как часть процедуры публикации.
Итак, на странице, где вы хотите, чтобы этот процесс был выполнен, поместите невидимый iframe, подобный этому.

<iframe id="myIframe" style="display: none;"></iframe>

Как начать процесс?

Я не знаю то, как вы используете для загрузки видео (и это действительно не так важно!), но давайте предположим, что вы хотите использовать formdata. После загрузки видео вам нужно знать что-то уникальное для адресации видео (скажем, идентификатор). Поэтому после загрузки видео мы можем получить код типа id:20, initiateThumbnail:true в качестве результата json данных. Тогда мы можем просто использовать этот скрытый iframe в качестве браузера, о котором вы просили, вот так:

$("#myIframe").attr("src","dothething.php?video=20");

Теперь сделайте то, что вы когда-либо хотели в нем, и измените его содержимое после того, как оно будет сделано. Теперь вам нужно дождаться результата!

$('#myIframe').load(()=>{
    let result = $("#myIframe").contents();
    // checking result!
});

Как вы уже думали, вы можете обработать любые ошибки, обработав результат.

Примечания

  1. Прослушиватель событий, который мы использовали для iframe (iframe.load), запускается, когда вы также инициируете создание эскиза. Так что будьте осторожны с процессом проверки результата (содержимого этого iframe!)
  2. Если вы не используете ajax или formdata, просто действие вашей формы - это то, что я использовал как iframe.
  3. Один вопрос? Что произойдет, если сетевое соединение прекратит работу во время этого процесса? Простой ответ! Вы можете проверить таким образом, существует ли миниатюра или нет. Если нет, вы можете создать его один раз, когда пользователь запросит его в своем браузере, загрузить его обратно на сервер и сохранить навсегда (как вы это делали в панели администратора!)
0 голосов
/ 04 апреля 2020

Я думаю, что нет другого способа создать миниатюру на сервере php, чем с помощью ffmpeg. Полагаю, единственное, что вы можете сделать, - это принудительно генерировать холст при загрузке страницы, если вы этого еще не сделали.

В любом случае вы пытаетесь сделать что-то не так. Php не оценивает код html, это просто препроцессор, а не интерпретатор, как браузер. Вы можете ждать все время в мире, но вы никогда не получите содержимое изображения, которое будет генерировать только браузер.

...