질문/조언질답게시판

 Warning: copy(var/www/html/files/attach/sub/1019/99.jpg)

 

일단 디렉토리 생성 자체부터 문제가 생겨서 디랙토리는 수동으로 생성해 주고 거기에 파일을 저장하려고 하는데 경로를 못찾네요.

 

$name 에 경로와 파일명까지 다 담아서 아래 copy 함수에 넣은 건데요.

 

현재 파일이 실행되는 경로를 찍어보면 

/var/www/html 로 찍힙니다.

 

$name="./files/attach/~"

$name="var/www/html/files/attach/~"

$name="./var/www/html/files/attach/~"

$name="/var/www/html/files/attach/~"

 

전부 해봐도 다 경로를 찾지 못하는 에러가 나는데요. 경로 지정을 어떻게... 

 

copy($url, $name);

  • profile
    오.. failed to open stream: Permission denied 으로 바뀌었네요..

    _XE_PATH_. 로 붙여줬더니 일단 경로 문제는 해결 된 듯 합니다.
  • profile
    RX_BASEDIR . 'files/attach/........'

    그리고 가능하면 그냥 copy 함수를 사용하지 마시고
    FileHandler나 Rhymix\Framework\Storage 클래스를 사용하세요.
    상위 폴더 생성, 이후 재수정하거나 삭제할 경우에 대비한 퍼미션 조정까지 자동으로 해줍니다.
  • profile profile
    Rhymix\Framework\Storage 요건 어찌 쓰나요????
  • profile profile
    Rhymix\Framework\Storage::copy(원본, 대상);

    그 밖에 move, delete 등 일반적으로 파일 관리에 사용할 만한 함수들은 다 있고,
    Rhymix\Framework\Storage::red(파일명); // 파일 내용 읽기
    Rhymix\Framework\Storage::write(파일명, 내용); // 파일에 내용 저장하기
    이것도 상위 폴더 자동으로 생성해 줍니다.
  • profile profile

    감사합니다. 시도해 보겠습니다.

    copy가 덮어쓰기 되는거죠??

     

     

    Warning: Cannot copy because the source does not exist:

     

    이렇게 뜨면 원본서버에서 다운로드를 못하게 해 놓아서 그런건가요?? 경로는 이미지 경로와 정확한데요....

     

    php copy() 로는 되네요..

  • profile profile
    소스가 존재하지 않는다고 하는데요, 실제로 디렉토리 위치가 재대로 잡혀있는지 확인해보세요.

    ./xe/~~ 와 같은 경로 말고 상대적으로 첫경로까지 재대로 잡아주시면 더 좋을 것 같아요.

    RX_BASEDIR 같은 상수쓰시면 자동으로 라이믹스가 설치된 최상위 폴더까지는 잡아주니 해당 경로 입력하고나서 경로에 대한 debugPrint를 찍어서 정상적으로 경로가 잡혀있는지 확인도 다시해보세요.
  • profile profile

    소스는 타사이트  https~ 이기 때문에 관련은 없는 것 같구요. php copy로는 잘 됩니다.

  • profile profile
    해당 copy는 PHP의 함수와 다르게 작동합니다.

    if (!self::exists($source))

    이 부분이 뭐냐면, 해당 파일이 실제로 님 서버에 존재하는지를 검사하기 때문에 님 서버의 파일으로 copy를 진행하셔야 합니다.

    외부의 파일을 그대로 가져오는 상황이라면 파일핸들러의 getRetmoteResponse와 같은 함수들을 사용하셔야 합니다.
  • profile profile
    위에서 기진곰님게서 php copy 대신 Rhymix\Framework\Storage::copy 사용을 권장하셨는데 안되는 거였군요. 잘 알겠습니다.
  • profile profile
    기진님이 아마 그게 외부 링크인지 모르시고 답변주신 것 같아요.

    Storage 라는 의미답게 내부에서 파일을 관리할때 사용하는 클래스입니다.
  • profile profile
    네. 그러셨을 것 같습니다. 일단 해결은 다되었네요. 작업했던거 별로라 폐기는 했지만요 ㅋㅋㅋ
  • profile profile
    외부 링크를 다운로드하여 특정한 파일에 저장하고 싶다면
    FileHandler::getRemoteFile(URL, 저장할 파일명); 을 사용하시면 좋습니다.
    굳이 임시파일 만들어서 저장했다가 복사할 필요 없이, 그냥 한방에 저장됩니다.
    파일 내용을 변수로 받아올 필요가 없기 때문에 메모리 사용량도 크게 절약되고요.
  • profile profile
    요걸 썼어야 했군요. 다음에 사용할때 요걸 쓰겠습니다. 감사합니다.