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);
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
'programing' 카테고리의 다른 글
파일 확장자를 PHP로 가져오려면 어떻게 해야 하나요? (0) | 2022.10.01 |
---|---|
VueJ에서 디스패치 및 커밋 완료 후에만 경로 트리거s (0) | 2022.10.01 |
로깅 프레임워크 비호환성 (0) | 2022.09.28 |
양식이 중앙에 정렬되지 않았습니다(수직 중앙/중앙). (0) | 2022.09.14 |
Vue.js v2의 자 컴포넌트 동적 렌더링 (0) | 2022.09.14 |