文件上载适用于本地服务器,但不适用于Web服务器

时间:2017-06-08 00:29:58

标签: php html image file uploading

在我本地XAMPP服务器上传文件但上传到我的网络服务器时,这个确切的代码可以正常工作。同一项目的其他功能仍然可以正常工作。

    //Image Uploading
if(isset($_FILES['file'])) {
    $file = $_FILES['file'];

    $file_name = $file['name'];
    $file_tmp = $file['tmp_name'];
    $file_size = $file['size'];
    $file_error = $file['error'];

    $file_ext = explode('.', $file_name);
    $file_ext = strtolower(end($file_ext));

    $allowed = array('png', 'jpg', 'jpeg');

    if(in_array($file_ext, $allowed)) {
        $file_name_new = $username.'.png';
        $file_dest = '../images/'.$file_name_new;
        if($file_error > 0){
            echo "There was an error uploading this image! Try another.";
        } else {
            if(move_uploaded_file($file_tmp, $file_dest)) {
                header("Location: ../user/editprofile.php?user=".$username);
            }
        }
    }
}

HTML位

                <h2>Profile Image</h2>
            <form action="editprofile.php?user=<?php echo $user; ?>" method="post" enctype="multipart/form-data">
                <input type="file" name="file">
                <input type="submit" value="Upload">
            </form>

2 个答案:

答案 0 :(得分:1)

首先,我pathinfo获取上传文件的文件名和文件扩展名。其次,您应该通过比较$_FILES['userfile']['type']中的mimetypes列表来验证mimetype而不是扩展,对于这种情况,您需要检查['image/png', 'image/jpeg']以防止某人上传类似PHP脚本的内容jpg扩展。您可能还希望保留上传文件的扩展名,而不是将它们全部设为png,因为这可能会导致意外错误。

将信息放在$file_error内,让您确切知道文件未上传的原因。你会得到一个file error code来告诉你出了什么问题。

这将是其中之一:

  • UPLOAD_ERR_INI_SIZE价值:1;上传的文件超出了php.ini中的upload_max_filesize指令。
  • UPLOAD_ERR_FORM_SIZE价值:2;上载的文件超出了HTML表单中指定的MAX_FILE_SIZE指令。
  • UPLOAD_ERR_PARTIAL价值:3;上传的文件仅部分上传。
  • UPLOAD_ERR_NO_FILE价值:4;没有上传文件。
  • UPLOAD_ERR_NO_TMP_DIR价值:6;缺少临时文件夹。在PHP 5.0.3中引入。
  • UPLOAD_ERR_CANT_WRITE价值:7;无法将文件写入磁盘。在PHP 5.1.0中引入。
  • UPLOAD_ERR_EXTENSION价值:8; PHP扩展程序停止了文件上载。 PHP没有提供确定哪个扩展名导致文件上传停止的方法;使用phpinfo()检查加载的扩展名列表可能有所帮助。在PHP 5.2.0中引入。

共享托管上最常见的是您要上传到的文件的权限不正确(值7)。

答案 1 :(得分:0)

我认为这是上传的目录权限问题。只需更改目录权限模式,如下所示:

textview.setText((Html.fromHtml("<strike>hello world!</strike>")));