You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中unlink函数无法删除文件问题排查求助

图片删除功能排查:unlink无法删除文件问题

问题概述

已实现任务图片上传功能,上传流程及数据库更新均正常,但执行图片删除操作时,仅能将数据库中的图片字段设为NULL,unlink()函数无法删除服务器上的实际图片文件。

错误日志

[21-Apr-2023 00:26:43 Europe/Berlin] PHP Notice:  Undefined variable: GET in /Applications/XAMPP/xamppfiles/htdocs/taskmanager/funkcije/obrisiSliku.php on line 6
[21-Apr-2023 00:26:43 Europe/Berlin] PHP Notice:  Trying to access array offset on value of type null in /Applications/XAMPP/xamppfiles/htdocs/taskmanager/funkcije/obrisiSliku.php on line 6
[21-Apr-2023 00:26:43 Europe/Berlin] PHP Warning:  unlink(): No such file or directory in /Applications/XAMPP/xamppfiles/htdocs/taskmanager/funkcije/obrisiSliku.php on line 9

相关代码

上传图片函数

if (isset($_POST["button"])) {
    $naziv = trim($_POST["naziv"]);
    $kategorija = trim($_POST["kategorija"]);
    $opis = trim($_POST["opis"]);

    $ime = time()."_".$_FILES["slika"]["name"];
    $target = "../slika/".$ime;
    
    Zadatak::dodaj($naziv, $korisnik, $kategorija, $opis, $ime, $konekcija);
}

删除功能调用代码

<?php
require "../konekcija/konekcija.php";
require "../modeli/zadatak.php";

$zadatak = trim($_GET["zadatak"]);

$podaci = Zadatak::vratiPodatke($zadatak, $konekcija);

?>

[...]

<h4>Slika</h4>
<button onclick="obrisi();">Obrisi</button>

[...]

<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

<script>
    function obrisi() {
        let zadatak = <?= $podaci->zadatakID ?>;
        let slika = "../slike/'<?= $podaci->slika ?>'";
        $.ajax({
                url: '../funkcije/obrisiSliku.php',
                data: {
                    zadatak: zadatak,
                    slika: slika
                },
                success: function (data) {
                }
            });
    }
</script>

obrisiSliku.php(删除处理逻辑)

<?php
require "../konekcija/konekcija.php";
require "../modeli/zadatak.php";

$zadatak = trim($_GET["zadatak"]);
$slika = trim($GET["slika"]);

Zadatak::obrisiSliku($zadatak, $konekcija);
unlink($slika);
?>

问题分析与修复步骤

1. 修复PHP超全局变量拼写错误

错误日志明确指出$GET未定义,PHP中超全局变量$_GET必须加下划线,修改obrisiSliku.php第6行:

$slika = trim($_GET["slika"]);

2. 修正图片路径的拼写与多余引号

  • 上传时存储的路径目录是slika/,但前端JS中误写为slike/(拼写错误)
  • 路径中多余的单引号会导致路径无效,生成类似../slika/'filename.jpg'的错误路径

修改前端JS中的路径代码:

let slika = "../slika/<?= $podaci->slika ?>";

3. 确保路径相对位置正确

obrisiSliku.php位于funkcije/目录,图片存储在同级的slika/目录,为避免相对路径歧义,可将路径转为绝对路径后再删除:

// 替换obrisiSliku.php中的unlink代码
$relativePath = trim($_GET["slika"]);
$absolutePath = __DIR__ . '/../' . substr($relativePath, 3);
if (file_exists($absolutePath)) {
    unlink($absolutePath);
} else {
    error_log("待删除文件不存在:" . $absolutePath);
}

4. 检查文件权限

确保Web服务器运行用户(如XAMPP中的www-data)对slika/目录有写权限,否则无法删除文件。可通过终端执行:

chmod -R 755 /Applications/XAMPP/xamppfiles/htdocs/taskmanager/slika/

内容的提问来源于stack exchange,提问作者user21626341

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:47:02