2010-11-18 5 views
1

나는 다음과 같이 붙어있어서 도움이 될 것입니다. 컬렉션 내에서PHP를 사용하여 하위 폴더가있는 특정 폴더 내의 파일 찾기

images/collections/ 

내가 노력하고 무엇

imageProductCode-something.jpg 

같은 명명 된 수많은 하위 폴더

images/collections/collection1, images/collections/collection2 

이미지가있을 수 폴더에 다음과 같은

나는 폴더 트리를 해야 할 일은 내 제품 코드 인 하나의 변수를 스크립트로 전달하는 스크립트입니다. 폴더의 경로를 반환 ...

images/collections/collection3/imageProductCode-something.jpg 

답변

0

당신은 RecursiveDirectoryIterator

function getImageDirectory($iId) { 
    $oDirectory = new RecursiveDirectoryIterator("/path/to/images/"); 
    $oIterator = new RecursiveIteratorIterator($oDirectory); 
    foreach($oIterator as $oFile) { 
     if ($oFile->getFilename() == 'imageProductCode-' . $iId . '.jpg') { 
      return $oFile->getPath(); 
     } 
    } 
} 
+1

가로 랩 제안 커스텀'FilterIterator' 또는'RecursiveRegexIterator'를 사용하면 내 upvote를 얻을 수 있습니다. 또한'isFile'에 대한 체크가 필요하지 않습니다. 왜냐하면'RecursiveIteratorIterator'의 기본 행동은 잎만을 반환하기 때문에'$ oFile'은 항상 파일이 될 것입니다. – Gordon

+0

잎사귀 만 돌려주는 것에 대해 몰랐습니다. 업데이트되었습니다. – enobrev

+0

사악한 감사 친구! – Andy

0

당신은 모든 컬렉션을 확인할 수 있습니다 :

$collections = array('collection1', 'collection2', 'collection3'); 

foreach ($collections as $collection) { 
    if (file_exists('/path/to/collections/'.$collection.'/'.$productCode.'.jpg')) { 
    ... do your thing ... 
    break; 
    } 
} 

이 카탈로그의 크기에 따라, 데이터베이스 (플랫 파일 또는 MySQL의)을 만들 빠른 수 있습니다 특정 제품 코드에 대한 이미지의 위치를 ​​검색 할 수 있습니다. 당신이 < 5.3입니다 PHP의 버전을 사용하는 경우

+0

, 당신이 그것에 대해 데이터베이스를 원하는 경우 위치를 – Andy

+0

를 나열하는 스크립트를 추가하는 방법에 대한 요점을, 나는 sqlite가 –

0

을 사용할 수 있습니다, 당신은 재귀를 직접 작성해야 할 수도 있습니다. 당신이 따라하고 싶은 주요 방법 : 이미지의 루트에

시작 is_file

  • is_dir
  • readdir을

    1. 했던 opendir, 모든 항목을 확인하십시오. 디렉토리 인 경우 디렉토리를 확인하십시오. 많은 작업과 같이 보입니다. 따라서 큰 디렉토리와 이미지 모음을보고있는 경우 위에서 제안한대로 unix 명령이나 db 연결 중 하나를 조사하는 것이 좋습니다.

      또 다른 방법은 디렉토리를 논리적으로 이미지에 연결 시켜서 볼 수있는 이미지의 이름 (또는 다른 속성)에서 알 수 있도록하는 것입니다.

      행운을 빌어 요,

      Yishai 이것은 매우 좋은 아이디어처럼 보인다

  • +0

    정보 Yishai에 감사드립니다 ... – Andy

    +0

    SPL (및 특별히 DirectoryIterators)은 5.3 이후에 더 이상 비활성화 할 수 없지만 PHP5에 추가되었습니다. 이 답변을 수정하지 않고 귀하의 요점에 추가하십시오. – enobrev

    관련 문제