“警告:preg_replace()[function.preg-replace]:编译失败:无法在偏移3处重复...”

时间:2012-05-18 13:32:24

标签: php error-handling

我搜索了其他问题,但找不到可行的解决方案。这是一个CMS程序,我试图将文件上传到任何目录,并得到以下错误:

Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 3 in /home/...on line 1017 

以下是代码,任何建议?:

function _IsValidPath($Path)
{ // First check if the path starts with the starting directory     
$basePath = preg_replace("/{1,}/", "/", $_SESSION['rootdirectory'] . '/' . // this line (1017) causing the error
 $_SESSION["startingdirectory"]);
$sdPos = strpos($basePath, $Path);
if (!is_numeric($sdPos))
        {
            $sdPos = strpos($Path, $basePath);
        }

        if(is_numeric($sdPos) && $sdPos == 0)
        {
            // Make sure it doesn't contain any invalid characters
            if(is_numeric(strpos($Path, "..")) ||
            (is_numeric(strpos($Path, "./"))) ||
            (is_numeric(strpos($Path, "//"))) ||
            (is_numeric(strpos($Path, "\\"))) ||
            (is_numeric(strpos($Path, "../"))) ||
            (is_numeric(strpos($Path, "&"))) ||
            (is_numeric(strpos($Path, "*"))) ||
            (is_numeric(strpos($Path, " "))) ||
            (is_numeric(strpos($Path, "'"))) ||
            (is_numeric(strpos($Path, "\?"))) ||
            (is_numeric(strpos($Path,"<"))) ||
            (is_numeric(strpos($Path, ">"))))
            {
                return false;
            }
            else
            {
                // The path is OK
                return true;
            }
        }
        else
        {
            return false;
        }
    }

2 个答案:

答案 0 :(得分:0)

将其更改为:

$basePath = preg_replace("@/{1,}/@", "/", $_SESSION['rootdirectory'] . '/' .
 $_SESSION["startingdirectory"]);

preg_replace期望正则表达式由字符串中的字符分隔,以便您可以在之后指定gi之类的标记(我通常使用@) 。它将/视为分隔符。有关详细信息,请参阅preg_replace manual page

即便如此,这段代码没有多大意义,并且可能有更好的方法来完成它应该做的事情。

答案 1 :(得分:0)

/{1,}/

您似乎正在尝试匹配 nothing 中的一个或多个。