getUserMedia抛出“使用未定义的常量...”

时间:2019-06-17 21:57:28

标签: php getusermedia

我最近将网站迁移到了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 个答案:

答案 0 :(得分:2)

此代码从未起作用,并且很好地说明了为什么您以前作为通知遗漏的那些消息现在是警告,并且很快将成为错误。

它似乎起作用的唯一原因是因为线路

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

PHP解释为将一串字符串连接起来,为您提供

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

PHP的类型杂耍规则是

!!(true && true)

这只是一种非常精致的写作方式

true

在这种情况下,您的潜在问题是您已经用PHP(在涉及浏览器之前在服务器上运行)混淆了JS(可以检测有关用户浏览器的信息,并且该行可以做些有用的事情)。

可能您想始终在PHP中回显表单控件,然后在JS上显示和隐藏它。但是首先,您需要阅读一些有关如何将两者融合在一起的教程,这样您就不会再陷入这种混乱了。