preg_replace 질문입니다.. 고수님들 한번만 봐주세요. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

preg_replace 질문입니다.. 고수님들 한번만 봐주세요. 정보

preg_replace 질문입니다.. 고수님들 한번만 봐주세요.

본문

그누보드의 bbs/view.php 를 보면 아래와 같은 소스가 있습니다.

$view[content] = preg_replace("/(\<img )([^\>]*)(\>)/i", "\\1 name='target_resize_image[]' onclick='image_window(this)' style='cursor:pointer;' \\2 \\3", $view[content]);

이곳을 수정하고싶은데...아래와 같이

$view[content] = preg_replace("/(\<img )([^\>]*)(\>)/i", "\\1 name='target_resize_image[]' onclick='image_window(this)' style='cursor:pointer;' \\2 \\3"
$exif
= @exif_read_data('{$view[file][$i][path]}/{$view[file][$i][file]}');
if (isset($exif[Make]) || isset($exif[Model])){
echo \"<div>\" ;
$exif = @exif_read_data('{$view[file][$i][path]}/{$view[file][$i][file]}');
if (isset($exif[Make]) || isset($exif[Model])) echo \"카메라모델 : $exif[Make] - $exif[Model]<br></div>
\";, $view[content]);

위 구문을 넣고 싶습니다.

3일전부터 지식인 등을 뒤지며 preg_replace 를 알아보고 있는데...
저부분을 패턴이라고 하나요? 저 패턴이라는 곳에 또...php가 들어가야 하는 상황이라
아무리 잔머리를 굴려봐도 php를 전혀 모르는 상황이라
도무지 모르겠습니다.

원하는 것은 뷰페이지의 이미지에 exif 정보를 넣어야 하기 때문인데...
기존의 그누에 공개된 방식이 아니라 저렇게 view.php 를 수정해야 되는 상황이라
질문 드려봅니다.

일요일에 혹시나 고수분이 계시면 도움 좀 부탁드립니다.
  • 복사

댓글 전체

php를 전혀모르는 상황인데 저런 기능을 만들어 쓴다구요?
preg_replace 기능에 대하여 알기전에 php 기본기가 있어야겠는걸요

원본 코드는 가만 두시고 원본 코드 다음행에 아래를 추가하세요

$exif = @exif_read_data('{$view[file][$i][path]}/{$view[file][$i][file]}');
if (isset($exif[Make]) || isset($exif[Model])){
$add_div="<div>카메라모델 : {$exif[Make]} - {$exif[Model]}<br></div>";
}
$view[content] .=$add_div;

그런데 $view.skin.php에서 기능을 넣는 것이 좋을텐데요?
답변 감사드립니다.
균이님이 적어주신 소스를 응용해봐가며 이리저리 잔머리를 굴려봐도 여전히 않됩니다.

view.skin.php에서 쓰지 못할 상황 때문에...꼭 view.php를 만져야 해서요..ㅠㅠ

더 이상의 답변이 나오지 않을 것 같습니다.
관심 가져주셔서 다시한번 감사드립니다. 균이님.
for($i = 0; $i < $view[file][count]; $i++)
{
$exif = @exif_read_data("{$view[file][$i][path]}/{$view[file][$i][file]}");
if (isset($exif[Make]) || isset($exif[Model]))
echo "<div>카메라모델 : $exif[Make] - $exif[Model]<br></div>";
}

잘되네요.

preg_replace는 왜 물어 보신건지요?
해결도 못하시고 채택을 해버리면 어쩌나요?
다시보니 안될 수 밖에 없었네요..죄송

$view[file][$i][path]}/{$view[file][$i][file]}로 해서는 $i 값을 가져 올 수 없기때문입니다
그리고 첨부 이미지는 $view[content]와 관계가 없습니다

view.skin.php 에서 다음 부분.......
        // 파일 출력
        for ($i=0; $i<=count($view[file]); $i++) {
            if ($view[file][$i][view])
                echo $view[file][$i][view] . "<p>";
        }
다음과 같이 수정 하세요

 for ($i=0; $i<=count($view[file]); $i++) {
  if ($view[file][$i][view]){
    echo $view[file][$i][view];

    $exif = @exif_read_data("{$view[file][$i][path]}/{$view[file][$i][file]}");
      if (isset($exif[Make]) || isset($exif[Model]))
      echo "<div>카메라모델 : {$exif[Make]} - {$exif[Model]}<br></div>";
}

view.skin.php를 수정하지 못하는 상황이라는게 이해가 안가지만 굳이 view.php에서 수정하려면
 for ($i=0; $i<=count($view[file]); $i++) {
  if ($view[file][$i][view]){
    $exif = @exif_read_data("{$view[file][$i][path]}/{$view[file][$i][file]}");
      if (isset($exif[Make]) || isset($exif[Model]))
      $view[file][$i][view] .= "<div>카메라모델 : {$exif[Make]} - {$exif[Model]}</div>";
    }
}

exif_read_data()에서 겹따옴표를 써야할 겁니다
그래도 안되면 다시 댓글 달아보세요
균이님의 친절한 답변에 다시 한번 감사를 드립니다.

exif 정보를 굳이 view.php에 써야 하는이유는 다음과 같습니다.

사진을 첨부파일로 올리면 view.skin.php를 수정하면 exif 정보가 "잘 나옵니다". 이미 그렇게 쓰고 있습니다.
문제는 이미지를, 첨부파일로 올리지 않고...에디터에서 삽입했을 때입니다
.

에디터로 이미지를 넣게 되면...첨부파일이 아니기 때문에 아무리 view.skin.php를 수정해봐야 소용이 없었습니다. 절대로 exif정보가 사진한장 한장 밑으로 나오지 않습니다.

에디터에서 넣은 이미지는 $view[content] 에 속해 버리기 때문입니다.

(왜 한장 한장이라고 말씀드리냐면...한장만 넣으면 view.skin.php를 수정해서 가능한데...
사진을 여러장 에디터로 넣으면..."각각의 사진 밑"으로 exif 정보가 나오지 않기 떄문입니다.)

그래서 view.php를 수정하는데..이미지 삽입에 관련된 부분이 preg_replace 문에 쌓여 있어서 질문을 올린 것입니다.

즉 결론을 말씀드리면....
1. 에디터에서 삽입한 이미지가 두장 이상일때 각각의 이미지 밑으로 EXIF 정보가 나오길 원합니다.

2. 그럴려면 반드시 view.php의
$view[content] = preg_replace("/(\<img )([^\>]*)(\>)/i", "\\1 name='target_resize_image[]' onclick='image_window(this)' style='cursor:pointer;' \\2 \\3", $view[content]);

이 라인을 수정해야 합니다.

3. \\2 \\3 이 뒷쪽으로
$exif = @exif_read_data('{$view[file][$i][path]}/{$view[file][$i][file]}');
if (isset($exif[Make]) || isset($exif[Model])){
echo \"<div>\" ;
$exif = @exif_read_data('{$view[file][$i][path]}/{$view[file][$i][file]}');
if (isset($exif[Make]) || isset($exif[Model])) echo \"카메라모델 : $exif[Make] - $exif[Model]<br></div>

이 소스를 넣어야 합니다.


4. 균이님께서 다시 써주신 부분도 역시나 되지 않습니다. ㅠㅠ
어휴...당연히 안됩니다
질문 자체를 에디터로 삽입한 그림이라고 해야지요
코드에 $view[file]..이런게 들어있는데 누가 에디터로 삽입한 것을 하려는 줄 꿈이나 꾸겠어요?

에디터로 삽입한 이미지는 이미지 경로를 $view[file]...이런식으로는 가져올 수 없습니다
따라서 $view[content]에서 이미지 경로를 추출해낸 다음 exif 정보를 구하고<==preg_match_all 사용
그 다음 str_replace를 하던 pre_replace를 하던 해서 내용을 바꾸어야 됩니다
시간 나면 만들어서 올려드리죠
© SIRSOFT
현재 페이지 제일 처음으로