无法上传包含特殊字符的文件

时间:2014-04-11 07:06:18

标签: php file-upload

我编写了一个小的上传脚本,在我使用它的时候在每种情况下都能正常工作,但是我总是从我的客户端收到消息,当上传出错/无效时,他会收到我死的错误()

我认为这是由他们使用的特殊字符引起的。因为他们是奥地利人,所以他们的文件名中有像äÄöÖüÜß这样的特殊字符。另外,他们在文件名中使用空格。 因此,我使用正则表达式将特殊字符替换为下划线(_)。

$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]);
            }
        }

如果错误不是由文件名中的特殊字符引起的,我不确定问题可能是什么。

1 个答案:

答案 0 :(得分:0)

在这种情况下,函数返回FALSE:

  1.   

    如果filename不是有效的上传文件,则不会执行任何操作,并且   move_uploaded_file()将返回FALSE。

  2.   

    如果filename是有效的上传文件,但某些文件无法移动   原因,不会发生任何操作,move_uploaded_file()将返回   假。此外,还会发出警告。

  3. (Source: PHP.NET)

    1. 您正在使用此正则表达式/[^a-zA-Z0-9\.]/s过滤您的文件名,但这只会替换特殊字符的第一次出现而不是全部。 尝试添加" g"修饰符:/[^a-zA-Z0-9\.]/sg

    2. 您确定您的客户端具有移动文件的正确权限 到所需的位置?我会仔细检查它们。

相关问题