programing

PHP URL에서 이미지 저장 중

goodsources 2022. 9. 28. 00:17
반응형

PHP URL에서 이미지 저장 중

PHP URL에서 PC로 이미지를 저장해야 합니다.예를 들어 페이지가 있다고 칩시다.http://example.com/image.php하나의 "꽃" 이미지를 가지고 있고, 다른 것은 없습니다.이 이미지를 URL에서 (PHP를 사용하여) 새 이름으로 저장하려면 어떻게 해야 합니까?

가지고 계신 경우allow_url_fopen로 설정하다.true:

$url = 'http://example.com/image.php';
$img = '/my/folder/flower.gif';
file_put_contents($img, file_get_contents($url));

그렇지 않으면 cURL을 사용합니다.

$ch = curl_init('http://example.com/image.php');
$fp = fopen('/my/folder/flower.gif', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

PHP 함수 copy()를 사용합니다.

copy('http://example.com/image.php', 'local/folder/flower.jpg');

주의: 여기에는 allow_url_fopen이 필요합니다.

$content = file_get_contents('http://example.com/image.php');
file_put_contents('/my/folder/flower.jpg', $content);

발텍의 cURL 답변은 나에게 맞지 않았다.네, 제 특정 문제로 인해 약간 개선되었습니다.

예.,

서버에 리다이렉트가 있는 경우(페이스북프로파일 이미지를 저장하려고 하는 경우 등), 다음의 옵션을 설정할 필요가 있습니다.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

완전한 솔루션은 다음과 같습니다.

$ch = curl_init('http://example.com/image.php');
$fp = fopen('/my/folder/flower.gif', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);

이 예에서는 리모트이미지를 image.jpg에 저장합니다.

function save_image($inPath,$outPath)
{ //Download images from remote server
    $in=    fopen($inPath, "rb");
    $out=   fopen($outPath, "wb");
    while ($chunk = fread($in,8192))
    {
        fwrite($out, $chunk, 8192);
    }
    fclose($in);
    fclose($out);
}

save_image('http://www.someimagesite.com/img.jpg','image.jpg');

다른 솔루션은 사용할 수 없었지만 wget은 사용할 수 있었습니다.

$tempDir = '/download/file/here';
$finalDir = '/keep/file/here';
$imageUrl = 'http://www.example.com/image.jpg';

exec("cd $tempDir && wget --quiet $imageUrl");

if (!file_exists("$tempDir/image.jpg")) {
    throw new Exception('Failed while trying to download image');
}

if (rename("$tempDir/image.jpg", "$finalDir/new-image-name.jpg") === false) {
    throw new Exception('Failed while trying to move image file from temp dir to final dir');
}
$img_file='http://www.somedomain.com/someimage.jpg'

$img_file=file_get_contents($img_file);

$file_loc=$_SERVER['DOCUMENT_ROOT'].'/some_dir/test.jpg';

$file_handler=fopen($file_loc,'w');

if(fwrite($file_handler,$img_file)==false){
    echo 'error';
}

fclose($file_handler);

다음을 참조해 주세요.

$url    = 'http://mixednews.ru/wp-content/uploads/2011/10/0ed9320413f3ba172471860e77b15587.jpg';
$img    = 'miki.png';
$file   = file($url);
$result = file_put_contents($img, $file)

여기에서는, URL 이미지를 압축(gzip)할 수 있는 것을 나타내는 회답은 없습니다.이 경우, 어느 회답도 동작하지 않습니다.

이 문제를 해결할 수 있는 두 가지 솔루션이 있습니다.

첫 번째는 cURL 메서드를 사용하여 curl_setopt를 설정하는 것입니다.CURLOPT_ENCODING, '':

// ... image validation ...

// Handle compression & redirection automatically
$ch = curl_init($image_url);
$fp = fopen($dest_path, 'wb');

curl_setopt($ch, CURLOPT_FILE, $fp);
// Exclude header data
curl_setopt($ch, CURLOPT_HEADER, 0);
// Follow redirected location
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// Auto detect decoding of the response | identity, deflate, & gzip
curl_setopt($ch, CURLOPT_ENCODING, '');

curl_exec($ch);

curl_close($ch);
fclose($fp);

동작하지만, 다른 이미지(png, jpg, ico, gif, svg)를 수백 번 테스트한 결과, 가장 신뢰할 수 있는 방법은 아닙니다.

최적의 방법은 이미지 URL에 콘텐츠 인코딩(gzip 등)이 있는지 여부를 검출하는 것입니다.

// ... image validation ...

// Fetch all headers from URL
$data = get_headers($image_url, true);

// Check if content encoding is set
$content_encoding = isset($data['Content-Encoding']) ? $data['Content-Encoding'] : null;

// Set gzip decode flag
$gzip_decode = ($content_encoding == 'gzip') ? true : false;

if ($gzip_decode)
{
    // Get contents and use gzdecode to "unzip" data
    file_put_contents($dest_path, gzdecode(file_get_contents($image_url)));
}
else
{
    // Use copy method
    copy($image_url, $dest_path);
}

gzdecode에 대한 자세한 내용은 이 스레드를 참조하십시오.아직까지는 잘 작동한다.더 나은 방법이 있다면 아래 댓글로 알려주세요.

$data = file_get_contents('http://example.com/image.php');
$img = imagecreatefromstring($data);
imagepng($img, 'test.png');

작성하려는 php 스크립트를 배치하려는 경로에 이미지라는 이름의 폴더를 만듭니다.모든 사용자에게 쓰기 권한이 있는지 확인하십시오. 그렇지 않으면 스크립트가 작동하지 않습니다(파일을 디렉토리에 업로드할 수 없습니다).

언급URL : https://stackoverflow.com/questions/724391/saving-image-from-php-url

반응형