我编写了一个小的上传脚本,在我使用它的时候在每种情况下都能正常工作,但是我总是从我的客户端收到消息,当上传出错/无效时,他会收到我死的错误()
我认为这是由他们使用的特殊字符引起的。因为他们是奥地利人,所以他们的文件名中有像äÄöÖüÜß这样的特殊字符。另外,他们在文件名中使用空格。 因此,我使用正则表达式将特殊字符替换为下划线(_)。
$moveFile = function($tmpname,$name,$time) {
// the regex to resolve the special chars problem
$name = preg_replace('/[^a-zA-Z0-9\.]/s', '_', $name);
if (!move_uploaded_file($tmpname,'assets/siteContents/bewerbungen/'.$time.'_'.$name)) {
die('something went wrong while uploading');
}
};
// move application_files__image
$moveFile($_FILES['application_files__image']['tmp_name'],
$_FILES['application_files__image']['name'],
$time);
// move application_files__image
$moveFile($_FILES['application_files__cv']['tmp_name'],
$_FILES['application_files__cv']['name'],
$time);
// move application_files__certificates
if (count($_FILES['application_files__certificates']['name'])) {
foreach ($_FILES['application_files__certificates']['name'] as $i => $name) {
$moveFile($_FILES['application_files__certificates']['tmp_name'][$i],
$_FILES['application_files__certificates']['name'][$i],
$time);
$a_list[] = 'assets/siteContents/bewerbungen/'.$time.'_'.preg_replace('/[^a-zA-Z0-9\.]/s', '_',$_FILES['application_files__certificates']['name'][$i]);
}
}
如果错误不是由文件名中的特殊字符引起的,我不确定问题可能是什么。
答案 0 :(得分:0)
在这种情况下,函数返回FALSE:
如果filename不是有效的上传文件,则不会执行任何操作,并且 move_uploaded_file()将返回FALSE。
如果filename是有效的上传文件,但某些文件无法移动 原因,不会发生任何操作,move_uploaded_file()将返回 假。此外,还会发出警告。
您正在使用此正则表达式/[^a-zA-Z0-9\.]/s
过滤您的文件名,但这只会替换特殊字符的第一次出现而不是全部。
尝试添加" g"修饰符:/[^a-zA-Z0-9\.]/sg
您确定您的客户端具有移动文件的正确权限 到所需的位置?我会仔细检查它们。