테스트 사이트 - 개발 중인 베타 버전입니다

외부이미지 저장 특정 확장자 제외방법 채택완료

포도주스와 10년 전 조회 4,362

http://sir.co.kr/g4_tiptech/21620#vcmt_anchor">http://sir.co.kr/g4_tiptech/21620#vcmt_anchor 

 

에 있는 외부 이미지 저장 팁을 사용하고 있는데요..

 

저장할때 gif확장자는 외부 이미지 저장 하지않고 건너뛰고 싶습니다.

 

아래는 해당 팁에있는 write_update.head.skin.php의 소스인데 어디를 수정해야할까요?

 

 

</p><p><?</p><p>if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가 </p><p> </p><p>include_once("$board_skin_path/mw.lib/mw.skin.basic.lib.php");</p><p>include_once("$board_skin_path/mw.lib/mw.sms.lib.php");</p><p>include_once("$g4[path]/lib/etc.lib.php");</p><p> </p><p>// 한 사람당 글 한개만 등록가능</p><p>if ($w == "" && $mw_basic[cf_only_one]) {</p><p>    if ($is_member)</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$sql = "select * from $write_table where wr_is_comment = 0 and mb_id = '$member[mb_id]'";</p><p>    else</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$sql = "select * from $write_table where wr_is_comment = 0 and wr_ip = '$_SERVER[REMOTE_ADDR]'";</p><p>    $row = sql_fetch($sql);</p><p>    if ($row)</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>alert("이 게시판은 한 사람당 글 한개만 등록 가능합니다.");</p><p>}</p><p>?><?</p><p>/****************************************************************************************************</p><p>*     프로그램명<span class="Apple-tab-span" style="white-space:pre">		</span>:<span class="Apple-tab-span" style="white-space:pre">	</span>그누보드 게시판 플러그인 - 게시판 글쓰기시 외부링크 이미지 모두 저장</p><p>*     Version<span class="Apple-tab-span" style="white-space:pre">			</span>:<span class="Apple-tab-span" style="white-space:pre">	</span>1.30</p><p>*     제작일<span class="Apple-tab-span" style="white-space:pre">			</span>:<span class="Apple-tab-span" style="white-space:pre">	</span>2009-11-12 오전 00:00</p><p>*     최근 수정일<span class="Apple-tab-span" style="white-space:pre">		</span>:<span class="Apple-tab-span" style="white-space:pre">	</span>2009-12-19 오전 09:00</p><p>*     업데이트 내역</p><p>         1. 특정 사이트 지정 및 지정한 사이트에 대한 동작 기능 추가 (1.1버전)</p><p><span class="Apple-tab-span" style="white-space:pre">		</span> 2. 외부링크 이미지가 있을 경우에만 동작하고 없을 경우 그누보드 코드를 따름 (1.11버전)</p><p><span class="Apple-tab-span" style="white-space:pre">		</span> 3. CURL 모듈 이용 이미지 저장 방식 추가 (1.2버전)</p><p><span class="Apple-tab-span" style="white-space:pre">		</span> 4. referer 추가 (1.30버전)</p><p>****************************************************************************************************/</p><p>$imgSave[max]<span class="Apple-tab-span" style="white-space:pre">	</span>= 0;<span class="Apple-tab-span" style="white-space:pre">			</span>// 저장가능한 최대사이즈, max 보다 작아야만 저장한다. byte 단위, 0이면 무제한, 1MB 지정하려면 (1024*1024)</p><p>$imgSave[min]<span class="Apple-tab-span" style="white-space:pre">		</span>= 0;<span class="Apple-tab-span" style="white-space:pre">			</span>// 저장가능한 최소사이즈, min 보다 커야만 저장한다. byte 단위, 0이면 무제한</p><p>$imgSave[site]<span class="Apple-tab-span" style="white-space:pre">		</span>= "*";<span class="Apple-tab-span" style="white-space:pre">		</span>// 사이트 지정, 쉼표로 구분, *는 전체사이트를 말함</p><p>$imgSave[mode]<span class="Apple-tab-span" style="white-space:pre">	</span>= 1;<span class="Apple-tab-span" style="white-space:pre">			</span>// 지정한 사이트의 대한 동작, 1이면 site 저장, 0이면 site 제외</p><p>$imgSave[type] = "sock";<span class="Apple-tab-span" style="white-space:pre">	</span>// 이미지를 읽어오는 방식, sock : fsockopen함수 이용,     curl : CURL 모듈 이용</p><p> </p><p>if ($imgSave[type] == "curl" && !function_exists("curl_init")) alert("CURL 모듈이 설치되어 있지 않습니다. imgSave[type]을 sock 으로 변경해주세요.");</p><p> </p><p>$img_content = image_save_run();</p><p>if ($img_content)<span class="Apple-tab-span" style="white-space:pre">	</span>$_POST[wr_content] = addslashes($img_content);</p><p>$wr_content = $_POST[wr_content];</p><p> </p><p>function remote_read_curl($urlstr) {<span class="Apple-tab-span" style="white-space:pre">	</span></p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$url = parse_url2($urlstr);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$ch = curl_init(); </p><p><span class="Apple-tab-span" style="white-space:pre">	</span>curl_setopt($ch, CURLOPT_URL, $urlstr); </p><p><span class="Apple-tab-span" style="white-space:pre">	</span>curl_setopt($ch, CURLOPT_REFERER, "<a href="<a href="http://$url[domain]" target="_blank" rel="noopener noreferrer">http://$url[domain]</a>"><a href="http://$url[domain]" target="_blank" rel="noopener noreferrer">http://$url[domain]</a></a>");</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>curl_setopt ($ch, CURLOPT_RETURNTRANSFER,  1);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$body = curl_exec ($ch);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$header = curl_getinfo($ch);</p><p>    curl_close($ch);</p><p> </p><p><span class="Apple-tab-span" style="white-space:pre">	</span>return array("data"=>implode(";", $header)."\r\n\r\n".$body, "domain"=>$url[domain], "file"=>$url[file], "basename"=>$url[basename], "extension"=>$url[extension], "url"=>$urlstr, "header"=>$header, "body"=>$body, "filesize"=>$header[size_download]);</p><p>}</p><p> </p><p>function remote_read_sock($urlstr) {</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$url = parse_url2($urlstr);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$data = "";</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$res<span class="Apple-tab-span" style="white-space:pre">	</span>= fsockopen($url[domain], 80, $strErrorNo, $strErrStr, 2);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>if($res) {</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>$headerstr = "GET $urlstr HTTP/1.0\r\n"; </p><p><span class="Apple-tab-span" style="white-space:pre">		</span>$headerstr.= "Host:{$url[domain]}:80\r\n"; </p><p><span class="Apple-tab-span" style="white-space:pre">		</span>$headerstr.= "referer:<a href="<a href="http://$url[domain]\r\n" target="_blank" rel="noopener noreferrer">http://$url[domain]\r\n</a>"><a href="http://$url[domain]\r\n" target="_blank" rel="noopener noreferrer">http://$url[domain]\r\n</a></a>";</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>$headerstr.= "\r\n";</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>fputs($res, $headerstr);</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>while (!feof($res)) {</p><p><span class="Apple-tab-span" style="white-space:pre">			</span>$data.= fgets($res, 1024); </p><p><span class="Apple-tab-span" style="white-space:pre">		</span>} </p><p><span class="Apple-tab-span" style="white-space:pre">		</span>fclose($res);</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>if (stristr($data, "Not Found") || stristr($data, "Bad Request") || stristr($data, "Forbidden"))</p><p><span class="Apple-tab-span" style="white-space:pre">			</span>return false;</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>} else return false;</p><p> </p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$patten = "/Content\\-Length:\\s+([0-9]*)\\r\\n/i";</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>preg_match($patten, $data, $match);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>if ($match) $filesize = $match[1];</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>else $filesize = 0;</p><p> </p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$dataset = explode("\r\n\r\n", $data);</p><p> </p><p><span class="Apple-tab-span" style="white-space:pre">	</span>return array("data"=>$data, "domain"=>$url[domain], "file"=>$url[file], "basename"=>$url[basename], "extension"=>$url[extension], "url"=>$urlstr, "header"=>$dataset[0], "body"=>$dataset[1], "filesize"=>$filesize);</p><p>}</p><p> </p><p>function parse_url2($urlstr) </p><p>{</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$url<span class="Apple-tab-span" style="white-space:pre">				</span>= parse_url($urlstr);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$domain<span class="Apple-tab-span" style="white-space:pre">		</span>= str_replace("www.", "", $url[host]);<span class="Apple-tab-span" style="white-space:pre">									</span>// 도메인</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$file<span class="Apple-tab-span" style="white-space:pre">				</span>= substr($url[path], strrpos($url[path], "/")+1);<span class="Apple-tab-span" style="white-space:pre">					</span>// 파일명</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$basename<span class="Apple-tab-span" style="white-space:pre">	</span>= str_replace("%", "", substr($file, 0, strrpos($file, ".")));<span class="Apple-tab-span" style="white-space:pre">	</span>// 파일명 (확장자 제외)</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>if (empty($basename)) {</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>$basename = $file;</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>$extension = "";</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>} else<span class="Apple-tab-span" style="white-space:pre">	</span>$extension<span class="Apple-tab-span" style="white-space:pre">	</span>= substr($file, strrpos($file,".") + 1);<span class="Apple-tab-span" style="white-space:pre">						</span>// 확장자</p><p><span class="Apple-tab-span" style="white-space:pre">	</span></p><p><span class="Apple-tab-span" style="white-space:pre">	</span>return array("url"=>$urlstr, "domain"=>$domain, "file"=>$file, "basename"=>$basename, "extension"=>$extension);</p><p>}</p><p> </p><p>function image_save($file, $data) {</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>global $g4;</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>@mkdir("$g4[path]/data/$g4[cheditor4]/", 0707);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>@chmod("$g4[path]/data/$g4[cheditor4]/", 0707);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$ym = date("ym", $g4[server_time]);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>define('SAVE_AS_DIRECTORY', <span class="Apple-tab-span" style="white-space:pre">	</span>"$g4[path]/data/$g4[cheditor4]/$ym/");</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>@mkdir(SAVE_AS_DIRECTORY, 0707);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>@chmod(SAVE_AS_DIRECTORY, 0707);</p><p> </p><p><span class="Apple-tab-span" style="white-space:pre">	</span>if (!file_exists($file)) {</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>$fp = @fopen ($file, 'w');</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>if(!$fp) return false;</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>fwrite ($fp, $data);</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>fclose ($fp);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>}</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>return true;</p><p>}</p><p> </p><p>function image_save_run() {</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>global $g4, $imgSave;</p><p> </p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$img_content = stripslashes($_POST[wr_content]);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$img_content = str_replace("<", "<", $img_content);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$img_content = str_replace(">", ">", $img_content);</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$patten = "/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i";</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>preg_match_all($patten, $img_content, $match); </p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$dest_file = "data/$g4[cheditor4]/".date("ym")."/";<span class="Apple-tab-span" style="white-space:pre">		</span>//저장경로</p><p><span class="Apple-tab-span" style="white-space:pre">	</span></p><p><span class="Apple-tab-span" style="white-space:pre">	</span>if ($match[1]) {</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>foreach ($match[1] as $link) {</p><p><span class="Apple-tab-span" style="white-space:pre">			</span>$url = parse_url($link);</p><p><span class="Apple-tab-span" style="white-space:pre">			</span>if ($url[host] && $url[host] != $_SERVER['HTTP_HOST']) {</p><p><span class="Apple-tab-span" style="white-space:pre">				</span>$image = $imgSave[type]=="sock"?remote_read_sock($link):remote_read_curl($link);</p><p><span class="Apple-tab-span" style="white-space:pre">				</span>if ($image) {</p><p><span class="Apple-tab-span" style="white-space:pre">					</span>if ($imgSave[min] && $imgSave[min] > $image[filesize]) continue; // 이미지가 최소크기보다 작으면 저장안함</p><p><span class="Apple-tab-span" style="white-space:pre">					</span>if ($imgSave[max] && $imgSave[max] < $image[filesize]) continue; // 이미지가 최대크기보다 크면 저장안함</p><p><span class="Apple-tab-span" style="white-space:pre">				</span></p><p><span class="Apple-tab-span" style="white-space:pre">					</span>$siteList = explode(",", trim($imgSave[site]));</p><p><span class="Apple-tab-span" style="white-space:pre">					</span>$siteListCnt = count($siteList);</p><p><span class="Apple-tab-span" style="white-space:pre">					</span>$site_exists = false; // 지정한 도메인에 포함이 되어 있는지 여부</p><p><span class="Apple-tab-span" style="white-space:pre">					</span></p><p><span class="Apple-tab-span" style="white-space:pre">					</span>for($c=0; $c<$siteListCnt; $c++) {</p><p><span class="Apple-tab-span" style="white-space:pre">						</span>if (stristr($image[domain], $siteList[$c])) { // 지정한 도메인에 포함이 되어 있다면</p><p><span class="Apple-tab-span" style="white-space:pre">							</span>$site_exists = true;</p><p><span class="Apple-tab-span" style="white-space:pre">							</span>break;</p><p><span class="Apple-tab-span" style="white-space:pre">						</span>}</p><p><span class="Apple-tab-span" style="white-space:pre">					</span>}</p><p> </p><p><span class="Apple-tab-span" style="white-space:pre">					</span>if ($imgSave[mode]) { // action이 저장일 경우</p><p><span class="Apple-tab-span" style="white-space:pre">						</span>if ($site_exists || $imgSave[site] == "*") { ; } // 사이트 목록에 있거나 전체사이트에 적용이라면</p><p><span class="Apple-tab-span" style="white-space:pre">						</span>else continue;</p><p><span class="Apple-tab-span" style="white-space:pre">					</span>}</p><p><span class="Apple-tab-span" style="white-space:pre">					</span>else { // action이 제외일 경우</p><p><span class="Apple-tab-span" style="white-space:pre">						</span>if ($site_exists || $imgSave[site] == "*") continue; // 사이트 목록에 있거나 전체사이트에 적용이라면</p><p><span class="Apple-tab-span" style="white-space:pre">						</span>else { ; } // 사이트 목록에 없다면 통과</p><p><span class="Apple-tab-span" style="white-space:pre">					</span>}</p><p> </p><p><span class="Apple-tab-span" style="white-space:pre">					</span>$saveFileName = $dest_file.$image[basename]."_".random_generator(8, 15) . ($image[extension]?".".$image[extension]:"");</p><p><span class="Apple-tab-span" style="white-space:pre">					</span>if (image_save($g4[path]."/".$saveFileName, $image[body]))</p><p><span class="Apple-tab-span" style="white-space:pre">						</span>$img_content = str_replace($link, ($g4[path]."/".$saveFileName), $img_content);<span class="Apple-tab-span" style="white-space:pre">					</span></p><p><span class="Apple-tab-span" style="white-space:pre">				</span>}</p><p><span class="Apple-tab-span" style="white-space:pre">			</span>}</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>}</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>return $img_content;</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>}</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>else</p><p><span class="Apple-tab-span" style="white-space:pre">		</span>return false;</p><p>}</p><p> </p><p>function random_generator ($min=8, $max=32, $special=NULL, $chararray=NULL) { </p><p>    $random_chars = array(); </p><p>    </p><p>    if ($chararray == NULL) { </p><p>        $str = "abcdefghijklmnopqrstuvwxyz"; </p><p>        $str .= strtoupper($str); </p><p>        $str .= "1234567890"; </p><p> </p><p>        if ($special) { </p><p>            $str .= "!@#$%"; </p><p>        } </p><p>    } </p><p>    else { </p><p>        $str = $charray; </p><p>    } </p><p> </p><p>    for ($i=0; $i<strlen($str)-1; $i++) { </p><p>        $random_chars[$i] = $str[$i]; </p><p>    } </p><p> </p><p>    srand((float)microtime()*1000000); </p><p>    shuffle($random_chars); </p><p> </p><p>    $length = rand($min, $max); </p><p>    $rdata = ''; </p><p>    </p><p>    for ($i=0; $i<$length; $i++) { </p><p>        $char = rand(0, count($random_chars) - 1); </p><p>        $rdata .= $random_chars[$char]; </p><p>    } </p><p>    return $rdata; </p><p>} </p><p> </p><p>?> </p><p>

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
10년 전

소스를 다시 분석해 보니 $saveFileName 변수에 이미지 파일의 확장자가 없는 것 같네요.

 

아래와 같이 다시 해보세요.

위의 소스에서 image_save_run() 함수내용 중에 130번째 줄 아래에 다음의 코드를 삽입해보세요.

변경전

</p>
<p>
if ($image) {
  if ($imgSave[min] && $imgSave[min] > $image[filesize]) continue; // 이미지가 최소크기보다 작으면 저장안함
 </p>
<p>

 

변경후

</p>
<p>
if ($image) {
  if(strrchr($link, '.')=='.gif') continue; // 이미지 확장자 gif 이면 저장 안함
  if ($imgSave[min] && $imgSave[min] > $image[filesize]) continue; // 이미지가 최소크기보다 작으면 저장안함
 </p><p>

 

 

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

10년 전

위에 제시된 소스에서 image_save 함수 중에

106번 째 줄의 코드를 아래와 같이 변경해 보세요.

 

변경전

<font face="Courier New">if</font> <code class="php plain">(!</code><code class="php functions">file_exists</code><code class="php plain">(</code><code class="php variable">$file</code><code class="php plain">)) {

변경후

if</font> <code class="php plain">(!</code><code class="php functions">file_exists</code><code class="php plain">(</code><code class="php variable">$file</code><code class="php plain">) || strstr(<code class="php variable">$file</code><code class="php plain"></code>, '.gif')) {

테스트는 안 해봐서 잘 될지는 모르겠습니다.

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

포도주스와
10년 전
안되네요 ㅠ

댓글을 작성하려면 로그인이 필요합니다.

B
10년 전

image_save_run 함수안에

 

이미지 경로 가져오는 부분이있습니다.

 

확장자 따셔서... gif일경우 반환이나 브레이크 거시면 됩니다.

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

포도주스와
10년 전
제가 초보라 정확히좀 설명해주실수 있을까요?

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인