【问题标题】:When i delete a row from a database i also want to delete the corresponding file from the folder当我从数据库中删除一行时,我还想从文件夹中删除相应的文件
【发布时间】:2019-07-16 07:39:43
【问题描述】:

问题是当我从表中删除一个文档时,它也需要删除该文件。在这种情况下,我使用文件夹大小键,以便客户端可以看到文件夹正在使用多少空间。但是当我删除该行时,文件仍然存在,这意味着文件夹大小变得不准确。 这是删除行的类非常简单,但我需要在其中取消链接,以便文件也被删除。

这是有关如何读取文件以及文件所在位置的一些信息。所以现在每个客户都有自己的文件夹,当我在 readfile 下放置一个 unlink 时,它可以工作,所以读取文件然后从服务器中删除:

$pathinfo = pathinfo($document->bestand);
$ext = $pathinfo['extension'];
$file_name = HOSTING_DIR . DOCUMENT_SAVE_DIR . $_SESSION['clienturl'] . '/' . $document->document_id . '.' . $ext;
if(file_exists($file_name)) {
    header("Pragma: public");
    header("Expires: 0"); // set expiration time
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/download");
    header("Content-Disposition: inline; filename=" . $document->bestand);
    header("Content-Transfer-Encoding: binary");
    readfile(HOSTING_DIR . DOCUMENT_SAVE_DIR . $_SESSION['clienturl'] . '/' . $document->document_id . '.' . $ext);

public function deleteDocument($document_id) {
    $sql = 'DELETE FROM documenten WHERE document_id = :document_id';

    $parameters = array(
        ':document_id' => $document_id,
    );

    $stmt = $this->db->prepare($sql);   

    if($stmt->execute($parameters)) {       
        return true;                
    }  else {
        return false;
    }
}

所以期望很容易。我想同时删除该行并同时删除文件

【问题讨论】:

  • 抱歉,对这个完全陌生,很抱歉这个凌乱的问题
  • 你的问题是什么?如果你已经写了那么多代码,哪里出了问题?

标签: php mysql transactions unlink


【解决方案1】:

我想同时删除该行并同时删除该文件

您不能同时删除数据库行和文件。 如果您希望数据库和文件系统保持一致,您可以:

  1. 创建数据库事务
  2. 删除数据库行
  3. 删除文件
  4. 提交(如果文件被删除)或回滚(如果文件不能被删除)事务

【讨论】:

  • 是的,但是在哪里以及如何输入数字 3。尝试了不同的方法来删除该文件,但它没有被删除。我在这堂课中的什么地方取消链接?
  • 在您检查您的语句是否成功之后并且在您返回 true 之前。如果文件名正确并且取消链接不起作用,则可能是文件的权限问题。你检查过网络服务器日志和文件权限吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
相关资源
最近更新 更多