Error when copying img with a cURL script (php)

I made a nice simple userscript:
When I browse the web, I can "bookmark" any image in 1 click
My userscript

  • Grab the img src
  • Grab the url of the webpage
  • Copy the .jpg .png .gif to my server
  • Everything works perfectly, BUT in some cases, the script cannot copy the file...
    Actually the file is created but do not contains the img data, it only contains the content of an error webpage:

    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>403 Forbidden</title>
    </head><body>
    <h1>Forbidden</h1>
    <p>You don't have permission to access /data/x/xxx_xxx_x.jpg on this server.</p>
    <p>Additionally, a 403 Forbidden
    error was encountered while trying to use an ErrorDocument to handle the request.</p>
    <hr>
    <address>Apache Server at xxxxxxxx.net Port 80</address>
    </body></html>
    

    The "copy" code (php):

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $urlimg); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    set_time_limit(300); # 5 minutes for PHP 
    curl_setopt($ch, CURLOPT_TIMEOUT, 300); # and also for CURL 
    $path = $dirpix.'/'.$aa.'/'.$mm;
    if ( ! is_dir($path)) {
        mkdir($path);
    }
    $outfile = fopen($path.'/'.$id.'.'.$ext, 'wb'); 
    curl_setopt($ch, CURLOPT_FILE, $outfile); 
    curl_exec($ch); 
    fclose($outfile); 
    curl_close($ch); 
    

    Maybe the website blocks that kind of "copy" script? Thanks!


    2 things I can think of here are,

  • Set a user agent to your curl request. Because from what you say, you are able to view the image but curl is getting 403 error, it could very well be userAgent filtering on server side.

  • Add referer to your curl request. You can send the referer information from your userscript to the php script. You'd have to post or get window.location.href 's value.


  • Try it below code it working fine in my server. it is tested code:-

    <?php
    
    $img[]='http://i.indiafm.com/stills/celebrities/sada/thumb1.jpg';
    $img[]='http://i.indiafm.com/stills/celebrities/sada/thumb5.jpg';
    
    $path="images/";
    
    
    foreach($img as $i){
        save_image($i, $path);
        if(getimagesize($path.basename($i))){
            echo '<h3 style="color: green;">Image ' . basename($i) . ' Downloaded OK</h3>';
        }else{
            echo '<h3 style="color: red;">Image ' . basename($i) . ' Download Failed</h3>';
        }
    }
    
    //Alternative Image Saving Using cURL seeing as allow_url_fopen is disabled - bummer
    function save_image($img,$fullpath='basename'){
        if($fullpath!='basename'){
            $fullpath = $fullpath.basename($img);
        }
        $ch = curl_init ($img);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
        $rawdata=curl_exec($ch);
        curl_close ($ch);
        if(file_exists($fullpath)){
            unlink($fullpath);
        }
        $fp = fopen($fullpath,'x');
        fwrite($fp, $rawdata);
        fclose($fp);
    }
    

    为正确的工作添加

    $agent= 'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11';
    
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    
    链接地址: http://www.djcxy.com/p/69638.html

    上一篇: PHP中的文件上传给出错误

    下一篇: 使用cURL脚本复制img时出错(php)