首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ereg_replace to preg_replace故障

ereg_replace to preg_replace故障
EN

Stack Overflow用户
提问于 2022-10-06 13:12:40
回答 1查看 43关注 0票数 0

你好,我正在将我的网站使用的脚本从php5.4升级到php7.4,我对它有一些问题:我需要将它从ereg_replace切换到preg_replace,但由于某些原因,它无法按照预期的方式工作。

下面是函数中最初使用的ereg_replace:

代码语言:javascript
运行
复制
function uploadFile($file,$file2,$oldFile,$fileName,$gameName,$redir) {
$dupFix = substr(str_shuffle("abcdefghijklmnopqrstuvwxyz_1234567890-ABCDEFGHIJKLMNOPQRSTUVWXYNZ"),0,5);
$ext = preg_replace("/ ^.+\\.([^.]+)$ /", " \\1 ", $file2);

if ($ext != "swf" && $ext != "dcr" && $ext != "3gp" && $ext != "asf" && $ext != "asx" && $ext != "avi" && $ext != "mov" && $ext != "unity3d" && $ext != "mpg" && $ext != "qt" && $ext != "rm" && $ext != "wmv" && $ext != "bmp" && $ext != "gif" && $ext != "jpeg" && $ext != "jpg" && $ext != "png" && $ext != "JPG" && $ext != "BMP" && $ext != "GIF" && $ext != "JPEG" && $ext != "PNG") {
    $_SESSION['status'] = "ERROR: The provided ".$fileName." file extension is not in the list of supported extensions. This is a security measure to help ensure malicious files don't find their way on your server.";
    header("Location: $redir");
    exit;
}

if ($fileName == "game file") {
    $newName = seo_str_plain($gameName).".".$ext;
    $sendTo = "../content/games/";
} elseif ($fileName == "icon1") {
    $newName = seo_str_plain($gameName)."-icon-1.".$ext;
    $sendTo = "../content/icons/";
} elseif ($fileName == "icon2") {
    $newName = seo_str_plain($gameName)."-icon-2.".$ext;
    $sendTo = "../content/icons/";
} elseif ($fileName == "icon3") {
    $newName = seo_str_plain($gameName)."-icon-3.".$ext;
    $sendTo = "../content/icons/";
}

if ($oldFile == $newName) {
    
} elseif (file_exists($sendTo.$newName)) {
    $newName = $dupFix."_".$newName;
} elseif ($oldFile != "") {
    $deleteOldFile = 1;
}

if (!move_uploaded_file($file, $sendTo.$newName)) {
    $_SESSION['status'] = "Failed to copy ".$fileName." to server";
    header("Location: $redir");
    exit;
} else {
    if ($deleteOldFile == 1) {
        unlink($sendTo.$oldFile);
    }
    return $newName;
}

}

如果我只是将$ext = ereg_replace("^.+\\.([^.]+)$", "\\1", $file2);部件替换为$ext = preg_replace("/ ^.+\\.([^.]+)$ /", "\\1", $file2);,它将不再触发php错误,但是当完成按下按钮上传文件的任务时,jpg图片(更确切地说,是jpg图片)将触发警告,即我试图上载的文件的扩展名不在受支持的扩展名列表中,尽管它当然是一个jpg,并且它在列表中。

EN

回答 1

Stack Overflow用户

发布于 2022-10-06 15:56:15

我打印了$ext变量,以查看它存储了什么,以及为什么要触发错误,而且似乎不知怎么的,它捕获了上传为扩展名的文件的全名,而不是在“”之后得到单词。例如,如果上传的文件名为NoobvsPro1.jpg,则$ext变量记录文件的扩展名为"NoobvsPro1.jpg“,而不只是".jpg”

我使用以下代码在错误消息中打印了存储在$ext中的信息:

代码语言:javascript
运行
复制
if ($ext != "swf" && $ext != "dcr" && $ext != "3gp" && $ext != "asf" && $ext != "asx" && $ext != "avi" && $ext != "mov" && $ext != "unity3d" && $ext != "mpg" && $ext != "qt" && $ext != "rm" && $ext != "wmv" && $ext != "bmp" && $ext != "gif" && $ext != "jpeg" && $ext != "jpg" && $ext != "png" && $ext != "JPG" && $ext != "BMP" && $ext != "GIF" && $ext != "JPEG" && $ext != "PNG") {
    $_SESSION['status'] = "ERROR: The provided ".$fileName."s ".$ext." file extension is not in the list of supported extensions. This is a security measure to help ensure malicious files don't find their way on your server.";
    header("Location: $redir");
    exit;

前面的错误如下所示:

错误:提供的icon1 NoobvsPro1.jpg文件扩展名不在支持的扩展名列表中。这是一种安全措施,以帮助确保恶意文件不会在您的服务器上找到它们的方式。

$fileName -返回icon1

$ext -返回NoobvsPro1.jpg

Deadooshka的巨大帮助解决方案是使用这一行代码:

代码语言:javascript
运行
复制
$ext = preg_match('/\.(\w+)$/', $file2, $m) ? $m[1] : '';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73974444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档