PHP删除图片提示Permission denied,Windows下如何以管理员身份运行?
Windows下解决PHP删除图片权限拒绝问题的方案
问题描述
原本正常运行的PHP图片删除功能突然报错,提示:
Warning: unlink(files/decoration.png ): Permission denied in C:\xampp\htdocs\server\file_upload\delete.php on line 5
无法删除目标图片,相关代码如下:
image_display.php 代码
<?php $conn= mysqli_connect("localhost","root","","crud"); $query = mysqli_query($conn, "select * from upload"); while($data = mysqli_fetch_assoc($query)) { ?> <img src="http://localhost/server/file_upload/<?php echo $data['location'] ?>" height="200" width="200"/> <a href="delete.php?path=<?php echo $data['location'] ?> &id=<?php echo $data['id'] ?>">Delete</a> <?php } ?>
delete.php 代码
<?php $path = $_GET['path']; $id = $_GET['id']; chown($path,777); if(unlink($path)) { $conn= mysqli_connect("localhost","root","","crud"); $query = mysqli_query($conn, "delete from upload where id='$id'"); header('location: show.php'); } ?>
问题:在Windows系统下如何通过管理员权限运行解决该问题?
解决方法
首先纠正一个错误:chown是Linux系统修改文件所有者的函数,Windows下完全不生效,你写的chown($path,777)这行代码没用,直接删掉就行。下面是实际可行的解决步骤:
以管理员身份启动Apache服务
找到XAMPP控制面板的快捷方式,右键点击选择「以管理员身份运行」,然后在面板里重启Apache。这样PHP运行时就会继承管理员权限,拥有文件删除的权限。修改文件存储目录的权限
找到你的图片存储目录C:\xampp\htdocs\server\file_upload\files,右键点击文件夹选择「属性」→「安全」选项卡,找到Apache运行对应的用户(通常是IUSR、SYSTEM或当前登录用户),给该用户勾选「完全控制」权限,点击应用保存。优化delete.php的安全性
为了防止恶意路径注入,建议给路径加上校验逻辑,比如:<?php $path = $_GET['path']; $id = $_GET['id']; // 限定文件只能在files目录下 $baseDir = __DIR__ . '/files/'; $safePath = realpath($baseDir . basename($path)); // 校验路径合法性 if ($safePath && str_starts_with($safePath, $baseDir)) { if(unlink($safePath)) { $conn= mysqli_connect("localhost","root","","crud"); $query = mysqli_query($conn, "delete from upload where id='$id'"); header('location: show.php'); } } ?>
内容的提问来源于stack exchange,提问作者Osama Mohammed
相关产品推荐
相关产品推荐

