使用PHP imagecreatefromstring时如何从第三方网站捕获无效图像

时间:2017-06-11 06:27:44

标签: php

据我所知,我们可以使用以下方法来捕获无效图像,但就我的情况而言,它无法捕获下载超时。 我试图从第三方网站获取图像,我的脚本继续加载 根本没有回应。也许我用来捕捉错误的方式还不够好? 任何人都可以建议更好的方法来捕获无效的文件和下载超时?谢谢!

$url = "https://www.example.com/image.jpeg";
if (checkRemoteFile($url))
{
    $imagefile = $url;
    $resource = imagecreatefromstring(file_get_contents($imagefile));

    if ($resource == true)
    {
      echo "Image Good";  
    }
    else
    {
      echo "Image Bad"; 
    }
}
else
{
    echo "Invalid file";
}

function checkRemoteFile($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    // don't download content
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if(curl_exec($ch)!==FALSE)
    {
        return true;
    }
    else 
    {
        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

提供的脚本对我来说很好,调试它检查卷曲错误:

function checkRemoteFile($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    // don't download content
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($ch);
    if ($result === false) {
        error_log(curl_error($ch));
    }

    curl_close($ch);

    return $result !== false;
}

每次收到错误的响应或超时时,都会记录错误。如果您收到超时,可能是主机已关闭,我使用https://www.w3schools.com/css/trolltunga.jpg对其进行了测试,并且运行正常。