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

substrとについても同じエラーが発生しますstrrev

これはちょっと変です。バージョンの問題に関連していますか?

4

4 に答える 4

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 に答える
1

docsに従って、パラメーター>= 5.3.0を取得するには、PHP バージョンを更新する必要があり[, bool $before_needle = false ]ます。で追加されました5.3.0

ファイルの拡張子を取得しようとしているだけの場合は、次pathinfoのように使用する必要があります。

$ext = pathinfo( $file, PATHINFO_EXTENSION);
于 2012-06-08T21:47:51.947 に答える
0

他の人が指摘しているように、strstrの3番目のパラメーターはPHP5.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 に答える