我在Laravel v 6应用程序中使用tinyMCE v 5的Responsive File Manager 9.14.0-我按照教程进行了设置。除了单击“开始上传”按钮之外,其他所有操作都正常-我收到此错误:意外令牌这显示在我得到的php错误日志的后端页面中这两个错误。
[05-Mar-2020 12:08:17 Europe/Rome] PHP Notice: Trying to access array offset on value of type null in /var/www/html/laratest/public/tinymce/filemanager/UploadHandler.php on line 496
[05-Mar-2020 12:08:17 Europe/Rome] PHP Notice: Trying to access array offset on value of type null in /var/www/html/laratest/public/tinymce/filemanager/UploadHandler.php on line 1429.
奇怪的是,大文件不会发生该错误。同样奇怪的是,即使给出了此错误,它仍然可以下载文件。这是我的tinymce配置
tinymce.init({
selector: 'textarea',
plugins: 'image code a11ychecker advcode casechange formatpainter linkchecker lists checklist media mediaembed pageembed permanentpen powerpaste table advtable tinymcespellchecker',
toolbar: ' link image casechange checklist code formatpainter pageembed permanentpen table',
image_title: true,
automatic_uploads: true,
file_picker_types: 'image',
external_filemanager_path:"{{url('tinymce/filemanager')}}/",
filemanager_title:"Responsive Filemanager" ,
external_plugins: { "filemanager" : "{{url('tinymce')}}/filemanager/plugin.min.js"},
});
问题出在文件UploadHandler.php的第496行和1429行上]
///////////////////////////////////////////////// /////////////////////////////////
第496行周围的代码
///////////////////////////////////////////////// ///////////////////////////////
protected function get_unique_filename($file_path, $name, $size, $type, $err or, $index, $content_range) { while(is_dir($this->get_upload_path($name))) { $name = $this->upcount_name($name); } // Keep an existing filename if this is part of a chunked upload: //BELOW is line 496 $uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]); while (is_file($this->get_upload_path($name))) { if ($uploaded_bytes === $this->get_file_size( $this->get_upload_path($name))) { break; } $name = $this->upcount_name($name); } return $name; }
///////////////////////////////////////////////// /////////////////////////////////
以及第1429行周围的代码
///////////////////////////////////////////////// ////////////////////////////////
$response = array($this->options['param_name'] => $files); $name = $file_name ? $file_name : $upload['name'][0]; $res = $this->generate_response($response, $print_response); if(is_file($this->get_upload_path($name))){ // BELOW IS LINE 1429 $uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]); $totalSize = $this->get_file_size($this->get_upload_path($name)); if ($totalSize - $uploaded_bytes - $this->options['readfile_chunk_size'] < 0) { $this->onUploadEnd($res); }else{ $this->head(); $this->body(json_encode($res)); } }else{ $this->head(); $this->body(json_encode($res)); }
问题在于当未分块上传的文件时,$ content_range [1]的值。需要检查$ content_range [1]的值以查看是否设置了该值。
下面是引发错误的两个代码摘录的解决方案。首先是第496行的代码
protected function get_unique_filename($file_path, $name, $size, $type, $error, $index, $content_range) { while(is_dir($this->get_upload_path($name))) { $name = $this->upcount_name($name); } // Keep an existing filename if this is part of a chunked upload: if(isset($content_range[1])){ $uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]); } while (is_file($this->get_upload_path($name))) { if(isset($uploaded_bytes)){ if ($uploaded_bytes === $this->get_file_size( $this->get_upload_path($name))) { break; } } $name = $this->upcount_name($name); } return $name; }
以及1429年左右的第二个位代码。
$response = array($this->options['param_name'] => $files);
$name = $file_name ? $file_name : $upload['name'][0];
$res = $this->generate_response($response, $print_response);
if(is_file($this->get_upload_path($name))){
if(isset($content_range[1])){
$uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]);
}
else{
$uploaded_bytes = 0;
}
$totalSize = $this->get_file_size($this->get_upload_path($name));
if ($totalSize - $uploaded_bytes - $this->options['readfile_chunk_size'] < 0) {
$this->onUploadEnd($res);
}else{
$this->head();
$this->body(json_encode($res));
}
}else{
$this->head();
$this->body(json_encode($res));
}
return $res;