Блог

PHP: Скачать изображение

Всё легко и просто

<?php
class ImageDownloadURL 
{
    
    public $type = array('jpeg', 'jpg', 'png', 'gif');

    protected $url = null;

    protected $error = array();

    /**
     * @method __construct
     */
    public function __construct($data = null) 
    {
        if (is_array($data)) {
            if (isset($data['url']) && !empty($data['url'])) {
                self::setURL($data['url']);
            }

            if (isset($data['path']) && !empty($data['path'])) {
                self::setPath($data['path']);
            }
        }

        return;
    }

    /**
     * @method setURL
     * @return boolean
     */
    public function setURL($url = null) 
    {
        if (isset($url) && self::checkURL($url)) {
            $this -> url = trim($url);
            return true;
        }

        return false;
    }

    /**
     * @method setPath
     * @return boolean
     */
    public function setPath($path = null) 
    {
        if (isset($path) && file_exist($path)) {
            $this -> path = $path;
            return true;
        }

        return false;
    }

    /**
     * @method getListError
     * @return string
     */
    public function getListError() 
    {
        return $this -> error;
    }

    /**
     * @method addError
     */
    protected function addError($str) 
    {
        $this -> error[] = $str;
    }

    /**
     * @method getName()
     * @desc получить имя файла
     * @return strint
     */
    protected function getName() 
    {
        return pathinfo($this->url, PATHINFO_FILENAME);
    }

    /**
     * @method checkURL()
     * @desc   проверить полученный адресс
     * @return boolean true если правельный; false если не правильный
     */
    protected function checkURL($url = null) 
    {
        if (isset($url) && preg_match('/^(https?|ftp):///', $url)) {
            return true;
        }

        return false;
    }

    /**
     * @method getDir
     * @return string
     */
    protected function getDir() 
    {
        return realpath(dirname(__FILE__));
    }

    /**
     * @method Upload
     * @desc   если все хорошо - загрузить изображение по ссылке
     * @return boolean если все хорошо true, если нет false
     */
    public function Upload() 
    {
        $options = array(
            CURLOPT_HEADER         => false, 
            CURLOPT_URL            => $this->url, 
            CURLOPT_USERAGENT      => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/6.0', 
            CURLOPT_HTTPHEADER     => array('Expect:'), 
            CURLOPT_RETURNTRANSFER => true, 
            CURLOPT_FOLLOWLOCATION => true,
            );

        if (preg_match('/^https:///', $this -> url)) {
            $options[CURLOPT_SSL_VERIFYPEER] = false;
            $options[CURLOPT_SSL_VERIFYHOST] = false;
        }

        $ch = curl_init();
        curl_setopt_array($ch, $options);
        if (!$exec = curl_exec($ch)) {
            curl_close($ch);
            $this -> addError('ERROR:Code');

            return false;
        }

        $result = curl_getinfo($ch);
        $content = curl_multi_getcontent($ch);

        curl_close($ch);

        if ($result['http_code'] == 200) {
            $img = getimagesize($this -> url);
            $type = preg_replace('/image//', '', trim($img['mime']));

            if (in_array($type, $this -> type)) {
                $name = sprintf('%s/%s.%s', $this -> getDir(), $this -> getName(), $type);
                if ($image = fopen($name, 'w')) {
                    fwrite($image, $content);
                    fclose($image);

                    return true;
                }
                $this -> addError('ERROR:Can`t create file');
                return false;
            }

            $this -> addError('ERROR:Type file');

            return false;
        } 
        else {
            $this -> addError('ERROR:Code');
            return false;
        }
    }

}

$data = array(
    'url' => 'http://cs4939.vk.com/u4036596/134457437/x_78fac9b1.jpg', 
    'path' => realpath(dirname(__FILE__) . '/images/'
));

$image = new ImageDownloadURL($data);
if ($image->Upload()) {
    echo "OK";
} 
else {
    var_dump($image->getListError());
}
?>