0

以下のコードで関数を使用して画像をURLからWebディレクトリにコピーしていますが、一部の画像が100%コピーされない理由がわかりません。

これが私のウェブディレクトリにある間違った画像のコピーですhttp://www.aligatoor.pl/uploads/deals/2632b3802e8ed7abe83788dab605bbf7.jpg

そしてここに元の画像http://infobuzer.pl/img/r4d3k/voucher/50e35a84c9038.jpg

function upload_file($file_path)
{
    $deal_img_data=file_get_contents($file_path);

    $file_name=md5($file_path).".jpg";

    if(!file_exists($file_name))
    {
        $file=fopen($file_name,"w+");

        fwrite($file,$deal_img_data);
    }
}

CURLも試してみましたが、まだ一部の画像が正しくコピーされていません。

CURLコード:

$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$raw=curl_exec($ch);
curl_close ($ch);
$saveto=md5($url).".jpg";
if(file_exists($saveto)){
    unlink($saveto);
}
$fp = fopen($saveto,'x');
fwrite($fp, $raw);
fclose($fp);
4

4 に答える 4

0

私はそれを行う方法を見つけたので、誰かが私と同様の問題を抱えている場合は、この関数を使用してみてください:

function grab_image($url){
    $ch = curl_init ($url);
    $saveto = md5($url).".jpg";
    $fp = fopen($saveto,'wb');
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
    fclose($fp);
}
于 2013-02-15T00:05:50.877 に答える
0

問題の理由が正確にはわかりませんが、ファイル処理で同様の問題に直面し、次のアプローチを使用して解決しました。

  if( $handle =fopen($filename, "wb+") ){
    if(flock($handle, LOCK_EX))
    {
      fseek($handle, 0); 
      ftruncate($handle, 0); 

      fwrite($handle, $newcontent);

      fflush($handle); 
      flock($handle, LOCK_UN); 
    }
    fclose($handle); 
  }

群れ()

編集: 画像を処理するには、より良いセキュリティと正確な結果を得るために、imagejpeg ()imagecreatefromjpeg( ) などの画像関数を使用することをお勧めします。

例:

  $im = @imagecreatefromjpeg($image);
  if(is_bool($im)){
   die("Invalid Image detected!");
  }
  else{

    if(!imagejpeg($im, $newpath)){
     die("Image not saved!");
    }
    else{
     die("Image saved!");
    }  
  }

Edit2: file_get_contents() を使用する代わりにこれを追加します

<?php

$handle = fopen($file_path, "rb");
$deal_img_data = stream_get_contents($handle);
fclose($handle);

?> 
于 2013-02-14T21:44:13.623 に答える
0

あなたの機能は正常に動作します

古いイメージを削除して、もう一度ダウンロードしてみてください。

また、次を追加します。

fclose($file);
于 2013-02-14T21:41:28.400 に答える
-2

関数の先頭に set_time_limit(0) を追加してみてください

于 2013-02-14T21:42:11.060 に答える