2017-02-10 13 views
1

Мое приложение работает на IIS и физической структуры каталогов выглядит примерно так:Glob не возвращается никаких результатов при попытке получить файлы из относительного пути

C:\inetpub\wwwroot\myApplication\index.php 
C:\inetpub\wwwroot\myApplication\includes\myfunctions.php 
C:\inetpub\wwwroot\myApplication\includes\import_data\users\ 

Эта последняя папка содержит 978 .cgi файлы, которые я Я пытаюсь прочитать данные.

index.php включает includes/myfunctions.php и делает вызов к одному методу в нем - CheckForUsersToImport(), который определяется следующим образом:

function CheckForUsersToImport() 
{ 
    $usersDir = "import_data/users/"; 

    $globRes = glob($usersDir . "*.cgi"); 
    var_dump($globRes); 

    echo "End CheckForUsersToImport();"; 
} 

Когда я перейти к localhost/myApplication/index.php в моем браузере, я получаю этот выход:

массив (0) {} End CheckForUsersToImport();

Я попытался изменить вторую строку кода просто $globRes = glob("*.cgi");, но это дает точный результат.

Я нашел this question, но принятый ответ не сработал для меня.

Я пробовал:

$usersDir = "./import_data/users/"; 
$usersDir = "/import_data/users/"; 
$usersDir = "import_data/users/"; 

Но все 3 дают мне тот же результат, что и выше код.

Как я могу получить все файлы с расширением ".cgi" в каталоге, находящемся под двумя уровнями «под» выполняемой функцией?

EDIT:

Я обновил свою функцию следующим образом:

function checkUserData() 
{ 
    $usersDir = "import_data/users"; 
    $globRes = scandir($usersDir); 
} 

Когда это работает, я получаю следующий результат:

[PHPBB Debug] PHP Warning: в файле [ ROOT] /includes/myfunctions.php в строке 5: scandir (import_data/users, import_data/users): система не может найти указанный путь. (Код: 3)

[PHPBB Debug] PHP Warning: в файле [ROOT] /includes/myfunctions.php в строке 5: ScanDir (import_data/пользователей): не удалось открыть реж: Нет такого файла или каталога

[PHPBB Debug] PHP Warning: в файле [ROOT] /includes/myfunctions.php в строке 5: ScanDir(): (Errno 2): Нет такого файла или каталога

Почему ищет scandir(import_data/users,import_data/users) в этой первой ошибке? Это совсем не то, что я прошел - или, по крайней мере, не то, что, я думаю, прошел, - до scandir()!

+1

Проверьте выход из 'эхо getcwd()', чтобы определить, если рабочий каталог изменился. И когда это возможно, используйте как полный путь, как вы можете, например '$ usersDir = __DIR__. '/ import_data/users /'; ' –

+0

Похоже, вы используете phpBB - я никогда не разрабатывал для него, но не удивлюсь, если в какой-то момент он должен« chdir() », так что рабочий каталог isn ' что вы ожидаете. Раньше я занимался этим в Drupal. Однако не знаю о странной ошибке «scandir()». –

ответ

1

Учитывая, что сообщения об ошибках предполагают, что вы работаете в phpBB, возможно, что приложение должно было изменить текущую рабочую директорию до того, как ваш код будет выполнен, а ваш относительный путь недействителен, когда PHP в настоящее время выполняется.

Вы можете проверить рабочий каталог, чтобы увидеть, если это действительно ваш корневой документ или в другом месте:

echo getcwd(); 

Всякий раз, когда это возможно, указать полный путь к файлам и каталогам на диске. В этом случае, я бы, вероятно, использовать константу __DIR__ со ссылкой на каталог, скрипт определения этой функции находится в:

$usersDir = __DIR__ '/import_data/users/'; 
+0

Отлично; используя '$ usersDir = __DIR__. «path»; «Я могу получить полный список всех файлов в этом каталоге. Спасибо. – sab669