2012-06-08 30 views
2

当我得到错误的参数计数调用函数的strstr

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

这是一种奇怪的。它与版本问题有关吗?

+0

'substr(strrev($ file))'对'substr'没有足够的参数。 – nickb

+0

我应该怎么写? –

+0

你只是想获得文件名的扩展名? – nickb

回答

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时间)

1

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

如果你只是想获得一个文件的扩展名,你应该使用pathinfo,就像这样:

$ext = pathinfo($file, PATHINFO_EXTENSION); 
+0

如果我不想升级,我应该如何管理? –

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中添加

也许您需要升级,否则您将不得不删除参数。

希望这有助于

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; 
} 
相关问题