Помогите забрать картинку [php]

Тема в разделе "PHP", создана пользователем KillDead, 29 авг 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Уже мозги кипят.:mad:
    Есть картинка на неком хосте http: //test:60/foto/qqq.jpg?cvt=jpeg
    Ввожу через браузер - показывает её.
    Но пробовал забрать через curl, file_get_contents, fsockopen- выдаёт ошибку 403, причём он говорит


    Без get данных. Это он обрезает при выводе ошибки или хочет приконектится к нему без них- непонятно.
    Может дело в порте? Может кто помочь?


    ответ
    HTML:
    
    HTTP/1.0 403 Forbidden Server: squid/2.6.STABLE16 Date: Fri, 29 Aug 2008 19:23:42 GMT Content-Type: text/html Content-Length: 1120 Expires: Fri, 29 Aug 2008 19:23:42 GMT X-Squid-Error: ERR_ACCESS_DENIED 0 X-Cache: MISS from SLIET-PROXY-THREE X-Cache-Lookup: NONE from SLIET-PROXY-THREE:8080 Via: 1.0 SLIET-PROXY-THREE:8080 (squid/2.6.STABLE16) Proxy-Connection: close 
    
     
  2. Zircool

    Zircool Создатель

    Регистр.:
    1 июн 2008
    Сообщения:
    35
    Симпатии:
    43
    http: //test:60/foto/qqq.jpg?cvt=jpeg

    Ты правильно указал хост? у меня никакая картинка не открывается.
     
  3. maksim-ineshin

    maksim-ineshin

    Регистр.:
    20 дек 2007
    Сообщения:
    179
    Симпатии:
    32
    DEER :D
    это на локалхосте..
     
  4. sashabsas

    sashabsas Создатель

    Регистр.:
    19 авг 2008
    Сообщения:
    16
    Симпатии:
    5
    А что очень большая картинка? Нельзя клавишу Print Screen (PrtScn) использовать?
    При вводе url в браузере ничего не вижу. Ты уверен что хост правильно написал??? test:60?? :confused:
     
  5. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Попробуй вместо ? указать её html-сущность.
     
  6. BACZ

    BACZ

    Регистр.:
    18 июн 2008
    Сообщения:
    608
    Симпатии:
    381
    вот занятное обсуждение про забор картинок

    http://www.phpforum.ru/index.php?showtopic=8286&pid=44320&st=0&#entry44320

    может быть стоит раздуть пакет на доп.поля? разные там рефереры и прочие полезности которые может учитывать хост где картинка? там авторизации случаем не наблюдается?
    вот ещё примерчик

    http://omsk777.ru/all.php?act=fsockopen
     
  7. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    KillDead, покажи код.
     
  8. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Реффер передавай с curlом, и все ок будет.
     
  9. bookinist

    bookinist Создатель

    Регистр.:
    15 фев 2007
    Сообщения:
    43
    Симпатии:
    12
    Вот попробуй готовый код (с ресайзом картинок:(
    PHP:
    $uploadPath './cache/';
    fm_copyimage($pictureUrl200150true"img1""1");

    function 
    fm_copyimage($sourceFileName$width null$height null$saveProportions true$title$id)
    {
        global 
    $uploadPath;

        
    $imageInfo = @getimagesize($sourceFileName);
        if (!
    $imageInfo) {
            return 
    null;
        }
        switch (
    $imageInfo["mime"]) {
            case 
    "image/gif":
                
    $ext "gif";
                break;
            case 
    "image/jpeg":
                
    $ext "jpg";
                break;
            case 
    "image/png":
                
    $ext "png";
                break;
        }
        
    $fullFileName sprintf("./%s/%s.%s"$uploadPath$title$ext);
        if (
    null !== $width && null !== $height && extension_loaded("gd")) {
            
    $origFileName sprintf("./%s/orig_%s.%s"$uploadPath$title$ext);
            
    usleep(500000);
            if (
    function_exists("curl_init")) {
                
    $ch curl_init();
                
    curl_setopt($chCURLOPT_URL$sourceFileName);
                
    curl_setopt($chCURLOPT_TIMEOUT300);
    //            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
                
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
                
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");


                
    $st curl_exec($ch);
                
    $fd = @fopen($origFileName"w");
                
    fwrite($fd$st);
                @
    fclose($fd);

                
    curl_close($ch);
            } else {
                
    $fp = @fopen($sourceFileName"rb");
                
    $fd = @fopen($origFileName"w");
                if (
    $fp && $fd) {
                    while (!
    feof($fp)) {
                        
    $st fread($fp4096);
                        
    fwrite($fd$st);
                    }
                }
                @
    fclose($fp);
                @
    fclose($fd);
            }
            
    $result fm_imageresize($origFileName$fullFileName$width$height$saveProportions);
            @
    unlink($origFileName);
        } else {
            
    $result copy($sourceFileName$fullFileName);
        }
        if (
    $result) {
            return 
    $fullFileName;
        } else {
            return 
    false;
        }
        return 
    false;
    }

    function 
    fm_imageresize($sourceFileName$destinationFileName$width$height$saveProportions true)
    {
        if (
    is_file($sourceFileName)) {
            
    $imageInfo = @getimagesize($sourceFileName);
            if (!
    $imageInfo) {
                return 
    false;
            }
        } else {
            return 
    false;
        }
        if (
    $imageInfo[0] <= $width && $imageInfo[1] <= $height) {
            if (
    $sourceFileName == $destinationFileName) {
                return 
    null;
            } elseif (
    copy($sourceFileName$destinationFileName)) {
                return 
    true;
            } else {
                return 
    false;
            }
        } else {
            switch (
    $imageInfo["mime"]) {
                case 
    "image/gif":
                    
    $sourceImage imagecreatefromgif($sourceFileName);
                    break;
                case 
    "image/jpeg":
                    
    $sourceImage imagecreatefromjpeg($sourceFileName);
                    break;

                case 
    "image/png":
                    
    $sourceImage imagecreatefrompng($sourceFileName);
                    break;
            }
            if ((boolean)
    $saveProportions) {
                
    $imageWidth  $imageInfo[0];
                
    $imageHeight $imageInfo[1];
                if (
    $imageInfo[0] > $width) {
                    
    $imageWidth  $width;
                    
    $imageHeight = ($imageInfo[1] / ($imageInfo[0] / $width));
                }
                if (
    $imageHeight $height) {
                    
    $imageWidth  = ($imageWidth / ($imageHeight $height));
                    
    $imageHeight $height;
                }
            } else {
                
    $imageWidth  $width;
                
    $imageHeight $height;
            }
            
    $destinationImage imagecreatetruecolor($imageWidth$imageHeight);
            if (
    function_exists("imagecopyresampled")) {
                
    imagecopyresampled($destinationImage$sourceImage0000,
                                        
    $imageWidth$imageHeight,
                                        
    $imageInfo[0], $imageInfo[1]);
            } else {
                
    imagecopyresized($destinationImage$sourceImage0000,
                                        
    $imageWidth$imageHeight,
                                        
    $imageInfo[0], $imageInfo[1]);
            }
            switch (
    $imageInfo["mime"]) {
                case 
    "image/gif":
                    if (
    function_exists("imagegif")) {
                        
    $result imagegif($destinationImage$destinationFileName);
                    } else {
                        
    $destinationFileName sprintf("%s.png"$destinationFileName);
                        
    $result imagepng($destinationImage$destinationFileName);
                    }
                    break;
                case 
    "image/jpeg":
                    
    $result imagejpeg($destinationImage$destinationFileName80);
                    break;
                case 
    "image/png":
                    
    $result imagepng($destinationImage$destinationFileName);
                    break;
                default:
                    
    $result false;
            }
        }
        return 
    $result;
    }
     
    abcolut, fonetic, see и ещё 1-му нравится это.
  10. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Вроде проясняется. Соединение с картинкой идёт через squid . Затем js запрашивает сервер, он кеширует картинку и она становится доступной.
    Щас хочу приконектится к этому урлу через прокси получаю ответ:
    Это прокси, что ли, не позволяет работать с портом?
     
Статус темы:
Закрыта.