【问题标题】:PHP can't upload file from HTML formPHP 无法从 HTML 表单上传文件
【发布时间】:2011-08-08 01:26:22
【问题描述】:

这就是我处理表单的方式:

        # Create the message
        # ----------------------------------------------------------------
        $name = $_POST['name'];
        $email = $_POST['email'];
        $title = $_POST['title'];
        $course = $_POST['course'];
        $file = $_POST['file'];

        $message  = "Name: ".$name."\n";
        $message .= "Email: ".$email."\n\n";
        $message .= "Title of Article: ".$title."\n";
        $message .= "Program: ".$course."\n\n";
        $message .= "Additional Info: ".$info;

        # Upload temporary files
        # ----------------------------------------------------------------
        $uploaddir = '/home/public/uploads/';
        $uploadfile = $uploaddir . basename($_FILES['file']['name']);
        if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile) == false) {
            echo 'Could not move file';
            exit;
        }

        if ($_FILES['file']['type'] != "application/pdf") {
            echo 'Not a pdf file';
            unlink($uploadfile);
            exit;
        }

希望最终产品会发送一封带有该文件作为附件的电子邮件。现在我失败并收到我内置的“无法移动文件”消息。有明显的原因吗? $file 是我从 HTML 文件对话框中得到的 (input type="file")

【问题讨论】:

    标签: php html file-upload file-io


    【解决方案1】:

    两件事:
    1.表单是否设置为:

    <form method="POST" enctype="multipart/form-data" action="INSERT ACTION">
    

    2。你发文件的文件夹是777吗?

    【讨论】:

    • 是的,我将该文件夹更改为 777,我添加了 enctype,我只是在解决几个语法错误。我认为这可能是问题所在。
    • 第二次添加 enctype 后,$_POST 中似乎没有存储任何内容……这正常吗?
    • 实际上是的。你需要使用 $_FILE[''];
    • @Jake 他应该仍然可以得到$_POST 中的其他表单数据。另外,它是$_FILES(复数)
    • @Phil 嗯,实际上现在我想起来了,这是真的。奇怪的。是的,他是对的,它是$_FILES 对不起这个错误。
    【解决方案2】:

    您的表单需要设置适当的enctype 属性,即

    <form enctype="multipart/form-data" method="post" action=... >
    

    更新

    一些建议...

    1. 在移动上传的文件之前检查文件类型并进行任何其他常规验证。这应该是您的最后一步。
    2. 现在记不清了,但我认为您不会在$_POST['file'] 值中获得任何有用(或根本没有)的东西。对所有上传的文件数据使用$_FILES 数组。

    【讨论】:

    • 感谢您的信息,我至少会使用正则表达式来检查扩展名。对我在下面发布的评论有什么想法吗?
    • @Max 您无需更改验证方法,只需将“PDF 检查”块移到“移动上传的文件”块上方即可
    • 是的,我刚刚完成了代码。它完美无缺,谢谢 :) 在上传文件之前,我正在执行所有检查。
    猜你喜欢
    • 2016-08-01
    • 2012-08-08
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2010-12-05
    • 2018-07-23
    相关资源
    最近更新 更多