Лучшие практики транзакций базы данных и хранения файлов в файловой системе в PHP

Какова наилучшая практика в отношении целостности, если пользователь загружает пользовательские данные вместе с файлом, где пользовательские данные хранятся в базе данных, а файл хранится в файловой системе?

На данный момент я бы сделал что-то вроде следующего фрагмента кода, используя код PHP и PDO (, который не тестировался, но я надеюсь, что вы поняли мою точку зрения ). Мне не нравится часть сохранения изображения в методе вставки User ::. Есть ли хороший способ обойти это?

<?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;
    }
?>
7
задан cooxie 25 July 2012 в 20:40
поделиться