调用strstr函数时参数计数错误

时间:2012-06-08 21:46:24

标签: php

我正在

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), ":"));

substrstrrev

的错误仍然相同

这有点奇怪。它与版本问题有关吗?

4 个答案:

答案 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;
}