【发布时间】:2012-07-24 08:48:13
【问题描述】:
如果用户将用户数据与文件一起上传,用户数据存储在数据库中,并且文件存储在文件系统中,那么关于完整性的最佳做法是什么?
目前我会使用 PHP 和 PDO 执行以下代码 sn-p 之类的操作(代码未经测试,但我希望你能明白我的意思)。我不喜欢 User::insert 方法中的保存图像部分。有什么好办法吗?
<?php
User::insert($name, $image, $ext);
Class User{
static public function insert($name, $image, $ext){
$conn = DB_config::get();
$conn->beginTransaction();
$sth = $conn->prepare("
INSERT INTO users (name)
values(:name)
;");
$sth->execute(array(
":name" => $name
));
if ($conn->lastInsertId() > -1 && Image::saveImage($image, IMAGE_PATH . $conn->lastInsertId(). $ext))
$conn->commit();
else
$conn->rollback();
return $conn->lastInsertId();
}
}
Class Image{
static public function saveimage($image, $filename){
$ext = self::getExtensionFromFilename($filename);
switch($ext){
case "jpg":
case "jpeg":
return imagejpeg(imagecreatefromstring($image), $filename);
}
return false;
}
?>
【问题讨论】:
-
不确定您所说的完整性是什么意思。如果您的意思是验证文件是否是未损坏的图像,您可以使用 ImageValidator 类进行检查,如以下问题所述:stackoverflow.com/questions/1581136/…
-
另外,您可能对 DAO 模式感兴趣:odi.ch/prog/design/php/guide.php
-
@JamesPoulson 完整我的意思是,如果出于某种原因无法将用户存储在数据库中,则不得存储图像,反之亦然。但也许我的问题表述错了,但我确实在寻找某种设计模式来分离用户和图像的东西。您的链接非常有帮助。谢谢
-
@cookie 我会做一些类似于下面建议的事情:检查代码中的图像,可能使用 uniqid(技术上唯一)或 md5 哈希(文件完整性,相对唯一)保存图像,将图像注册到专用表(解耦并允许 N 个图像),注册用户,如果用户注册被取消或用户被删除,则删除数据库和磁盘中的图像,如果用户注册成功,则使用用户的 PK/id 更新图像表。
标签: php transactions pdo