2013-08-15 2 views
2

PNG 그림이 필요하지만 PHP 스크립트에 액세스 할 때 PHP 스크립트가 어떤 그림을 보낼지 결정해야합니다 (if 문을 사용하여). 그런 다음 PHP 스크립트는 내 웹 서버의 어딘가에서 이미지 파일을 읽고 출력해야합니다.PHP를 사용하여 특정 이미지 보내기

.png 파일을 가져 와서 PHP 코드를 넣으면 작동하지 않지만 .php 확장명을 사용하면 작동하고 이미지를 포함시킬 수도 있습니다. PHP는 어떤 이미지를 보낼지 결정할 수 있지만 이미지를 직접 보려고하면 (URL을 내 주소 표시 줄에 복사) 작동하지 않아 이미지가 일반 내용 (무작위로 들쭉날쭉 한 모양)으로 표시됩니다.

누구든지 무엇을 해야할지 알고 계십니까?

또한 이것은 스택 오버플로에 대한 나의 첫 번째 질문입니다. 제게 잘못하고 있는지 말해주십시오.

+2

* .png 파일을 가져 와서 PHP 코드를 넣으면 작동하지 않습니다. * - 이해가 안됩니다. 무슨 소리 야? –

+0

적절한 콘텐츠 형식 헤더를 사용하십시오. – Aneri

+0

PHP를 사용하여 이미지를 표시하는 솔루션을 요구하거나 이미 시스템에 문제가 있다고 설명하고 있습니까? 코드가 있다면 보여주십시오. – MonkeyZeus

답변

6

Content-Type 헤더를 보내야합니다. png를 들어

은 : 다른 사람을 위해

header('Content-Type: image/png'); 

jpg 또는 gif 또는 bmp이든에 png을 변경합니다.

출력하려면 아무 것도 쓰기 전에 header() 함수를 사용해야합니다.

+1

또는 출력이 버퍼링되면 ('ob ...'functions) 코드의 아무 곳이나 header() 함수를 사용할 수 있습니다. – Aneri

+0

네, 출력 전에 출력하기 전에 씁니다. –

2

먼저 이미지가 있는지 확인하십시오 image.png 어디서나 PHP에서 액세스 할 수 있습니다. 그것은 PNG 이미지처럼

<?php 
header('Content-Type: image/png'); 
readfile('image.png'); 

스크립트는 이제 역할 :

그런 다음 PHP 스크립트를 image.php을 만들 수 있습니다. 내가 아는

1

간단한 버전 ...

<?php 
header('Content-Type: image/png'); 
if(whatever) 
    { 
    $image=your_image_select_function(); 
    } 
// as suggested by sh1ftst0rm with correction of unmatched quotes. 
header('Content-Disposition: inline; filename="'.$your_name_variable.'"'); 
readfile($image); 
?> 

그런 다음, 당신은 이미지 파일처럼 취급합니다. 이 HTML 문서에서, 다음 "pngmaker.php"인 경우 즉, 당신은 당신도 할 수

<img src="pngmaker.php"> 

를 수행입니다

이미지를 전송하는 방법을 알고처럼 소리
<img src="pngmaker.php/?id=123&user=me"> 
+0

코브라가 언급했듯이,'$ image'는 PHP 스크립트에 액세스 할 수 있어야합니다. ''/ path/to/images/'를 만들어야 할 수도 있습니다. $$$$$ – TecBrat

2

, 당신의 문제는 URL을 PNG 이미지처럼 보이게하는 것입니다.

몇 가지 작업을 수행 할 수 있습니다. 첫째, 웹 서버가 Apache의 mod_rewrite 모듈과 같은 URL 재 작성을 지원하는 경우 사용자가 http://example.com/generated_image.png과 같이 스크립트에 액세스 할 수 있도록 재 작성 규칙을 사용할 수 있지만 서버가이 URL을 번역/다시 작성하여 PHP 스크립트를 직접 가리 키도록하고, 그래서 /var/www/image_generator.php과 같은 것입니다.

또 다른 옵션은 실제로 "generated_image.png"스크립트의 이름을 지정하는 것이지만 웹 서버는 PHP 스크립트처럼 취급해야합니다.당신이 URL에 대해 실제로 걱정하지 않으면, 최종 참고로

<Location /generated_image.png> 
    ForceType application/x-httpd-php 
</Location> 

하지만, 사용자가 저장하기로 결정하면 사용되는 파일 이름에 대한 걱정 : 예를 들어, 아파치에 당신이 뭔가를 시도 할 수 디스크에 연결하는 경우 응답에 Content-Disposition HTTP 헤더를 간단하게 사용할 수 있습니다. PHP에서는이 같은 보일 것이다 : 사용자가 자신의 웹 브라우저를 통해 이미지를 저장하면 URL이 무엇인지는 중요하지 않습니다, 그와

<?php 
header("Content-Disposition: inline; filename="generated_image.png"); 
?> 

를, 웹 브라우저 "generated_image.png"를 제공해야 기본 파일 이름으로 사용하십시오.

+0

어, 질문을 좀 더주의 깊게 다시 읽었습니다. 잘못된 답변에 답하는 것 같습니다. 여전히 유용 할 것이므로 지금 당장 떠날 것입니다. 누군가 내가 그것을 제거하기를 원한다면, 나는 그렇게 할 것이다. – brianmearns

+0

도움이되지 않습니다. 다시 쓰기를 통해 PHP 스크립트로 .png를 처리하면 콘텐츠 유형이 동일하게 유지되므로 브라우저는 여전히 이미지로 위협하지 않습니다. 적어도 대부분의 브라우저. –

+0

알아. 내 의견을 너의 것보다 더 많이 보았다면, 나는 그 질문을 오해 하긴했지만, 어쨌든 유용 할 경우를 대비하여 여기에 남겨 두었다. – brianmearns

관련 문제