2011-02-05 5 views
1

glob()를 사용하여 디렉토리에 모든 파일을 포함하는 방법을 배우려하고 있지만 작동하지 않는 것 같습니다. 이것은 내가 지금 가지고있는 코드입니다 :glob가 하위 디렉토리에 파일을 포함하도록합니다.

foreach (glob("addons/*.php") as $filename) { 
include $filename; 
} 

그러나 하나의 파일을 포함하는 것은 잘 작동하는 것 같다 :

include "addons/hello.php"; 

이 내 파일 구조가 모습입니다 같은 :

테마

-addons

--hello.php

-index.php

-options.php

그래서 나는 문제가 어디 있는지 모르겠어요. 이 코드는 (테마) 하위 디렉토리 자체에 있습니다. 그 차이가 있다면. 감사.

+0

'echo $ filename; '이라고하면 어떻게됩니까? –

+0

포함 경로에서'$ filename'을 찾을 수 있는지 확인하십시오. – Gordon

+0

'include' 대신에'print'를 사용하면 파일의 예상 목록을 제공합니까? – mario

답변

3

사용이 :

foreach (glob("addons/*.php", GLOB_NOCHECK) as $filename) { 
    PRINT $filename . "\n"; 
} 

디렉토리는 현재 상대적으로 존재하지 경우, 다음은 출력으로 addons/*.php 표시됩니다.

function recursiveGlob($dir, $ext) { 
    $globFiles = glob("$dir/*.$ext"); 
    $globDirs = glob("$dir/*", GLOB_ONLYDIR); 

    foreach ($globDirs as $dir) { 
     recursiveGlob($dir, $ext); 
    } 

    foreach ($globFiles as $file) { 
     include $file; 
    } 
} 

사용법 : recursiveGlob('C:\Some\Dir', 'php'); 당신이 개별 파일에 다른 일을하려면

, 단지 include $file 부품을 교체

+0

그래, 상단에 "addons/*. php"를 출력하고있다. – James

+0

@James : glob ("./ addons/*. php")'를 시도해보십시오. 그러나 틀림없이 잘못된 디렉토리에 있습니다. – mario

+0

좋아, 이제 알았다. 나는 마침내 충분한 폴더를 되찾았다. CWD가 콘텐츠 폴더의 일부 였기 때문에 어느 것이 CWD인지 알지 못했습니다. 모두에게 도움을 주셔서 감사합니다. – James

0

파일의 경로가 서버 루트에서 절대 경로인지 확인하십시오. 내 경우

이 예제는 문제없이 작동합니다

$dir = getcwd();//can be replaced with your local path 

foreach (glob("{$dir}/addons/*.php") as $filename) { 
    if(file_exists($filename)) 
    { 
     //file exists, we can include it 
     include $filename; 
    } 
    else 
    { 
     echo 'File ' . $filename . ' not found<br />'; 
    } 
}; 
+0

내 관리 폴더 아래의 모든 파일 목록을 생성합니다. – James

+0

맞습니다. glob가 예상대로 작동하고 있음을 보여줍니다. 이제 $ dir 변수가 아닌 $ filename use include를 표시하는 대신 addons 폴더에 대한 경로를 설정할 수 있습니다. – Nazariy

+0

그런 파일이나 디렉토리가 없다는 것은 여전히 ​​있습니다. 왜 절대 경로를 사용하고 있는지 모릅니다. – James

0

(이것은 일반적으로 현재 작업 디렉토리를 포함하면서) 그에 한정되지 않고 검색 경로를 사용하는 것입니다 포함 ... 사용 상대 디렉토리 경로가있는 glob()은 항상 현재 작업 디렉토리에 상대적입니다. 루프를 시작하기 전에 ... 현재 작업 디렉토리가 echo getcwd()를 사용하고 있다고 생각하는 곳에 있는지 확인하십시오. 결국 Theme 서브 디렉토리에 있지 않을 수도 있습니다. Theme 서브 디렉토리는 검색 경로에 있습니다. 테스트를 위해

+0

나는 상대방 경로에 의지하지 않을 것이다. 물건을 엉망진 게하는 것이 매우 쉽다. – Nazariy

+0

나는 상대방 경로가 올바른 위치에있을 때만 작동한다고 말한다. 이 경우 OP가 자신이 생각하는 곳이라고 생각하지 않습니다. –

1

이 재귀 함수 트릭을 할해야합니다.

관련 문제