一,上传中文名称图片报错
1,上传图片名称:“大厅.jpg”
Warning: file_put_contents(D:\phpstudy_pro\WWW\xxxxxxx\images\static\inheritorvideo\664b6491eb400.): Failed to open stream: Permission denied in D:\phpstudy_pro\WWW\xxxxxxx\libraries\src\Filesystem\File.php on line 461
File.php on line 461行,上传中文名图片时,
public static function write($file, $buffer, $useStreams = false)
$ret = \is_int(file_put_contents($file, $buffer));
这461行报错,$file值只有图片的后缀了。
$file => 'jpg'
2,图片上传调用路径:
http://bwg.home.com:8080/administrator/index.php?option=com_media&format=json&mediatypes=0,1,2,3&task=api.files&path=local-images%3A%2Fstatic%2Finheritorvideo
3,根据上面错误提示,File::write调用,跟踪查询到
“D:\phpstudy_pro\WWW\bowuguan51\plugins\filesystem\local\src\Adapter\LocalAdapter.php”(15,5):use Joomla\CMS\Filesystem\File;
4,\LocalAdapter.php文件中,createFile方法,
public function createFile(string $name, string $path, $data): string
File::write($localPath, $data);
这一行走到File.php on line 461 write中报出来的错误;
5,在File::write($localPath, data);之前,下列这一行获取到data); 之前,下列这一行获取到d

本文介绍了在Joomla 5.1中遇到的媒体文件(图片、视频、文档)上传失败的问题,特别是中文名称的文件会触发'file_put_contents Failed to open stream: Permission denied'异常。问题根源在于Joomla的File.php文件中makeSafe方法的正则表达式过滤掉了中文字符,只保留了文件的后缀名。为解决此问题,提出了在makeSafe函数中修改正则表达式,以兼容中文文件名的建议,并提供了相关正则表达式的参考资料。
最低0.47元/天 解锁文章





