2011-01-08 1 views
7

Linux 서버에서 file_exists() PHP 함수에 이상한 문제가 있습니다.일부 파일에서 PHP file_exists()가 false를 반환합니다.

file_exists를 사용하여 이미지를 편집하기 전에 서버에 있는지 확인하는 경우 명백한 이유없이 실패하는 경우가 있습니다. 파일 경로는 절대적이며 ssh를 통해 지정된 경로에서 100 %를 검사했습니다.

file_exists()에 실패한 이미지는 여전히 브라우저에 표시됩니다. 코드가 차이를 만들지 않습니다 var_dump(file_exists('/home/user/path/image.jpg')); false를 반환합니다.

파일 권한/소유권은 모든 이미지 및 상위 디렉토리에서 동일합니다. 안전 모드가 꺼져 있습니다. PHP 오류가 없습니다. 나는 지금 당황스럽고 무엇을 찾을 지 모릅니다. 여기

는 이미지가 서버에있는 방법입니다

/home/user/public_html/images/location/1.jpg -- will work 
/home/user/public_html/images/location2/1.jpg -- won't work 
/home/user/public_html/images/location2/2.jpg -- will work 

사람이 어떤 아이디어를 가지고 있다면 행복하게 그들을 밖으로 시도 할 것이다, 그래서 내가 서버에 루트 액세스 할 수 있습니다.

미리 조언 해 주셔서 감사합니다. 추가 정보가 필요하면 알려주세요.

편집 : 아래 의견에 대한 질문에 답변하십시오.

  • 예, 이미지가 있습니다. 확실히 캐싱하지 않습니다.
  • 안전 모드가 해제되었습니다 (이미 내 게시물에서 언급 했음).
  • 경로는 심볼릭 링크가 아니며 서버의 파일 위치에 대한 직접 링크입니다.
  • 피닉스, 일관성이 있습니다. 작업 파일은 항상 작동하며 반대의 경우도 마찬가지입니다. 이름은 1.jpg, 1.thumb.jpg 등으로 이상한 문자 나 공백에는 문제가되지 않습니다.
[[email protected] ~]# ls -l /home/user/public_html/images/Hawkhurst/ 
total 92 
-rwxr-xr-x 1 user user 24501 Aug 11 2009 1.jpg 
-rwxr-xr-x 1 user user 1672 Aug 11 2009 1.thumb.jpg 
-rwxr-xr-x 1 user user 14983 Aug 11 2009 2.jpg 
-rwxr-xr-x 1 user user 1370 Aug 11 2009 2.thumb.jpg 
-rwxr-xr-x 1 user user 17238 Aug 11 2009 3.jpg 
-rwxr-xr-x 1 user user 1453 Aug 11 2009 3.thumb.jpg 
-rwxr-xr-x 1 user user 14168 Aug 11 2009 4.jpg 
-rwxr-xr-x 1 user user 1464 Aug 11 2009 4.thumb.jpg 
[[email protected] ~]# 

나는 아무런 차이도하지 않습니다 권한을 777와 755으로 노력했다. 예를 들어,이 폴더에서 1과 2는 3 & 4가 작동하지 않을 때 작동합니다 ...

나는 아파치/PHP가 실행되는 것을보기 위해 빠른 테스트를 실행했으며 아무도 실행하지 않지만 설명하지는 않습니다 일부 이미지는 작동하고 일부는 동일한 권한으로 작동하지 않는 이유는 무엇입니까?

편집 2 : 문제가 해결되었습니다. 얼마나 어리석은 지 믿을 수 없다. 데이터베이스에서 호출 된 일부 파일 이름 끝에는 공백이있다. 원래 스크립트를 만든 사람은 저장하기 전에 정리 작업을 수행하지 않았다.

+0

실제로이 파일을인가에 관하여 : 난 그냥 내 리눅스 박스에 이런 짓을 해결하려면? 캐싱으로 인해 이미지가 표시 될 수 있습니다. –

+0

safe_mode가 활성화되어 있습니까? – Mchl

+1

'이 함수는 존재하지 않는 파일을 가리키는 심볼릭 링크에 대해 FALSE를 반환합니다.' – ajreal

답변

4

ls -l /home/user/public_html/images/location/을 실행하고 결과를 질문에 추가하십시오.

이것은 권한 문제 일 가능성이 큽니다. PHP는 아마 파일에 대한 읽기 액세스 권한이 없습니다.

+1

Apache HTTPd 웹 서버에서 PHP를 실행하는 경우 일반적으로 아파치가'daemon' 사용자로 실행되고 있음을주의하십시오. 특정 사용자에게 필요한 사용 권한이 있는지 확인하십시오. –

1

웹에서 많은 검색을 한 후에 직접 해결책을 찾았습니다. 다른 사용자에게 도움이되기를 바랍니다 : 아파치 그룹과 사용자가 아파치 httpd.conf에 설정되어있는 사용자와 그룹이 같은지 확인하십시오.

1

아마도 파일 이름에 공백 기호가있을 수 있습니다. 중요한거야.

0

나는 올바른 결과를 얻는 데에도 문제가있었습니다. 폴더에 권한 문제가 있음이 나에게 드러났다. 폴더에 Apache 사용자에 대한 eXecute 권한이 있는지 확인해야합니다. 는 chmod g + X csv_files

종류가 이반