질문/조언질답게시판
Extra Form
PHP PHP 5.6
CMS Rhymix

안녕하세요, 

 

제가 라이믹스,xe를 사용해본 적이 없어서 난관에 봉착했는데요ㅠ

 

어려운게 아닌거같은데.. 제가 잘 모르는 거같아요 근데 해결이 안되어서 여기에 능력자분들 계실까 싶어

 

올립니다.

 

저희가 홈페이지를 업체에 맡겨서 업체에서 라이믹스로 구현을 해준건데요

 

거기서 수정, 보완작업을 지금 하는데.. 

 

업로드한 엑셀파일이나 csv파일을 출력해주고 싶습니다.

 


view 라는 php파일에서 파일을 업로드하면

{@ $file_name = explode('/', $data_info->file); }

$data_info로 받아와서 이렇게 html파일에 써져있구요.

이 파일명 변수에서


{@ $fold= $file_name[count($file_name) - 2]; }
{@ $namef= $file_name[count($file_name) - 1]; }

 

이런식으로 뒤의 경로가 업로드할때마다 달라지므로 $fold, $namef에그 뒤경로들을 담습니다.
그리고 $mydata = "./files/attach/w1data/data/".$fold."/".$namef; 이렇게 변수를 합쳐서 경로를 $mydata에넣고

if (($handle = fopen($mydata, 'r')) !== FALSE) {

}

fopen에 넣었더니 아예 안되네요.
fopen은 경로만 되는건가요?
fopen(""./files/attach/w1data/data/2019/dkdkd") 이렇게 경로 넣으니까 작동하고
변수를 넣으니 안되네요
변수도 보니까 저렇게 문자열합쳐서 변수만든것은 되지 않네요..

 

라이믹스에서는 보통 파일 입출력을 어떻게 하나요?ㅠㅠ

능력자분들 좀 부탁드립니다
계속 해보고 있는데 안되서 이렇게 남깁니다.

  • profile
    https://www.php.net/manual/en/function.fopen.php

    변수는 결국 값이기 때문에 $mydata의 값이 정확히 들어가 있다면 문제가 없을것 같은데요.
    echo $mydata; 을 추가해서 어떤 값이 들어가있는지 확인해보세요.
  • profile ?
    echo해서 출력하면 경로값이 나와요. 근데 fopen상으로 들어가니 안되더라구요 문자열을 합쳐서 그런지..ㅠㅠ
  • profile

    fopen 문제가 아니라 {@ } 템플릿 문법 안에서 { } 중괄호를 또 사용하셨기 때문에 발생하는 문제입니다.

     

    RXE에서 이런 작업은 템플릿(스킨, 레이아웃)이 아니라 모듈이나 애드온에서 처리하는 것이 정석입니다. 어쩔 수 없이 템플릿에서 해야 한다면 if (조건): endif; 문법을 사용하여 중괄호 없이 코드를 작성하시기 바랍니다.

  • profile ?
    아.. 모듈에서 하려고했는데 모듈에서 잘안되어서 했는데 일단 말씀하신대로 한번 해볼게요ㅠ.. 혹시 하고나서 다시 여쭤봐도될까요..ㅠㅠ?
  • profile ?
    근데 제가 if 넣는 곳은 <?php ?>로 변경한거라서 상관이 있을까요?
  • ? profile
    {@ }로 사용한 곳과 <?php ?>로 사용한 곳 사이에 변수가 공유되지 않을 수도 있습니다. 하나만 사용하시고, if문은 위에 알려드린 것처럼 중괄호 없는 문법으로 쓰세요.
  • profile ?
    if문 안에 while문이 들어가다보니 중괄호가 있어야 하고.. 또 없애고 해보았는데도 안되네요ㅠㅠ말씀하신대로 모듈에서 다시 한번해보려구요.. 라이믹스 파일(csv,xlsx등)을 출력하여 보여주는 그런 예제라던가 방법이 적혀있는 사이트는 혹시 아시나요? ㅠㅠ 답변 감사드립니다ㅠㅠ
  • ? profile

    모든 조건문과 순환문은 중괄호 없이 쓸 수 있습니다.

    <?php ?>와 {@ }를 혼용하지 마시고 모두 {@ }로 통일하시고요.

    if(조건):
        while(조건):
            코드
        endwhile;
    endif;

     

    그리고 구체적으로 어떤 코드를 사용했더니 무엇이 어떻게 안되는지 (에러메시지 및 정확한 증상) 말씀하시지 않고 그냥 안된다고만 하시면 아무도 도움을 드릴 수 없습니다.

  • profile ?
    아 네..ㅠㅠ;
    {@
    $fd = "<script>document.write(su);</script>";
    echo $fd;
    if (($handle = fopen($fd, 'r')) !== FALSE):
    echo "성공";

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE):
    $num = count($data);
    $row++;
    for ($c=0; $c < $num; $c++):
    echo "<td>".$data[$c]."</td>" ;
    echo"</tr>";
    endfor;



    fclose($handle);
    endwhile;
    endif;

    }
    조언해주신대로 위처럼 해보아는데, echo $fd 는 출력이 되지만(경로로) if 안에 들어가 있는 성공은 결과로 나타나지 않습니다. if문안에 아예 들어가지 못하다보니 while문도 안되고 빈화면으로만 나타나는 상태입니다.
  • ? profile
    $fd에는 "<script>document.write(su);</script>"라는 문자열이 들어가 있는데, 그런 이름의 파일이 존재할 리가 없으니 $handle은 당연히 FALSE로 나오겠지요?
  • profile ?
    아 죄송합니다 그 위에 문장을 안보여드려서... 그렇는데 위에 스크립트로
    {@ $file_name = explode('/', $data_info->file); }

    <script language='javascript'>
    var path= "/var/www/html/files/attach/w1data/data/";
    var fil="{$file_name[count($file_name) - 2]}";
    var namef="{$file_name[count($file_name) - 1]}";
    var su = path+fil+"/"+namef;

    document.write(su);
    </script>

    이렇게 들어가 있습니다.

    그러니까 $fd는 당연히 저 경로로 출력이 된거고 $fd를 $handle에 fopen($fd 형태로 넣었습니다만.. ㅠㅠ
    무엇이 문제인걸까요;;ㅠㅠ
  • ? profile

    자바스크립트와 PHP를 섞어서 쓰시면 안됩니다. 자바스크립트에서 선언한 su라는 변수를 PHP에서 참조할 수 없으므로 $fd에 정상적인 값이 들어가지 않습니다.

     

    자바스크립트는 모두 제거하고, PHP만 사용하여 $fd에 경로를 집어넣으세요.

  • profile ?

    너무너무감사합니다..! 해결했습니다. 제가 템플릿문법에 대해서도 잘 알지 못한 것도 있지만 많이 부족한 것 같아요.. 덕분에 해결했습니다. 감사합니다 ! 좋은답변으로 체택하고 싶은데 정회원이 아니라 하지 못해서.. ㅠㅠㅠ 어떻게 감사함을 표현해야할지 ㅠㅠ