【问题标题】:PHP File upload image not workingPHP文件上传图像不起作用
【发布时间】:2018-02-07 18:27:33
【问题描述】:

我正在尝试在我的数据库中上传一张图片,但它不起作用。

这是上传图片的代码。

<?php
    $con = mysqli_connect("localhost", "root", "", "test");
    mysqli_select_db("test", $con);

    $username = $_POST['username'];
    $password = $_POST['password'];
    $dob = $_POST['dob'];
    $no = $_POST['no'];

    if(isset($_POST['submit'])) {

        if(getimagesize($_FILES['image']['tmp_name']) == FALSE) {
            echo "Please select an image.";
        }

        else {
            $target_dir = "uploads/";
            $target_file = $target_dir . basename($_FILES["image"]["name"]);
            $uploadOk = 1;
            $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

            // Check file size
            if ($_FILES["image"]["size"] > 500000) {
                echo "Sorry, your file is too large.";
                $uploadOk = 0;
            }

            // Check if file already exists
            if (file_exists($target_file)) {
                echo "<p>Sorry, file already exists.</p>";
                $uploadOk = 0;
            }

            // Check if $uploadOk is set to 0 by an error
            if ($uploadOk == 0) {
                echo "<p>Sorry, your file was not uploaded.</p>";
            }

            // if everything is ok, try to upload file
            else {

                if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
                    $name = basename( $_FILES["image"]["name"]);
                    $image = "uploads/".basename( $_FILES["image"]["name"]);
                    echo "<p>".$name. " has been uploaded.</p>";
                    header("location: image.php");

                    $qry = "INSERT INTO images (id, name, image, username, password, dob, no) VALUES (NULL, '".$name."', '".$image."', '".$username."', '".$password."', '".$dob."', '".$no."')";
                    $result = mysqli_query($con, $qry);

                    //$sql = "INSERT INTO images (username) VALUES ('$username')";
                    //$result = mysqli_query($con, $sql);

                } 

                else {
                    echo "<p>Sorry, there was an error uploading your file.</p>";
                }
            }
        }
     }
 ?>

它总是说抱歉上传文件出错。

这是服务器日志中的错误。

PHP 警告:move_uploaded_file():无法将 '/tmp/phpRGn6S7' 移动到 '从 2017-08-09 16-57-58.png 上传/截图' 在 /var/www/html/practice1/images2.php 第 45 行,引用: http://localhost/practice1/image.php

我是 PHP 文件上传的新手。 如果有人可以提供帮助,我将不胜感激。 提前致谢。

【问题讨论】:

  • 关于它给出的错误的任何进一步细节? php/apache 错误日志中显示了什么?文件大小是否超过了最大文件上传大小的 php 设置?它正在写入的文件夹是否可由 apache 用户写入?
  • 您能描述一下您面临的问题吗?
  • 您的 html 表单中是否设置了 enctypeenctype="multipart/form-data"
  • 很抱歉。我进行了编辑以包含服务器日志错误。
  • 是的@NorrisOduro

标签: php


【解决方案1】:

在 Windows 和 Linux 上,move_uploaded_file() 函数的工作方式不同。 在 Linux 上,您需要像这样放置完整路径:

$target_dir = "/var/www/html/practice1/uploads/";

或者分开 project_dir 并像这样上传目录:

$project_dir = '/var/www/html/practice1/';
$target_dir  = $project_dir . 'uploads/';

【讨论】:

  • 谢谢!不知道因为我转向 linux 并且只是一个新手使用它。
【解决方案2】:

我认为问题出在这里:

$target_dir = "uploads/";

你宁愿使用类似的东西:

$target_dir = PROJECT_DIR . "uploads/";

目的是最终获得上传目录的绝对路径。

【讨论】:

  • 你真的有这个目录吗?你能检查一下吗,只需在终端中运行命令ls /PROJECT_DIR/uploads
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2015-02-11
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多