更新到PHP版本7.3.11后表单上传错误



我有一个表单在我们的主机将PHP版本更新到7.3.11之前一直正常工作。现在,当你试图提交到表单时,它会给出以下错误消息:

致命错误:未捕获的ArgumentCountError:参数太少函数sl_upload((,传入2/nfs/c07/h03/mnt/113634/domains/myurl.com/html/appLms/modules/question/class.upload.php在331行,预计正好有3个/nfs/c07/h03/mnt/113634/domains/myurl.com/html/lib/lib.upload.php:74堆栈跟踪:#0/nfs/c07/h03/mnt/113634/domains/myurl.com/html/appLms/modules/cquestion/class.upload.php(331(:sl_upload('/var/tmp/phpU0P…','/appLms/test/2_…'(#1/nfs/c07/h03/mnt/113634/domains/myurl.com/html/appLms/lib/lib.test.php(1106(:上传问题->storeAnswer(对象(Track_Test(,数组,'1'(#2/nfs/c07/h03/mnt/113634/domains/myurl.com/html/appLms/modules/test/do.test.php(1208(:播放测试管理->storePage('1','1'(#3/nfs/c07/h03/mnt/113634/domains/myurl.com/html/appLms/modules/test/do.test.php(592(:showResult(对象(Learning_Test(,29(#4/nfs/c07/h03/mnt/113634/domains/myurl.com/html/appLms/class.module/relearning.test.php(309(:在/nfs/c07/h03/mnt/113634/domains/myurl.com/html/lib/lib.upload.php中在线74

我没有更改任何代码。唯一改变的是PHP版本。因此,我甚至不知道如何开始解决这个问题。

以下是class.upload.php上的内容>331线

sl_open_fileoperations();
if(!sl_upload($_FILES['quest']['tmp_name'][$this->id], $path.$savefile)) {

$savefile = Lang::t('_QUEST_ERR_IN_UPLOAD');
}
sl_close_fileoperations();
} else {
$savefile = Lang::t('_QUEST_ERR_IN_UPLOAD');
}
}

以下是lib.upload.php上的内容>74号线

function sl_upload( $srcFile, $dstFile, $file_ext) {
$uploadType = Get::cfg('uploadType', null);
// check if the mime type is allowed by the whitelist
// if the whitelist is empty all types are accepted
require_once(_lib_.'/lib.mimetype.php');
$upload_whitelist =Get::sett('file_upload_whitelist', 'rar,exe,zip,jpg,gif,png,txt,csv,rtf,xml,doc,docx,xls,xlsx,ppt,pptx,odt,ods,odp,pdf,xps,mp4,mp3,flv,swf,mov,wav,ogg,flac,wma,wmv,jpeg');
$upload_whitelist_arr =explode(',', trim($upload_whitelist, ','));
if (!empty($upload_whitelist_arr)) {
$valid_ext = false;
$ext=strtolower(substr(strrchr($dstFile, "."), 1));
if($ext!=""){
$file_ext =strtolower(substr(strrchr($dstFile, "."), 1));
}
foreach ($upload_whitelist_arr as $k=>$v) { // remove extra spaces and set lower case
$ext =trim(strtolower($v));
$mt =mimetype($ext);
if ($mt) { $mimetype_arr[]=$mt; }
getOtherMime($ext, $mimetype_arr);
if ($ext == $file_ext) {
$valid_ext =true;
}
}
$mimetype_arr = array_unique($mimetype_arr);
if ( class_exists('finfo') && method_exists('finfo', 'file')) {
$finfo =new finfo(FILEINFO_MIME_TYPE);
$file_mime_type =$finfo->file($srcFile);
}
else {
$file_mime_type =mime_content_type($srcFile);
}
if (!$valid_ext || !in_array($file_mime_type, $mimetype_arr)) {
return false;
}
}
$dstFile =stripslashes($dstFile);
if( $uploadType == "ftp" ) {
return sl_upload_ftp( $srcFile, $dstFile );
} elseif( $uploadType == "cgi" ) {
return sl_upload_cgi( $srcFile, $dstFile );
} elseif( $uploadType == "fs" || $uploadType == null ) {
return sl_upload_fs( $srcFile, $dstFile );
} else {
$event = new appCoreEventsCoreFileSystemUploadEvent($srcFile, $dstFile);
appCoreEventsDispatcherManager::dispatch(appCoreEventsCoreFileSystemUploadEvent::EVENT_NAME, $event);
unlink($srcFile);
return $event->getResult();
}
}

基于此,我不确定该改变什么,我也不想打破以前的做法。

网站的其他部分都正常工作,包括登录等PHP功能。提前感谢您提供的任何指针。

尝试替换:

sl_upload($_FILES['quest']['tmp_name'][$this->id], $path.$savefile)

带有:

sl_upload($_FILES['quest']['tmp_name'][$this->id], $path.$savefile, null);

说明:sl_upload函数需要3个参数,而您只传递了2个。

在PHP7.1之前,这只会触发一个警告,但从那时起,它会生成一个致命错误。

由于它以前对你很有效(尽管,它一定触发了一个警告,除非你的error_reporting非常松懈,否则它可能会被记录在某个地方(,将null作为第三个参数传递应该会产生与过去相同的结果。

然而,最好弄清楚该函数参数应该用于什么,因为它被标记为必需(没有默认值(。

相关内容

  • 没有找到相关文章

最新更新