Php 使用cURL保存远程映像?

Php 使用cURL保存远程映像?,php,curl,gd,Php,Curl,Gd,早上好 有几个问题围绕着这个,但没有真正回答我的问题,据我所知。基本上,我有一个GD脚本来处理服务器上的图像大小调整和缓存,但是我需要对存储在远程服务器上的图像执行同样的操作 因此,我想将图像保存在本地,然后调整大小并按正常方式显示 我已经走了这么远 $file_name_array = explode('/', $filename); $file_name_array_r = array_reverse($file_name_array);

早上好

有几个问题围绕着这个,但没有真正回答我的问题,据我所知。基本上,我有一个GD脚本来处理服务器上的图像大小调整和缓存,但是我需要对存储在远程服务器上的图像执行同样的操作

因此,我想将图像保存在本地,然后调整大小并按正常方式显示

我已经走了这么远

        $file_name_array = explode('/', $filename);
        $file_name_array_r = array_reverse($file_name_array);  

        $save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0];

        $ch = curl_init($filename);
        $fp = fopen($save_to, "wb");

        // set URL and other appropriate options
        $options = array(CURLOPT_FILE => $fp,
                         CURLOPT_HEADER => 0,
                         CURLOPT_FOLLOWLOCATION => 1,
                         CURLOPT_TIMEOUT => 60); // 1 minute timeout (should be enough)

        curl_setopt_array($ch, $options);

        curl_exec($ch);
        curl_close($ch);
        fclose($fp);
这将创建图像文件,但不会复制它?我没抓住重点吗


干杯,伙计们

我个人不喜欢使用写入文件的curl函数。请尝试以下方法:

    $file_name_array = explode('/', $filename);
    $file_name_array_r = array_reverse($file_name_array);  

    $save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0];

    $ch = curl_init($filename);
    $fp = fopen($save_to, "wb");

    // set URL and other appropriate options
    $options = array(CURLOPT_HEADER => 0,
                     CURLOPT_FOLLOWLOCATION => 1,
                     CURLOPT_TIMEOUT => 60,
                     CURLOPT_RETURNTRANSFER, true //Return transfer result
                     );

    curl_setopt_array($ch, $options);
    //Get the result of the request and write it into the file
    $res=curl_exec($ch);
    curl_close($ch);
    fwrite($fp,$res);
    fclose($fp);
但您可以使用更简单的无卷曲:

$file_name_array = explode('/', $filename);
$file_name_array_r = array_reverse($file_name_array);  
$save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0];
$content=file_get_contents($filename); 
$fp = fopen($save_to, "wb");
fwrite($fp,$content);
fclose($fp);

好吧,我把它分类了!在仔细检查了我的图像而不是代码之后,发现有些图像是错误的,而不是我的。一旦我选择了一个有效的图像,我的代码也有效


大家一如既往地干杯:)

更简单的是,您可以使用文件内容而不是fwrite:

或者只需两行:)


感谢您的回复,尽管我收到一个“不支持的请求放到不支持的。参考#8.9ea178d5.1274174788.863a82c”错误。然而,我已经把它分类了,这是因为我是一个扳手……只是一个通知:你应该使用
CURLOPT_FILE=>$fp
,否则
fwrite($fp,$content)使内存消耗加倍。感谢回复al3cs!不幸的是(或者也许幸运的是),我不再从事那个项目了,不过下次我还是会记住你的解决方案。。。
$file_name_array = explode('/', $filename);
$file_name_array_r = array_reverse($file_name_array);  
$save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0];
file_put_contents($save_to, file_get_contents($filename));
$file_name_array_r = array_reverse( explode('/', $filename) );  
file_put_contents('system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0], file_get_contents($filename));