Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用strpos()匹配数组的一部分,PHP_Php_Strpos - Fatal编程技术网

使用strpos()匹配数组的一部分,PHP

使用strpos()匹配数组的一部分,PHP,php,strpos,Php,Strpos,我需要一些关于strpos()的帮助 需要建立一种方法来匹配任何包含/apple touch的URL,但还需要保持细节匹配,例如“/favicon.gif”等 目前,匹配项作为数组的一部分单独列出: <?php $errorurl = $_SERVER['REQUEST_URI']; $blacklist = array("/favicon.gif", "/favicon.png", "/apple-touch-icon-precomposed.png", "/apple-touch-

我需要一些关于strpos()的帮助

需要建立一种方法来匹配任何包含
/apple touch
的URL,但还需要保持细节匹配,例如
“/favicon.gif”

目前,匹配项作为数组的一部分单独列出:

<?php 

$errorurl = $_SERVER['REQUEST_URI'];
$blacklist = array("/favicon.gif", "/favicon.png", "/apple-touch-icon-precomposed.png", "/apple-touch-icon.png", "/apple-touch-icon-72x72-precomposed.png", "/apple-touch-icon-72x72.png", "/apple-touch-icon-114x114-precomposed.png", "/apple-touch-icon-114x114.png", "/apple-touch-icon-57x57-precomposed.png", "/apple-touch-icon-57x57.png", "/crossdomain.xml");

 if (in_array($errorurl, $blacklist)) { // do nothing }
    else { // send an email about error }

?>

有什么想法吗


非常感谢您的帮助

除了正则表达式之外,您还可以使用删除所有出现的黑名单项目,并将新字符串与旧字符串进行比较:

if ( str_replace($blacklist, '', $errorurl) !== $errorurl )
{
  // do nothing
}
else
{
  // send an email about error
}

如果您想使用正则表达式来实现此目的,并且希望使用一个正则表达式字符串来捕获现有黑名单中的所有值,并与任何
apple touch
字符串匹配,那么类似的东西就可以做到这一点

if(preg_match('/^\/(favicon|crossdomain|apple-touch.*)\.(gif|png|xml)$/',$_SERVER['REQUEST_URI']) {
    //matched the blacklist!
}
不过,老实说,这远比你需要的复杂

我想说的是,您最好在已有的黑名单数组中保留特定值,如
favicon.gif
等;当你在列表中添加更多的项目时,这会让事情变得容易得多


<>我只考虑使用ReGEX用于<代码> Apple Touch < /Cord>值,因为您想阻止它们的任何变体。但即使这样,如果您使用
strpos()

也会更简单,谢谢您的建议。那么如何使用strpos()?事实上,我指的是
substr()
:)--类似于
if(substr($uri,0,11)=='apple-touch'){……}