php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #76235 imagejpeg does not always return false on error
Submitted: 2018-04-18 12:50 UTC Modified: 2018-04-18 16:26 UTC
From: inkredibl at gmail dot com Assigned: cmb (profile)
Status: Closed Package: GD related
PHP Version: 7.1.16 OS: Mac
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
MUST BE VALID
Solve the problem:
34 + 33 = ?
Subscribe to this entry?

 
 [2018-04-18 12:50 UTC] inkredibl at gmail dot com
Description:
------------
Whenever out of space situation happens on a drive imagejpeg() does not necessarily return false when it fails to write the image to disk. This creates a problem when you need to handle errors since no error can be detected in this case. I'm fine with it not working all the time but the documentation needs to mention this somewhere. Fixing this would also be nice but still it needs to be mentioned that this is going on so that people can write valid code.

If you could get a disk with tiny amounts of available space and save images on it this will happen whenever there's not enough space on the drive to save the whole image.

The workaround is to use:
    ob_start();
    imagejpeg($img, null);
    $content = ob_get_clean();
    $result = (file_put_contents('file.jpg', $content) == strlen($content));

Test script:
---------------
<?php
$img = imagecreate(4000, 4000);
$result = imagejpeg($img, 'file.jpg', 100);
// $result will be true even if the image is truncated or in some cases even totally empty (my guess is it depends on the file system)
var_export($result)


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2018-04-18 14:29 UTC] cmb@php.net
-Status: Open +Status: Analyzed -Package: Documentation problem +Package: GD related -Assigned To: +Assigned To: cmb
 [2018-04-18 14:29 UTC] cmb@php.net
Indeed, this is the case for (almost?) all image output functions.
The main reason is that libgd doesn't provide a useful return
value[1], so the PHP bindings don't know whether the function
succeeded or not.

[1] e.g. <https://github.com/libgd/libgd/issues/347>
 [2018-04-18 16:26 UTC] cmb@php.net
Automatic comment from SVN on behalf of cmb
Revision: http://svn.php.net/viewvc/?view=revision&amp;revision=344720
Log: Fix bug #76235: imagejpeg does not always return false on error
 [2018-04-18 16:26 UTC] cmb@php.net
-Status: Analyzed +Status: Closed
 [2018-04-18 16:26 UTC] cmb@php.net
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.

Thank you for the report, and for helping us make our documentation better.
 [2020-02-07 06:05 UTC] phpdocbot@php.net
Automatic comment on behalf of cmb
Revision: http://git.php.net/?p=doc/en.git;a=commit;h=f543b07b0a335d58d7ea8ade0e6b3b63b61191dd
Log: Fix bug #76235: imagejpeg does not always return false on error
 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Sat Jul 24 09:01:26 2021 UTC