如何在PHP中保存文件并根据可能的故障将文件特征保存到数据库

时间:2011-09-20 23:51:34

标签: php database gd

我正在将文件保存到服务器,并且我将文件的文件名,用户ID以及有关该文件的各种其他信息保存到PostgreSQL数据库中。理想情况下,我希望以类似于数据库事务的方式构造它。也就是说,应该发生以下情况之一:

  1. 保存文件
  2. 如果成功,请将信息保存到数据库
  3. 如果将数据保存到数据库失败,请删除文件
  4. OR

    1. 将信息保存到数据库
    2. 如果成功,请保存文件
    3. 如果保存文件失败,请从数据库中删除信息
    4. 此方法的唯一问题是第3步可能会失败 - 也就是说,您可能会在数据库中保留没有相应信息的文件,或者您可能没有保存相应文件的数据库信息。

      我想知道的是,如果有一种方法可以使用上述两种方法中的任何一种,同时确保步骤3始终发生或以足够的可靠性发生,我实际上不必担心失败。

      请注意,我使用PostgreSQL数据库并使用GD库中的imagegifimagejpegimagepng函数保存图像文件。

      修改

      为了回应杰克下面的坚实评论​​,我忘了提到我通过API服务器与数据库进行交互,所以我不是直接与数据库交互,而是向API发送REST请求,而API又与D B。这实际上意味着我不能将两个数据库交互都放在一个事务中。

2 个答案:

答案 0 :(得分:0)

我不确定你想要什么,但也许是这样的:

if(move_uploaded_file(...)){
  if(!mysql_query(...)){
    unlink(...);
  }
}

原谅我,如果我无法理解,或者我很容易就你的问题进行讨论。

答案 1 :(得分:0)

我决定选择一个次优但仍然可行的运行定期检查的路径,搜索每个文件名的数据库条目,如果找不到数据库条目,则删除该文件。 (如果有人对代码细节感兴趣,我很乐意在编辑中提供它。)