getUserMedia выдает «Использование неопределенной константы ...» - PullRequest
0 голосов
/ 18 июня 2019

Я недавно перенес свой сайт на PHP 7.3.Есть поле ввода, в котором я разрешаю пользователю загружать изображение с помощью своего мультимедийного устройства.После обновления я получаю несколько ошибок «Использование неопределенной константы ...».

Вот код PHP:

function hasGetUserMedia() {
  return !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);
}

if (hasGetUserMedia()) {
  echo '<input type="file" accept="image/* application/pdf" capture="camera" name="expimage" id="expimage" onchange="setExif(this.files)" />';
} 

Хотя код работает, на веб-странице отображаются следующие предупреждения.:

Warning
: Use of undefined constant navigator - assumed 'navigator' (this will throw an Error in a future version of PHP)

Warning
: Use of undefined constant mediaDevices - assumed 'mediaDevices' (this will throw an Error in a future version of PHP) 

Warning
: Use of undefined constant navigator - assumed 'navigator' (this will throw an Error in a future version of PHP)

Warning
: Use of undefined constant mediaDevices - assumed 'mediaDevices' (this will throw an Error in a future version of PHP)

Warning
: Use of undefined constant getUserMedia - assumed 'getUserMedia' (this will throw an Error in a future version of PHP)

Я слежу за WebRTC.Какой новый формат для определения констант?

1 Ответ

2 голосов
/ 18 июня 2019

Этот код никогда не работал, и является хорошим примером того, почему те сообщения, которые вы ранее пропустили как Уведомления, теперь являются Предупреждениями и скоро станут Ошибками.

Единственная причина, по которой это работает, -строка

!!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);

интерпретируется PHP как конкатенация набора строк, давая вам

!!('navigatormediaDevices' && 'navigatormediaDevicesgetUserMedia')

Который по правилам жонглирования типов PHP

!!(true && true)

Какойэто просто очень сложный способ написания

true

Ваша основная проблема в этом случае заключается в том, что вы запутали JS (который может обнаружить информацию о браузере пользователя и о том, где эта строка будет делатьчто-то полезное) с PHP (который запускается на сервере до включения браузера).

Вероятно, вы хотите всегда отображать элемент управления формы в PHP, а затем показывать и скрывать его на JS.Но, прежде всего, вам нужно прочитать несколько руководств о том, как эти два элемента сочетаются друг с другом, чтобы вы не попали в такую ​​неразбериху.

...