蓝极冰焰 2024-07-03 21:00 采纳率: 40.7%
浏览 4
已结题

关于PHP上传图片的问题

不知道哪里出了问题,上传文件时总是提前无法写入,而服务器文件夹权限我已查看是755,麻烦帮我看看
HTML页面

<?php 
        foreach ($Lists as $row): 
            $linkimage = htmlentities($row['linkimage']);
?>

<form id="uploadForm" enctype="multipart/form-data">
    <input type="file" name="avatar" required>
    <input type="hidden" id="linkimage" value="<?php echo $linkimage;?>"> 
    <input type="submit" value="点击上传">
</form>
 <?php endforeach; ?>


<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
   <script>
        document.getElementById('uploadForm').addEventListener('submit', function(e) {
            e.preventDefault(); // 阻止表单的默认提交行为
            var formData = new FormData(this); // 使用表单元素创建FormData对象

            // 有一个隐藏的输入字段或其他方式获取到 linkimageValue
            var linkimageValue = document.getElementById('linkimage').value; // 获取隐藏字段的值

            // 将 linkimageValue 添加到 formData 中
            formData.append('linkimage', linkimageValue);

            fetch('upload.php', {
                method: 'POST',
                body: formData
            })
            .then(response => response.text()) // 或者response.json(),如果服务器返回JSON
            .then(data => {
                document.getElementById('sssz-content').innerHTML = data;
            })
            .catch(error => {
                console.error('Error:', error);
            });
        });
    </script>

upload.php页面

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

if (isset($_FILES['avatar'])) {
    $targetDirectory = "../image/upload/";

    if (!is_dir($targetDirectory)) {
        mkdir($targetDirectory, 0755, true);
    }

    if (isset($_POST['linkimage'])) {
        $linkimage = $_POST['linkimage'];
        $linkimage = basename(stripslashes($linkimage));

        $originalFileExtension = strtolower(pathinfo($_FILES["avatar"]["name"], PATHINFO_EXTENSION));

        $targetFile = $targetDirectory . $linkimage . '.jpg';

        if (file_exists($targetFile)) {
            die("File with the same name already exists.");
        }

        $uploadOk = 1;

        if ($uploadOk == 1) {
            if (move_uploaded_file($_FILES["avatar"]["tmp_name"], $targetFile)) {
                echo "文件 " . htmlspecialchars(basename($targetFile)) . " 上传成功。";
            } else {
                echo "对不起,上传您的文件时出现了错误。";
            }
        }
    } else {
        die("Missing 'linkimage' in POST request.");
    }
} else {
    echo "对不起,没有文件被上传。";
}
    ?>

  • 写回答

7条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-07-03 21:00
    关注

    引自免费微信小程序:皆我百晓生

    从你的代码和描述来看,可能存在以下几个问题导致文件无法上传:

    1. 文件上传的表单元素名称不一致:在HTML表单中,文件上传的输入字段名称是avatar,但在PHP代码中,你试图通过$_FILES['userfile']获取文件信息。这会导致$_FILES['userfile']为空,因此文件无法上传。你应该将PHP代码中的$_FILES['userfile']改为$_FILES['avatar']
    2. 处理上传文件的路径问题:你在$targetFile中定义了上传文件的路径和名称,但路径可能不正确。确保路径指向服务器上的正确位置,并且文件夹存在。如果文件夹不存在,你的PHP代码会尝试创建它,但确保这个逻辑正确执行。
    3. 文件名冲突问题:你的代码检查是否已经存在相同名称的文件,如果存在则终止脚本执行。但是,在生成新的文件名时,你只检查了文件扩展名是否为.jpg,而没有检查其他可能的扩展名(如.png, .gif等)。如果上传的文件不是JPG格式,可能会出现问题。你应该在生成文件名时保留原始文件的扩展名。

    针对上述问题,我为你修改了PHP代码:

    <?php
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    
    if (isset($_FILES['avatar'])) {
        $targetDirectory = "../image/upload/";
    
        if (!is_dir($targetDirectory)) {
            mkdir($targetDirectory, 0755, true);
        }
    
        if (isset($_POST['linkimage'])) {
            $linkimage = $_POST['linkimage'];
            $originalFileExtension = pathinfo($_FILES["avatar"]["name"], PATHINFO_EXTENSION); // 获取原始文件扩展名
            $targetFile = $targetDirectory . $linkimage . '.' . $originalFileExtension; // 使用原始文件扩展名生成目标文件名
            $targetFile = basename(stripslashes($targetFile)); // 去除可能的斜杠
    
            if (file_exists($targetFile)) {
                die("已存在相同名称的文件。");
            }
            
            $uploadOk = 1;
            if ($uploadOk == 1) {
                if (move_uploaded_file($_FILES["avatar"]["tmp_name"], $targetFile)) {
                    echo "文件 " . htmlspecialchars($targetFile) . " 上传成功。";
                } else {
                    echo "对不起,上传文件时出错。";
                }
            } else {
                die("文件上传出现未知错误。"); // 添加错误处理信息以获取更多信息
            }
        } else {
            die("POST请求中缺少'linkimage'。");
        }
    } else {
        echo "对不起,没有文件被上传。";
    }
    ?>
    

    确保服务器上的文件夹权限正确设置为755,并且服务器配置允许文件上传。如果问题仍然存在,请检查服务器日志以获取更多详细的错误信息。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月3日
  • 创建了问题 7月3日