PHP上传和下载不适用于较大的文件(> 1 MB)

时间:2016-11-30 10:50:49

标签: php file-upload upload

我有一个upload.php脚本,我可以从移动设备访问,将文档上传到。

每当我上传某种图像时,都是< 1MB,它完美地运行,但是,当上传大于该文件的文件时,它将被破坏。

上传脚本还会重命名文件,并从中删除扩展名,如果这可能与错误有关...

这是脚本:

<?php header('Access-Control-Allow-Origin: *');

    //Read parameters - I use this when I'm adding the file to the database.
    $documentuniqueid = addslashes($_REQUEST['documentuniqueid']);
    $type = addslashes($_REQUEST['type']);
    $notes = addslashes($_REQUEST['notes']);

    //Get file name
    $filename = urldecode($_FILES["file"]["name"]);


    // Check for errors
    if($_FILES['file']['error'] > 0){
        outputJSON('An error ocurred when uploading.');
    }


    // Check filetype
    //if($_FILES['file']['type'] != 'image/png'){
    //    outputJSON('Unsupported filetype uploaded.');
    //}

    // Check filesize
    if($_FILES['file']['size'] > 500000){
        outputJSON('File uploaded exceeds maximum upload size.');
    }

    // Check if the file exists
    if(file_exists('upload/' . $_FILES['file']['name'])){
        outputJSON('File with that name already exists.');
    }

    // Upload file
    if(!move_uploaded_file($_FILES['file']['tmp_name'], 'documents/'.$documentuniqueid)){
        outputJSON('Error uploading file - check destination is writeable.');
    }

?>

下载脚本如下所示:

<?php
    sleep(2);
    $document_id = addslashes($_REQUEST['document_id']);

    if($document_id != "") {
        $real_document_name = GetRealFileName($document_id);
        if($real_document_name != "ERROR") {
            $original_filename = "http://www.whatever.com/documents/".$document_id;
            $new_filename = $real_document_name;

            //Headers
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
            header('Content-Type: '.finfo_file($finfo, $original_filename));
            header("Content-Length: " . filesize($original_filename));
            header('Content-disposition: attachment; filename="'.$new_filename.'"');      

            //clean up
            ob_clean();
            flush();

            readfile($original_filename);          
            exit();
        }
    }
?>

有关改进的提示吗? 或任何见解,为什么这不正常? 您可以看到我在上传时将文件重命名为随机字符串,并在下载时将其重命名,我查找文件名并将其重命名为原始文件名。

对于小文件大小,它可以正常工作。

我还要注意,即使我手动进入FTP,下载上传的文件并自行添加正确的扩展程序,我也无法打开它们。图像看起来搞砸了,例如PDF已损坏。

PHP DETAILS:

post_max_size和upload_max_filesize都设置为100M。 max_file_uploads设置为20,file_uploads设置为ON max_input_time:60 max_execution_time:3000

3 个答案:

答案 0 :(得分:2)

增加php.ini/etc/php5/apache2/文件的上传文件属性的大小。

集:

upload_max_filesize = 50M

答案 1 :(得分:0)

我认为您的主机空间不足,请尝试通过FTP "FileZilla for example"上传并查看日志消息

也不要忘记检查这些值

  • upload_max_filesize
  • post_max_size
  • max_input_time
  • 的max_execution_time

答案 2 :(得分:0)

保留您需要更改的文件的原始名称

move_uploaded_file($ _ FILES [&#39; file&#39;] [&#39; tmp_name&#39;],&#39; documents /&#39;。$ documentuniqueid) < / p>

move_uploaded_file - move_uploaded_file($ _ FILES [&#39; file&#39;] [&#39; tmp_name&#39;],$ _FILES [&#39; file&#39;] [&#39; name&#39;] )

或在上传脚本中写下此行以查看有关文件的信息

$_FILES - 的的print_r($ _ FILES);

抱歉我的英语,我希望我帮助过。