不能对函数调用的结果使用isset()(可以使用"null!= Func()"代替)

san*_*nce 8 php netbeans function detect

( ! ) Fatal error: Cannot use isset() on the result of a function call (you can use "null !== func()" instead) in C:\Users\sanoj\Documents\NetBeansProjects\video-site\app\detect.php on line 45
Call Stack
#   Time    Memory  Function    Location
1   0.0000  234208  {main}( )   ..\index.php:0
Run Code Online (Sandbox Code Playgroud)

以前我的代码是

if(!defined('WAP'))
    define('WAP', isset($_REQUEST['wap']) || isset($_REQUEST['wap2']) || isset($_REQUEST['imode'])|| isset($_REQUEST['html'])|| isset($_REQUEST['Android'])|| isset($_REQUEST['iphone'])|| isset($_REQUEST['IEMobile']));

    if (WAP)
{
    define('WIRELESS_PROTOCOL', isset($_REQUEST['wap']) ? 'wap' : (isset($_REQUEST['wap2']) ? 'wap2' : (isset($_REQUEST['iphone']) ? 'iphone' : (isset($_REQUEST['imode']) ? 'imode' : (isset($_REQUEST['IEMobile']) ? 'IEMobile' :(isset($_REQUEST['html']) ? 'html' : (isset($_REQUEST['Android']) ? 'Android' : '')))))));  
Run Code Online (Sandbox Code Playgroud)

我的IDE警告Do Not Access SuperGlobal $_REQUEST Array Directly 所以我使用了以下代码

if(!defined('WAP'))
{
    define('WAP', isset(filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING)) || isset(filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)) || isset(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING))|| isset(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING))|| isset(filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING))|| isset(filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING))|| isset(filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING)));
}
    if (WAP)
{
    define('WIRELESS_PROTOCOL', isset(filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING)) ? 'wap' : (isset(filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)) ? 'wap2' : (isset(filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING)) ? 'iphone' : (isset(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING)) ? 'imode' : (isset(filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING)) ? 'IEMobile' :(isset(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING)) ? 'html' : (isset(filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING)) ? 'Android' : '')))))));  
Run Code Online (Sandbox Code Playgroud)

这是 detect.php

<?php
$userBrowser = $_SERVER['HTTP_ACCEPT']; 
if(stristr($userBrowser, 'application/vnd.wap.xhtml+xml')) 
{
$_REQUEST['wap2'] = 1;
}

elseif(stripos($_SERVER['HTTP_USER_AGENT'],"iPod"))
{
$_REQUEST['iphone'] = 1;

}
elseif(stripos($_SERVER['HTTP_USER_AGENT'],"iPhone"))
{
$_REQUEST['iphone'] = 1;

}
elseif(stripos($_SERVER['HTTP_USER_AGENT'],"Android"))
{
$_REQUEST['Android'] = 1;

}
elseif(stripos($_SERVER['HTTP_USER_AGENT'],"IEMobile"))
{
$_REQUEST['IEMobile'] = 1;

}
elseif(stristr($userBrowser, 'DoCoMo/' || 'portalmmm/'))
{
$_REQUEST['imode'] = 1;
}

elseif(stristr($userBrowser, 'text/vnd.wap.wml')) 
{
$_REQUEST['wap'] = 1;
}
elseif(stristr($userBrowser, 'text/html')) 
{
$_REQUEST['html'] = 1;
}


if(!defined('WAP'))
    define('WAP', isset($_REQUEST['wap']) || isset($_REQUEST['wap2']) || isset($_REQUEST['imode'])|| isset($_REQUEST['html'])|| isset($_REQUEST['Android'])|| isset($_REQUEST['iphone'])|| isset($_REQUEST['IEMobile']));

    if (WAP)
{
    define('WIRELESS_PROTOCOL', isset($_REQUEST['wap']) ? 'wap' : (isset($_REQUEST['wap2']) ? 'wap2' : (isset($_REQUEST['iphone']) ? 'iphone' : (isset($_REQUEST['imode']) ? 'imode' : (isset($_REQUEST['IEMobile']) ? 'IEMobile' :(isset($_REQUEST['html']) ? 'html' : (isset($_REQUEST['Android']) ? 'Android' : '')))))));  

if (WIRELESS_PROTOCOL == 'wap')
      {
$browser_t = "mobile";
      }
elseif (WIRELESS_PROTOCOL == 'wap2')
      {


$browser_t = "mobile";


      }
elseif (WIRELESS_PROTOCOL == 'imode')
      {

$browser_t = "mobile";

      }
      elseif (WIRELESS_PROTOCOL == 'iphone')
      {


$browser_t = "smartphone";

      }
      elseif (WIRELESS_PROTOCOL == 'Android')
      {


$browser_t = "smartphone";

      }
       elseif (WIRELESS_PROTOCOL == 'IEMobile')
      {

$browser_t = "smartphone";

      }
      elseif (WIRELESS_PROTOCOL == 'html')
      {

     $mobile_browser = '0';

if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone)/i',
    strtolower($_SERVER['HTTP_USER_AGENT']))){
    $mobile_browser++;
    }

if((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) or 
    ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))){
    $mobile_browser++;
    }

$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));
$mobile_agents = array(
    'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
    'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
    'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
    'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
    'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
    'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
    'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
    'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
    'wapr','webc','winw','winw','xda','xda-');

if(in_array($mobile_ua,$mobile_agents)){
    $mobile_browser++;
    }
if (strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini')>0) {
    $mobile_browser++;
    }
        if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'iemobile')>0) {
$mobile_browser++;
}
if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows')>0) {
    $mobile_browser=0;
    }


if($mobile_browser>0){
   // do something wap

$browser_t = "mobile";

}
// non-mobile
else
{

$_SESSION['Browser_d'] = "web";
$browser_t = "web";

}
   } else {
   // do something else html

$_SESSION['Browser_d'] = "web";
$browser_t = "web";
   }

      }


    else
    {
$mobile_browser = '0';

if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone)/i',
    strtolower($_SERVER['HTTP_USER_AGENT']))){
    $mobile_browser++;
    }

if((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) or 
    ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))){
    $mobile_browser++;
    }

$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));
$mobile_agents = array(
    'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
    'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
    'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
    'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
    'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
    'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
    'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
    'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
    'wapr','webc','winw','winw','xda','xda-');

if(in_array($mobile_ua,$mobile_agents)){
    $mobile_browser++;
    }
    if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'iemobile')>0) {
$mobile_browser++;
}
if (strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini')>0) {
    $mobile_browser++;
    }
if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows')>0) {
    $mobile_browser=0;
    }


if($mobile_browser>0){
   // do something wap

$browser_t = "mobile";

}
// non-mobile
else
{
$_SESSION['Browser_d'] = "web";
$browser_t = "web";
}

    }
     ?>
Run Code Online (Sandbox Code Playgroud)

index.php

<?php 
include "app/config.php";
include "app/detect.php";

if ($page_name=='') {
    include $browser_t.'/index.html';
    }
elseif ($page_name=='index.html') {
    include $browser_t.'/index.html';
    }
elseif ($page_name=='singlepage.html') {
    include $browser_t.'/singlepage.html';
    }
elseif ($page_name=='categories.html') {
    include $browser_t.'/categories.html';
    }
elseif ($page_name=='contact.html') {
    include $browser_t.'/contact.html';
    }
else
    {
        include $browser_t.'/404.html';
    }

?>
Run Code Online (Sandbox Code Playgroud)

config.php

<?php
$current_page_uri = $_SERVER['REQUEST_URI'];
$part_url = explode("/", $current_page_uri);
$page_name = end($part_url);
$email_id = "s.hidayath@agileits.com";
?>
Run Code Online (Sandbox Code Playgroud)

当加载索引文件时,它应该检测设备并将其重定向到正确的根,但在我的情况下,我不会得到跟随错误

( ! ) Notice: Undefined index: ALL_HTTP in C:\Users\sanoj\Documents\NetBeansProjects\video-site-2\app\detect.php on line 118
Call Stack
#   Time    Memory  Function    Location
1   0.0090  233992  {main}( )   ..\index.php:0
2   0.0230  295896  include( 'C:\Users\sanoj\Documents\NetBeansProjects\video-site-2\app\detect.php' )  ..\index.php:11

( ! ) Warning: include(web/404.html): failed to open stream: No such file or directory in C:\Users\sanoj\Documents\NetBeansProjects\video-site-2\index.php on line 30
Call Stack
#   Time    Memory  Function    Location
1   0.0090  233992  {main}( )   ..\index.php:0

( ! ) Warning: include(): Failed opening 'web/404.html' for inclusion (include_path='.;C:\php\pear') in C:\Users\sanoj\Documents\NetBeansProjects\video-site-2\index.php on line 30
Call Stack
#   Time    Memory  Function    Location
1   0.0090  233992  {main}( )   ..\index.php:0
Run Code Online (Sandbox Code Playgroud)

Tᴀʀ*_*ᴏᴏᴅ 4

首先,NetBeans IDE会向您显示这些警告,以便您不要$_REQUEST直接信任这些值并以某种方式验证它。通过检查,isset($_REQUEST['wap'])您已经完成了 IDE 建议的检查的一部分。此过程还可以有其他步骤,您应该在使用它之前执行这些步骤,例如插入数据库。我忽略了许多 NetBeans 警告,因为 NetBeans 不知道我将如何处理我的输入/变量。它只是警告我最佳实践,这可能是也可能不是最适合我的情况。警告仅应视为建议,而不是您必须的事情。

其次,如果使用filter_input(),则不需要isset()另外使用。因为,filter_input()已经为你做了。正如文档所说,

返回值FALSE如果过滤器失败或者NULL未设置variable_name 变量,则成功时请求的变量的值。FILTER_NULL_ON_FAILURE如果使用该标志,则如果未设置变量并且过滤器失败,它将返回。FALSENULL

因此,您只需删除即可isset(),您的代码应该可以安全地工作。但您可能仍想检查该值是否设置为应用替代值。在这种情况下,只需使用empty()函数,当从is /FALSE返回值时,该函数将返回。因此,只需否定条件以匹配您的情况即可。就像这样——filter_input()NULLFALSE

if(!defined('WAP'))
{
    define('WAP', !empty(filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING)) || !empty(filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)) || !empty(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING))|| !empty(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING))|| !empty(filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING))|| !empty(filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING))|| !empty(filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING)));
}

 if (WAP)
{
    define('WIRELESS_PROTOCOL', !empty(filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING)) ? 'wap' : (!empty(filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)) ? 'wap2' : (!empty(filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING)) ? 'iphone' : (!empty(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING)) ? 'imode' : (!empty(filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING)) ? 'IEMobile' :(!empty(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING)) ? 'html' : (!empty(filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING)) ? 'Android' : '')))))));
} 
Run Code Online (Sandbox Code Playgroud)

第二个错误

注意:未定义索引:ALL_HTTP

我找不到ALL_HTTPphp 文档中为$_SERVER调用的任何变量。因此,请检查链接并找到一个可以满足您的目的的链接。我不确定你到底想用它得到什么,所以我不能提出任何建议。

第三个错误

警告:包括(web/404.html):无法打开流。

该错误已经表明该文件不存在。因此,要么该文件不存在,要么您提供的路径不正确。请检查并修复它。