【问题标题】:php ensure file_get_contents images not corrputphp 确保 file_get_contents 图像不损坏
【发布时间】:2016-08-29 03:14:47
【问题描述】:

我有一个 php 脚本来使用 file_get_contents 将远程图像下载到服务器,但有时它已损坏

$contents = file_get_contents($url);
list($width,$height) = getimagesizefromstring( $contents );

if($width <= 300 ){
    $contents = base64_decode('isdfafasfgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=');
    $downloadlog->log( "ignore file width below 300 : " . $url );
}

$aws->writeToAWS( $target_path , $contents );
$contents = null; 

是否有任何方法可以确保正确下载图像而没有任何损坏,或者有什么方法可以根据远程 url 验证图像?

【问题讨论】:

    标签: php


    【解决方案1】:

    您可以使用getimagesize 进行验证

    注意: 某些格式可能不包含图像或可能包含多个图像。在这些情况下,getimagesize() 可能无法正确确定图像大小。在这些情况下,getimagesize() 将返回宽度和高度为零。

    如果失败,则返回 FALSE。


    编辑:

    例如

    <?php
    $array = getimagesize('https://dl.dropboxusercontent.com/u/22492671/not_an_image.jpg');
    if( $array ){
        echo '<pre>';
        print_r($array);
        echo '</pre>';
    } else {
        echo 'image broken';
    }
    ?>
    

    getimagesize() 图像损坏时返回 false。

    【讨论】:

    • 如何使用 getimagesize 测试图像是否损坏,是否有任何脚本可以测试?
    • 我已经测试过了,还是不行:(这个案例和我类似stackoverflow.com/questions/37030224/…
    • 损坏的图像永远不会从 getimagesize 返回 false
    • @hkguile 在这种情况下, getimagesize() 应该返回一个数组,对吧?数组中有什么?
    • 我曾尝试使用 getimagesize($corrupt_url) 和 getimagesize($ok_url) ,它返回一个包含相同信息的数组。
    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 2013-06-30
    • 2023-03-19
    • 1970-01-01
    • 2014-12-27
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多