【问题标题】:PHP File upload to localhostPHP文件上传到本地主机
【发布时间】:2016-07-13 06:29:24
【问题描述】:

我正在使用在 localhost 中工作的 Apache 服务器。 我不懂 php,所以我尝试了 w3schools 网站上的代码,但我无法让它工作。

这是 HTML 代码:

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>

PHP 代码:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
echo $target_file;
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
?>

php代码开头的echo命令,只返回“uploads/”,所以我猜$_FILES不能正常工作。

EDIT2

这次我用 XAMPP 重新安装了 Apache,我对代码没有更多问题(它输出“文件是图像”),但我的“上传”文件夹中仍然没有上传文件。我的“上传”文件夹与本地主机中的网页位于同一文件夹中。

我正在使用默认的 php.ini (file_uploads = on)。 我尝试了来自不同目录的不同大小的不同文件,但到目前为止没有成功。

【问题讨论】:

  • 您是否在您工作的同一目录中创建了uploads 文件夹?
  • 那你有什么问题?
  • 我已经编辑了我的最后一句话:php代码开头的echo命令,只返回“uploads/”所以我猜$_FILES不能正常工作。
  • 要调试,请运行var_dump($_FILES) 而不是echo $target_file。如果您想要比“修复代码”更多的解决方案,您还应该提供比“不起作用”更多的细节。
  • 对不起,我的意思是应该显示文件名,但它是空的。我试过你的调试代码,它返回 array(0) { }

标签: php apache localhost


【解决方案1】:

已编辑

这应该可以正常工作。至于内容长度警告,您需要编辑 php.ini 文件。
php.ini
编辑这两行。
post_max_size = 200M
upload_max_filesize = 200M

html

<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image">
</form>
</body>
</html>

上传.php

<?php
if (!empty($_FILES) && isset($_FILES['fileToUpload'])) {
    switch ($_FILES['fileToUpload']["error"]) {
        case UPLOAD_ERR_OK:
            $target = "upload/";
            $target = $target . basename($_FILES['fileToUpload']['name']);

            if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $target)) {
                $status = "The file " . basename($_FILES['fileToUpload']['name']) . " has been uploaded";
                $imageFileType = pathinfo($target, PATHINFO_EXTENSION);
                $check = getimagesize($target);
                if ($check !== false) {
                    echo "File is an image - " . $check["mime"] . ".<br>";
                    $uploadOk = 1;
                } else {
                    echo "File is not an image.<br>";
                    $uploadOk = 0;
                }

            } else {
                $status = "Sorry, there was a problem uploading your file.";
            }
            break;

    }

    echo "Status: {$status}<br/>\n";

}

【讨论】:

  • 我试图将目标目录更改为 c:/uploads 但没有上传。我的浏览器控制台是空的,在我写的时候,文件名的回显是空的。
  • @oro777 给我一点时间,在编辑我的答案之前,我试着让我的身边先工作
  • @oro777 请试一试这些更改,并将结果或任何错误通知我。
  • 感谢更新,但我的 Chrome 控制台出现以下错误:加载资源失败:服务器响应状态为 500(内部服务器错误)
  • @oro777 stackoverflow.com/a/19180823/6385066 "500 代码通常表示服务器上的错误,而不是您的代码。"你应该检查日志。
【解决方案2】:

您的代码工作正常。 我刚查了

uploads/untitled.pngFile is an image - image/png.

所以你可能错过了其他东西。

提供您正在使用的文件列表及其完整代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多