2017-01-03 16 views
1

사용자 아바타는 ../wordpress/wp-content/uploads/ 폴더에 이름 및 확장자가 입력되어 저장됩니다. 즉, PNG 파일을 업로드하면 확장자는 user_avatar0.png이되며 그렇지 않으면 JPG가 업로드되면 user_avatar0.jpg이됩니다. 각 루프마다 여러 사용자 아바타를로드 중입니다.경로에서 다른 유형의 파일을 찾는 방법

$path="../wordpress/wp-content/uploads/"; 
$av=$path."user_avatar0.png|.jpg"; // if jpg exists loads jpg otherwise load png 
<img src="'. $av .'" height="200" width="200" border="0" > 

어떻게 다른 확장자 (JPG, PNG 등)의 파일이 포함 된 디렉토리에서 파일을 선택합니다 :

이 코드 나는 아바타 파일을로드하는 데 사용한입니까?

+0

확장자가 여러 개인 파일은'file.en.html'과 같을 수 있습니다. 어떤 것이 유효하지만 여기에서 의미하는 바가 아닐지도 모릅니다. – Progrock

답변

1

영리한 사람이 시도한 것은 .png|.jpg입니다. 불행히도 알려진 구문이 아닙니다. PHP 나 HTML을 구문 분석하는 브라우저에 의해 해석되지 않습니다. PHP에는 쉘 매개 변수 확장 ?의 경로 변수 자동 채우기 기능이 없습니다. 물론 glob()이 있지만 jpg/png 확장자를 가진 단일 파일을 얻기 위해 전체 디렉토리를 globbing하는 것은 매우 비효율적입니다. 파일 확장자가 무엇인지에 대한 기록이없는 경우

(? 당신이 당신의 WP 데이터베이스를 조회 할 수있다), 당신은 단순히 JPG/PNG를 추정,이 같은 것을 확인해야 할 것이다 유일한 가능성은 다음과 같습니다

$file = 'user_avatar0.'; 
$file .= file_exists($file.'jpg') ? 'jpg' : 'png'; 

일치하는 경우 기본 이름에 jpg 확장자를 연결하고 일치하지 않으면 png으로 바꿉니다. 사용자에게 아바타가 전혀 없을 경우 if-elseif-else 대신에 file_exists 검사가 실패하면 기본 자리 표시 자로 기본 설정해야합니다. 파일이 있는지 확인하려면 realpath(), is_file() 또는 stream_resolve_include_path()을 사용할 수도 있습니다. 그러나 논리는 동일하게 유지됩니다. 최종 옵션은 소문이 가장 빠르지 만 어쨌든 각각의 결과는 캐시에 저장됩니다.

반복적 인 페이지로드로 동일한 사용자의 아바타를 계속 표시하는 경우 이러한 검사 결과를 $_SESSION 배열에 저장하여 중복 검사를 반복하는 것이 좋습니다. PHP 파일 시스템 캐시 대 세션 캐시를 벤치마킹 해 보겠습니다.

+0

관련 함수에는 정규식 패턴과 일치하는 파일이 있는지 확인하는 데 사용할 수있는'fnmatch()'~ http://php.net/manual/en/function.fnmatch.php ~가 있습니다. 그러나 그것은 단지 부울을 반환하므로 OP의 경우에는 도움이되지 않습니다. 단지 기록을 위해 : PHP에서 쉘 패턴과 유사합니다. –

+0

이 줄에 구문 오류가있는 경우 오류가 있습니까? '$ file. = file_exists ($ file.'jpg ')? 'jpg :'png '; ' –

+0

''jpg '다음에 닫지 않은 따옴표. 이제 게시물에 고정. –