我有一个没有问题的脚本,直到我升级到php和mysql,现在当我使用脚本的导入部分时,我收到此错误
遇到PHP错误 严重性:警告 消息:preg_match():编译失败:偏移量为7的字符类中的无效范围 文件名:libraries / Upload.php 行号:2685
在第2685行的文件部分,我有第2282到2691行的代码
if (!empty($mime_from_browser) && !$this->file_src_mime || !is_string($this->file_src_mime) || empty($this->file_src_mime)) {
$this->file_src_mime =$mime_from_browser;
$this->log .= '- MIME type detected as ' . $this->file_src_mime . ' by browser<br />';
if (preg_match("/^([\.-\w]+)\/([\.-\w]+)(.*)$/i", $this->file_src_mime)) {
$this->file_src_mime = preg_replace("/^([\.-\w]+)\/([\.-\w]+)(.*)$/i", '$1/$2', $this->file_src_mime);
$this->log .= '- MIME validated as ' . $this->file_src_mime . '<br />';
} else {
$this->file_src_mime = null;
}
}
问题在哪里?在过去的两个月内没有对脚本进行任何更改。
由于
答案 0 :(得分:5)
当前preg_match_all
模式将始终失败。之前没有显示错误。升级PHP时,错误报告/错误显示已更改。
短划线-
字符表示a-z
之类的范围,表示从a
到z
的所有字符。要将短划线用作破折号,它必须是角色类[]
中的第一个或最后一个,或者需要转义\-
:
"/^([\.\w-]+)\/([\.\w-]+)(.*)$/i"
"/^([-\.\w]+)\/([-\.\w]+)(.*)$/i"
"/^([\.\-\w]+)\/([\.\-\w]+)(.*)$/i"
您目前使用它的方式意味着.
到word character
的范围没有任何意义,也不是有效范围。