你好,我正在将我的网站使用的脚本从php5.4升级到php7.4,我对它有一些问题:我需要将它从ereg_replace切换到preg_replace,但由于某些原因,它无法按照预期的方式工作。
下面是函数中最初使用的ereg_replace:
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,并且它在列表中。
发布于 2022-10-06 15:56:15
我打印了$ext变量,以查看它存储了什么,以及为什么要触发错误,而且似乎不知怎么的,它捕获了上传为扩展名的文件的全名,而不是在“”之后得到单词。例如,如果上传的文件名为NoobvsPro1.jpg,则$ext变量记录文件的扩展名为"NoobvsPro1.jpg“,而不只是".jpg”
我使用以下代码在错误消息中打印了存储在$ext中的信息:
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的巨大帮助解决方案是使用这一行代码:
$ext = preg_match('/\.(\w+)$/', $file2, $m) ? $m[1] : '';https://stackoverflow.com/questions/73974444
复制相似问题