我尝试使用以下代码从上传的文件夹中删除图像文件
public function delete(){
$query = 'SELECT * FROM tbl_product WHERE productID= ' . $this->productID;
$STH = $this->DBH->query($query);
$STH->setFetchMode(PDO::FETCH_OBJ);
$img = $STH->fetch();
foreach($deleteIMG = $img){
{
$deleteLINK = $deleteIMG['image'];
unlink("../resource/image/".$deleteLINK);
}
}
$sql= "DELETE FROM tbl_product WHERE productID=" . $this->productID;
$result = $this->DBH->exec($sql);
此处无法从上传的文件夹中删除图像文件,但可以从数据库中删除数据。
所以请帮助我适当的解决方案。 感谢....
答案 0 :(得分:0)
如果不了解服务器的详细信息,很难说。它可能是权限问题。您可以使用ls -al
来检查权限。
需要考虑两件事:权限和文件/目录所有权。您的Web服务器用户应拥有所有者或组所有权。您需要{file}}文件及其父目录的write and execute
权限才能删除文件。这个页面解释它(如果使用Linux):https://www.pluralsight.com/blog/it-ops/linux-file-permissions
就你的代码而言,你可以做到全部或全部'。这意味着如果文件没有删除,则记录也不会从数据库中删除。如果unlink()
函数没有成功删除文件,则返回布尔值false。尝试这样的事情:
$allDeleted = true;
foreach($images as $img) {
$deleteLINK = $deleteIMG['image'];
$allDeleted |= unlink("../resource/image/" . $deleteLINK);
}
if ($allDeleted === true) {
$sql= "DELETE FROM tbl_product WHERE productID=" . $this->productID;
$result = $this->DBH->exec($sql);
}
|=
是按位OR运算符。这篇文章很好地解释了它:
In PHP what does |= mean, That is pipe equals (not exclamation)
答案 1 :(得分:0)
@Zunaid,这就是我能够从一个文件夹中删除一个文件(无论是图像,视频,文档等)以及它的'同时来自db表的文件路径(几小时前编写的代码& 无情测试);
Code Breakdown:
<?php
// triggered by a link on the delete form -
// < a href="delete.php?fname=<?php echo $fname; ? >" class="btn btn-danger" onclick="confirm('you sure about this?');"><i class="icon-trash icon-white">< /a >
if(isset($_POST['delete']))
{
//include the database connection file
include("db.php");
//instantiate the PHP Data Object
$pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_password, $db_options);
// set the PDO error mode to exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//get the filename
$fname = $_GET['fname'];
//delete file from directory with checking for both file_exists AND is_writable
if(file_exists($fname) && !is_writable($fname))
{
chown($fname, 0644); // tried CHMOD - didn't work - LAST RESORT USAGE FOR CHOWN: 0777 - USE WITH CARE!!!
}
unlink("user_data/$uname".DIRECTORY_SEPARATOR.$fname);
//deleting the row from table
$sql = "DELETE FROM `upload_data` WHERE `FILE_NAME`=:FILE_NAME";
$query = $pdo->prepare($sql);
$query->execute(array(':FILE_NAME' => $fname));
if($query)
{
echo "<h4 style='color:red'>File DELETED</h4>";
header('Refresh: 1;url=home.php');
}
else
{
echo "<h4 style='color:red'>Error Deleting File</h4>";
header('Refresh: 1;url=home.php');
}
}
?>
我,我自己,在我能够根据自己的情况制作这个问题之前,仔细阅读了几十个的Stack Overflow问题/答案和完整的网络教程。
我遇到了 EXACT 同样的问题,即能够从db表中删除文件路径,而代码甚至没有触及文件。希望你能把它扭曲到你自己的目的......