2

我正进入(状态

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

4 回答 4

1

根据文档,您需要更新 PHP 版本>= 5.3.0以获取[, bool $before_needle = false ]参数。它被添加到5.3.0.

如果您只是想获取文件的扩展名,则应使用pathinfo,如下所示:

$ext = pathinfo( $file, PATHINFO_EXTENSION);
于 2012-06-08T21:47:51.947 回答
1

http://php.net/manual/en/function.strstr.php

$user = strstr($email, '@', true); // As of PHP 5.3.0

检查您的 php 版本。'before_needle' 参数仅在 php 版本 5.3.0 中添加

也许您需要升级或者您将不得不删除该参数。

希望这可以帮助

于 2012-06-08T21:48:58.370 回答
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 时间)

于 2012-06-08T22:16:20.523 回答
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;
}
于 2014-03-06T14:21:34.057 回答