php - move_uploaded_file 仅适用于短路径名
问题描述
我下载了一个名为“FileThingie”的 PHP 文件管理器,您可以在其中将文件上传到您的目录。它工作正常,但是当我尝试上传一个路径非常大(很多字符)的新文件时,PHP 给了我一个错误。
PHP 显示的错误是:
Warning: move_uploaded_file(../../archivos/admin_arch/2019/365 GRADOS EMPRESA NUMERO 1/01. ENERO/OPERACIONES/GRANDES DESARROLLOS/MI EMPRESA GENERICA SA DE CV/GENERALES/Prueba/CUMA_VH1_SED_SEM33_1.pdf) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\Project\Sistema\admin_arch\index.php on line 822
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\Windows\Temp\phpE1F.tmp' to '../../archivos/admin_arch/2019/365 GRADOS EMPRESA NUMERO 1/01. ENERO/OPERACIONES/GRANDES DESARROLLOS/MI EMPRESA GENERICA SA DE CV/GENERALES/Prueba/CUMA_VH1_SED_SEM33_1.pdf' in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\Project\Sistema\admin_arch\index.php on line 822
代码:
if (@move_uploaded_file($c['tmp_name'], $ruta_archivo_final )) {
@chmod(ft_get_dir() . "/{$c['name']}", 0777);
$msglist++;
ft_set_message("Archivo subido correctamente. Nombre: " . $nomenclatura_temp);
ft_invoke_hook('upload', ft_get_dir(), $c['name']);
}
}
正如我告诉你的那样,如果路径名不是那么大(似乎有限制),它就可以正常工作,所以我认为权限没有问题。
提前致谢!
解决方案
在 Windows 上使用节点(javascript)时,我一直都有这个问题。
这是一个 Windows 问题,PHP 完全可以处理长文件名。
来自:https ://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
最大路径长度限制
在 Windows API(以下段落中讨论的一些例外情况)中,路径的最大长度为 MAX_PATH,定义为 260 个字符。
和修复(我还没有尝试过):
https://www.howtogeek.com/266621/how-to-make-windows-10-accept-file-paths-over-260-characters/
推荐阅读
- google-api-php-client - Request has insufficient authentication
- babeljs - Babel 忽略 vs 排除选项
- angular - 更新 Angular 7 -> Angular 8 时出错
- python - Project Euler 任务#10 Python 错误答案
- java - 实现排序排序
- java - count[str.charAt(i)]++ 实际存储的是什么?
- sonarqube - 如何从设计器运行 webMethods 包以触发 SonarQube
- jquery - 如何将 jquery 事件绑定到动态添加的多个 DOM 元素?
- reactjs - 样式化组件文件夹系统
- html - 在页面底部粘贴页脚