php scandir() - указан недопустимый аргумент для foreach() [файл]

У меня есть сервер с PHP версии 5.4.16, и я пытаюсь использовать scandir для вывода списка файлов в каталоге. Мне трудно понять, в чем проблема. Я пробовал как ../store/dir_to_scan, так и /root/store/dir_to_scan. Я также пытался использовать как glob, так и scandir, как вы можете видеть ниже, безрезультатно. Если я удалю каталог dir_to_scan, в нем будут перечислены каталоги внутри /root/store, что меня больше всего озадачивает. Я также изменил папки и файлы на 777, чтобы убедиться, что это не проблема с разрешениями. Я получаю сообщение об ошибке «Массив ([тип] => 2 [сообщение] => Недопустимый аргумент, указанный для foreach() [файл] => /root/html/test.php [строка] => 5)» также при запуске с правильной настройкой каталога.

Спасибо за любую помощь.

Настройка каталога

/root/html //where php script is run
/root/store/dir_to_scan //files I need to list

Сценарий PHP

<?
 #$files = glob('../store/dir_to_scan/*', GLOB_BRACE);
 $files = scandir("/root/store/dir_to_scan/");
   foreach($files as $file) {

      //do work here
      if ($file === '.' || $file === '..') {
                continue;
       }
    echo $file . "<br>";
}
print_r(error_get_last());
?>

person user1628514    schedule 08.06.2013    source источник


Ответы (2)


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

/root/store/dir_to_scan ->

$files = scandir("/root/store/dir_to_scan/");
person Jake B    schedule 08.06.2013
comment
Я ценю ваш ответ, к сожалению, такая же проблема существует с косой чертой или без нее. :/ - person user1628514; 09.06.2013

это должно решить вашу проблему

$carpeta= "/root/store/dir_to_scan";
    if(is_dir($carpeta)){
        if($dir = opendir($carpeta)){
            while(($file = readdir($dir)) !== false){
                if($file != '.' && $file != '..' && $file != '.htaccess'){
                  echo $file;  //or save file name in an array..
                 //  $array_file[] = $file;

                }
            }
            closedir($dir);
        }
    }
person kraysak    schedule 09.06.2013
comment
это тот же код, который я использую для этой задачи, и я живу в испанской стране... и $carpeta - единственное испанское слово - person kraysak; 09.06.2013
comment
Что ж, это немного приблизило меня к успеху. Он может читать /root/store так же, как и другие скрипты, но не будет отображать файлы в /root/store/dir_to_scan. Тем не менее, он больше не выдает ошибку Array ( [type] =› 2 [message] =› Invalid аргумент для foreach() [file] =› /root/html/test.php [line] =› 5 ). - person user1628514; 10.06.2013
comment
возможно, проблема с правами доступа, проверьте это .. также попробуйте это: echo exec(ls /root/store/dir_to_scan); - person kraysak; 10.06.2013
comment
drwxr-xr-x 2 root root 4096 8 июня 09:27 dir_to_scan drwxr-xr-x 2 root root 4096 8 июня 07:35 dir_to_scan2 drwxr-xr-x 2 root root 4096 8 июня 07:18 dir_to_scan3 drwxr-xr-x 2 корень корень 4096 7 июня 22:18 dir_to_scan4 - person user1628514; 10.06.2013
comment
Вы использовали эту функцию с dir_to_scan2?, также вы могли изменить пользователя/группу каталогов и файлов на apache. - person kraysak; 10.06.2013
comment
Со временем буду, но сейчас не просто тестирую. Он работает на другом моем сервере, который также вызывает недоумение с теми же разрешениями, только более новая версия php 5.5. - person user1628514; 10.06.2013