从远程服务器或 URL 复制文件

2022-08-30 16:19:14

我有以下代码:

$file = 'http://3.bp.blogspot.com/-AGI4aY2SFaE/Tg8yoG3ijTI/AAAAAAAAA5k/nJB-mDhc8Ds/s400/rizal001.jpg';
$newfile = '/img/submitted/yoyo.jpg';

if ( copy($file, $newfile) ) {
    echo "Copy success!";
}else{
echo "Copy failed.";
}

并且它始终输出“复制失败”

copy(/img/submitted/yoyo.jpg) [function.copy]: failed to open stream: No such file or directory

我的目录设置为 777。

任何想法?谢谢!


答案 1

虽然 copy() 将接受 URL 作为参数,但它可能存在目标 url 的问题

您是否尝试过指定输出文件的完整文件系统路径?我假设您没有尝试将新文件放在远程服务器上。

例如:

$file = 'http://3.bp.blogspot.com/-AGI4aY2SFaE/Tg8yoG3ijTI/AAAAAAAAA5k/nJB-mDhc8Ds/s400/rizal001.jpg';
$newfile = $_SERVER['DOCUMENT_ROOT'] . '/img/submitted/yoyo.jpg';

if ( copy($file, $newfile) ) {
    echo "Copy success!";
}else{
    echo "Copy failed.";
}

以上对我来说效果很好。


答案 2

我在我的一个旧项目中发现了这个函数。

private function download_file ($url, $path) {

  $newfilename = $path;
  $file = fopen ($url, "rb");
  if ($file) {
    $newfile = fopen ($newfilename, "wb");

    if ($newfile)
    while(!feof($file)) {
      fwrite($newfile, fread($file, 1024 * 8 ), 1024 * 8 );
    }
  }

  if ($file) {
    fclose($file);
  }
  if ($newfile) {
    fclose($newfile);
  }
 }

推荐