Extra Form
PHP PHP 7.2
CMS XpressEngine

안녕하십니까. 좋은아빠되기입니다.

 

제가 날코딩한 프로그램에 이미지를 캐시로 적용할려고 하니.. 거참 난감한게 있네..

 

도메인.com은

img.도메인.com으로 처음부터 변환하게 설계를 해놔서.. 간다하게그냥 되는데요..

 

뒤쪽에 $mtime = filemtime($graphic);

이걸 이용해서 파일명 뒤에 타임을 기록하려니 만만치가 않네요..

 

우선 일정한 규칙이 있습니다.

$str 이라는 변수안에

 

 긴 문장들 중에서

 

"/data/a1/a120180101m1.gif      /data/a1/a120180101m2d1.png   /data/a1/a120180101m2.jpg"

 

이렇게 $str 변수 안에 여러 이미지 주소가 들어 있습니다.

 

규칙을 보시면아시겠지만

/data/a1/a120180101 이렇게 동일합니다.

글자로 나타내자면

 

/data/코드/코드날짜8자리 그리고 영어 몇자 추가 마지막에는 .gif 또는 png 또는 jpg 입니다.

 

이걸

 

$mtime = filemtime("/data/a1/a120180101m1.gif ") 이렇게 넣어가지고 $mtime를 여러번 만들어 내서

 

/data/a1/a120180101m1.gif?$mtime      /data/a1/a120180101m2d1.png?$mtime   /data/a1/a120180101m2.jpg?$mtime

 

각각 팡일명뒤 $mtime를 넣고 싶습니다.

 

 

str 변수안에 몇개나 저런 문장이 있을지는 알수가 없구요...

 

정확한것은

 

/data/코드/코드날자8자리 그리고 영어 몇자 추가 마지막에는 .gif 또는 png 또는 jpg 입니다.

 

이규칙 뿐입니다.

 

정규식으로 가능할것 같은데..

 

혹시 된다면 힌트나 조언 부탁 드립니다.

 

미리 감사합니다.

  • ?
    <?php
    $string = 'The quick brown fox jumped over the lazy dog.';
    $patterns[0] = '/quick/';
    $patterns[1] = '/brown/';
    $patterns[2] = '/fox/';
    $replacements[2] = 'bear';
    $replacements[1] = 'black';
    $replacements[0] = 'slow';
    echo preg_replace($patterns, $replacements, $string);
    ?>

    이거 수정해서 써보시면..
  • ? ?
    네 이정도 까지는 저도 감을 잡는데요...
    .gif라고 해서 무조건 치환해서도 안되고.. 규칙에 맞는 .gif만 찾아서 끊어내서
    $mtime = filemtime("./data/a1/a120180101m1.gif ")

    요기 넣었다 빼서... mtime 생성을 하고..
    친환까지 할려니깐.. 이게. 보통일이 아니네요.

    올려주신거 보고 공부 다시 해보겠습니다.
  • ? ?
    http://php.net/manual/kr/function.preg-replace.php

    https://webisfree.com/2014-08-29/[php]-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%97%90%EC%84%9C-%ED%8A%B9%EC%A0%95-%EB%AC%B8%EC%9E%90%EB%A5%BC-%EB%8B%A4%EB%A5%B8-%EB%AC%B8%EC%9E%90%EB%A1%9C-%EC%B9%98%ED%99%98-%EB%B3%80%ED%99%98%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D-%EC%82%AC%EC%9A%A9

    https://opentutorials.org/module/6/5141
  • ? ?
    제가 방금 보고 있던걸 주셨네요

    ?|gif|png|jpg 요기까지 찾은것 같네요 ㅎㅎㅎ

    도움 감사합니다.

    그리고

    https://yz.usb.kr/18

    여기 글 보고 있는데.. 이해하기 어렵네요.. 더 공부 해야겠습니다.ㅎㅎㅎ
  • ? ?
    ㅎㅎ..저도 공부중이라 그 마음 이해가 갑니다..
  • ?

    /data/a1/a1/20180101[a-z0-9]중간에있고.. ?|gif|png|jpg 이정도 같은데.. 아 머리 복잡하네요 ㅎㅎㅎ

    중간에 저넘이 문제네요 ㅋㅋㅋ

  • ?

    $str="/data/a1/a120180101m1.gif /data/a1/a120180101m2d1.png /data/a1/a120180101m2.jpg";

    if (preg_match('(/data/a1/a1/20180101)+[a-z0-9]+?gif|jpg|gif/',$str) )
    echo "있어요";
    else
    echo "몾찾았어요 더 노력 하세요 ㅋㅋㅋ";


    대충 여기까지 왔습니다. 좀더 힘내야 겠네요. 일단안되지만 뭔가 되가는 느낌적인 느낌요 ㅋㅋㅋ

     

    한단계 더 온듯요..

     

    preg_match('^/data/a1/a1/20180101$+[a-z0-9]+?gif|jpg|gif/',$str)

     

    조금 더요

     

    if (preg_match('^/data/a1/a1/20180101$+[a-z0-9]+\.(gif|jpg|gif)/',$str) )

     

    몇가지 예비 후보들이 뽑아지네요.

    if (preg_match('^(/data/a1/a1/20180101)[a-z0-9]+(\.(gif|jpg|gif))$/',$str) )

     

    저 볼려고 기록삼아 남겨둡니다. 자꾸 이것 저것 하니깐 원본이 사라져서요 ㅎㅎㅎ

     

    if (preg_match("(/data/a1/a1/20180101)*[a-z0-9]+(\.(gif|jpg|gif))$/",$str) )

     

    if (preg_match("(\/data\/a1\/a1\/20180101)[a-z0-9]+(\.(gif|jpg|gif))$/",$str) )

  • profile

    확장자 무시하고 그냥 공백으로 자르면 안되나요?

  • profile ?

    ㅎㅎㅎ 학원에서 오전에 이짓을 하다가...
    두시간 동안 차타고 운전하면서 오다 보니.. 이게 필요가 없어 지더군요.. ㅎㅎㅎ
    결론은 공부나 좀더 해서 완성은 해두자 입니다. ㅎㅎㅎ

    예제로 보여 드린건... 그냥 저런식으로 있다는 것이고 이미지 파일 경로와 이미지 파일 경로 사이에 글자들이 많습니다. ㅎㅎ

    또 질문들 잘못 드린것 같네요..
    어제 오늘 왜이러는지 ㅎㅎㅎ

  • profile

    screenshot-regexr.com-2019.01.26-16-11-13.png

  • profile ?

    오 신통 방통 합니다.
    근데..
    a1 이게 a2 a1 f1 fc 이렇게 앞파벳한자+알파벳또는숫자한자 이런 규칙을 가집니다....
    이경우 조언좀 부탁 드립니다.

    뚫어져라 소스 쳐다 보고 있는데 너무 신통 방통해서 감탄만 하고 있네요 ㅎㅎ
    공부하고 있겠습니다.
    혹 댓글 보시면 도움 부탁 드립니다.
    너무 궁금해 지네요 ㅎㅎ

     

    ps:

    \w\d 이게 문자,숫자 이런뜻인거 같은데...

    주신 예제를 보면 w d 이렇게 따로 1개씩은 이해가 가는데요..

     

    왜 "a1"이문자가 딱 안먹히는지 모르겠네요..

    실제로 규칙이 필요한곳은

    /data/a1/a12018010 까지는 정확하게 어떤 문자인지 알수 있습니다.

     

    근데 그뒤에 붙는게..

     

    m1.gif 가 될지.. m1ba.png가 될지 그걸 몰라서 애를 먹었습니다.

     

    그걸 다 떠나서..

     

    \/data\/a1\/a12018010 이렇게 하니깐 안되더라구요..

     

    제가 뭘 잘못한거 같은데.. ㅎㅎㅎ a 라는게 무슨 특별한 의미가 있는 문자로 취급되는것 같습니다.

     

    가령 [a-z] 이런식으로 쓰여지니깐요..

     

    ps2 : 위에 엉뚱한 소리 드린거 같네요.

     

    if ( preg_match("/\/data\/a1\/a1/",$str) )

     

    이렇게 하면서 도전하고 있습니다. ㅎㅎㅎ

     

    if ( preg_match("/\/data\/a1\/a120180101[a-z0-9]{1,5}\.(gif|png|jpg)/",$str) )

     

    최종적으로 이정도 되는거 같은데.. 일단. 제 코드 상으로는 "있어요"라고 나오는데

     

    실제로 몽땅 뽑아낼려면 어떻게 해야하는지..

    뽑아내서 실제로 출력도 해봐야 겠네요 ㅎㅎㅎ

    도움 많이 많이 감사합니다.

  • profile

    screenshot-regexr.com-2019.01.26-16-37-52.png

  • profile ?
    echo preg_match_all("/\/data\/a1\/a120180101[a-z0-9]{1,5}\.(gif|png|jpg)/", $str, $matches);

    이렇게 하니깐... 매치되는 패턴의 갯수가 출력되네요.

    더욱 좋은건

    $match 배열이 생성되는군요

    $cnt= preg_match_all("/\/data\/a1\/a120180101[a-z0-9]{1,5}\.(gif|png|jpg)/", $str, $matches);

    for($i=0;$i<$cnt;$i++) echo $matches[0][$i]."<br>";

    이렇게 해서 해결했습니다.

    반환되는 배열이 2차원이었네요... 그걸 감잡지 못하고 좀 해맸네요

    도움 감사합니다.
  • ?

    조금더 저한테 맡게 실용적으로 바꾸어 봤습니다.

    $str="/data/a1/a120180101m1111.gif 각종 글자들 /data/a1/a120180101m2d1.png 각종글자들 /data/a1/a120180101m2.jpg";


    $code="a1";
    $code_date="a120180101";

    $mastr="\/data"."\/".$code."\/".$code_date;

    $cnt= preg_match_all("/".$mastr."[a-z0-9]{1,5}\.(gif|png|jpg)/", $str, $matches);

    for($i=0;$i<$cnt;$i++) echo $matches[0][$i]."<br>";

    혹시 필요하신분들은 참고하세요. ㅎㅎㅎ

     

    내가 적고도 나중에 보면 절대로 못 알아 본다에 한표 합니다. ㅋㅋㅋ

  • ?

    본문과 댓글에 나온 규칙을 보면 이렇게만 해도 될 것 같네요

     

    /data/a1/a120180101m1.gif

    /data/a1/a120180101m2d1.png

    /data/a1/a120180101m2.jpg

     

    정규표현식

    \/data(\/\w{2}){2}\d{8}\w+\.(gif|png|jpg)

  • ? ?
    음 이것도 좋은 방법이네요.
    감사합니다.

    어제 오늘 많이 배우네요 ㅎㅎㅎ