【问题标题】:php file upload different types of filesphp文件上传不同类型的文件
【发布时间】:2016-06-07 20:19:39
【问题描述】:

我正在尝试使用以下函数在 php 中上传文件:

public function fileUpload($FILES){
    $num_of_uploads = 1;
    $max_file_size = 1048576; //can't be larger than 1 MB

    $T = array ();
    foreach($_FILES["file"]["error"] as $key=>$value){

        if($_FILES["file"]["name"][$key] != ""){

            if($value == UPLOAD_ERR_OK){

                $v = array ();

                $origfilename = $_FILES["file"]["name"][$key];
                $filename = explode(".", $_FILES["file"]["name"][$key]);
                $filenameext = $filename[count($filename) - 1];

                $v['name'] = $filename[0];
                $v['extension'] = $filename[1];
                $v['type'] = $_FILES["file"]["type"][$key];

                unset($filename[count($filename) - 1]);
                $filename = implode(".", $filename);
                $filename = "file__" . time() . "." . $filenameext;

                if($_FILES["file"]["size"][$key] < $max_file_size){
                    $v['content'] = file_get_contents($_FILES["file"]["tmp_name"][$key]);
                    $T[] = $v;
                }else{
                    throw new Exception($origfilename . " file size inaccepted!<br />");
                }

            }else{
                throw new Exception($origfilename . " Error of upload <br />");
            }
        }
    }
    return $T;
}

此函数适用于 txt 类型,但当我测试 pdf、gif 或 jpg 时,它会返回损坏的文件。

【问题讨论】:

  • 检查 php.ini 文件的最大文件上传大小和最大帖子大小。确保上传大小不大于该大小
  • 我对文件大小没有问题,我正在使用 70Ko 文件进行测试,但它不工作
  • 你遇到了什么错误?
  • 我没有报错,但是下载的时候文件损坏了
  • 尝试直接从上传位置访问上传的文件。在文件下载期间,您可能没有正确设置标题。由于该文件没有正确下载/打开。

标签: php file-upload


【解决方案1】:

据我所知,file_get_contents() 适用于 text/html 类型。 但是,对于其他文件类型,您应该首先解析它们的文本内容,以便在进一步处理中使用它。尝试在记事本中打开任何.pdf 以查看其文本内容。

出于上传目的,请在您的循环中使用move_uploaded_file(),如下所示:

move_uploaded_file($_FILES["file"]["tmp_name"][$key], $filename);

当然,无需尝试从上传的文件中获取文本内容。

【讨论】:

  • move_uploaded_file 函数必须在第二个参数中包含文件目标,而不是文件名,move_uploaded_file($_FILES['Filedata']['tmp_name'], $file_src); 这里我没有将文件保存在特定目的地
  • 当然,但是文件名也可以作为当前工作目录的目的地。如果出于某种原因您想使用文件内容进行直接下载,则需要根据当前文件扩展名正确设置 Content-type 标头。
【解决方案2】:

要下载文件,您需要设置标题。因此,在函数开始时,尝试为 png 或 jpeg 文件设置以下任何标题:

//For png file
header("Content-Type: image/png");
//For jpeg file
header("Content-Type: image/jpeg");

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 2012-09-16
    • 1970-01-01
    • 2018-11-11
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    相关资源
    最近更新 更多