From e8e996182fce9979d9380243944b5bea06db65eb Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Thu, 21 Jul 2016 00:23:27 +0200 Subject: [PATCH] Delete file on class destruction or we do it too quickly Source image was removed when trying to use it for resizeTo --- lib/imagefile.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/imagefile.php b/lib/imagefile.php index ab59e16b25..0d711ad986 100644 --- a/lib/imagefile.php +++ b/lib/imagefile.php @@ -120,6 +120,14 @@ class ImageFile Event::handle('FillImageFileMetadata', array($this)); } + public function __destruct() + { + if (strlen($this->filepath) > 0 && (!$this->fileRecord instanceof File || $this->filepath !== $this->fileRecord->getPath())) { + common_debug(__METHOD__.': Deleting temporary file that was created as image file thumbnail source: '._ve($this->filepath)); + @unlink($this->filepath); + } + } + public static function fromFileObject(File $file) { $imgPath = null; @@ -152,9 +160,6 @@ class ImageFile try { $image = new ImageFile($file->getID(), $imgPath); } catch (Exception $e) { - common_debug(sprintf('Exception caught when creating ImageFile for File id==%s and imgPath==', _ve($file->id), _ve($imgPath))); - throw $e; - } finally { // Avoid deleting the original try { if (strlen($imgPath) > 0 && $imgPath !== $file->getPath()) { @@ -166,6 +171,8 @@ class ImageFile // doesn't exist anyway, so it's safe to delete $imgPath @unlink($imgPath); } + common_debug(sprintf('Exception caught when creating ImageFile for File id==%s and imgPath==', _ve($file->id), _ve($imgPath))); + throw $e; } return $image; } @@ -587,7 +594,7 @@ class ImageFile list($width, $height, $x, $y, $w, $h) = $this->scaleToFit($width, $height, $crop); $thumb = File_thumbnail::pkeyGet(array( - 'file_id'=> $this->fileRecord->id, + 'file_id'=> $this->fileRecord->getID(), 'width' => $width, 'height' => $height, )); @@ -597,7 +604,7 @@ class ImageFile $filename = $this->fileRecord->filehash ?: $this->filename; // Remote files don't have $this->filehash $extension = File::guessMimeExtension($this->mimetype); - $outname = "thumb-{$this->fileRecord->id}-{$width}x{$height}-{$filename}." . $extension; + $outname = "thumb-{$this->fileRecord->getID()}-{$width}x{$height}-{$filename}." . $extension; $outpath = File_thumbnail::path($outname); // The boundary box for our resizing @@ -615,7 +622,7 @@ class ImageFile throw new ServerException('Bad thumbnail size parameters.'); } - common_debug(sprintf('Generating a thumbnail of File id==%u of size %ux%u', $this->fileRecord->id, $width, $height)); + common_debug(sprintf('Generating a thumbnail of File id==%u of size %ux%u', $this->fileRecord->getID(), $width, $height)); // Perform resize and store into file $this->resizeTo($outpath, $box); -- 2.39.5