我正在
Severity: Warning
Message: Wrong parameter count for strstr()
以下代码
$ext = strrev(strstr(strrev($file), ".", TRUE));
我该怎么办?
更新
代替$ext = strrev(strstr(strrev($file), ".", TRUE));
我用过这个。
$ext = strrev(substr(strrev($file)), 0 ,strpos(strrev($file), ":"));
substr
和strrev
这有点奇怪。它与版本问题有关吗?
答案 0 :(得分:1)
根据the docs,您需要将PHP版本更新为>= 5.3.0
以获取[, bool $before_needle = false ]
参数。它已添加到5.3.0
。
如果您只想尝试获取文件的扩展名,则应使用pathinfo
,如下所示:
$ext = pathinfo( $file, PATHINFO_EXTENSION);
答案 1 :(得分:1)
http://php.net/manual/en/function.strstr.php
$user = strstr($email, '@', true); // As of PHP 5.3.0
检查你的php版本。 'before_needle'参数仅在php version 5.3.0中添加
也许你需要升级,否则你必须删除参数。
希望这有帮助
答案 2 :(得分:0)
正如其他人所指出的,strstr的第三个参数仅出现在PHP 5.3.0中。也许你想做的只是
$ext = substr($file, strrpos($file, '.') + 1);
或更好
$dotpos = strrpos($file, '.');
if ($dotpos === false) {
$ext = ''; // or other special handling like, e.g., $ext = false;
} else {
$ext = substr($file, $dotpos + 1);
}
这将允许您单独处理丢失和尾随点的情况(pathinfo()
在两种情况下都返回空字符串),并且还避免所有中间字符串(只是不浪费CPU时间)
答案 3 :(得分:0)
尝试这个简单的功能:
<?php
function my_strstr($haystack, $needle, $before_needle = false)
{
$output = false;
$before_needle = $before_needle === true ? true : false;
if (is_string($haystack) && is_string($needle) && is_bool($before_needle)) {
switch ($before_needle) {
case true:
$output = substr($haystack, 0, strpos($haystack, $needle));
break;
case false:
$output = strstr($haystack, $needle);
break;
}
}
return $output;
}