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
相关产品推荐
相关产品推荐

