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

Имам сървър, работещ с PHP версия 5.4.16, и се опитвам да използвам scandir за изброяване на файлове в директория. Трудно ми е да разбера какъв е проблемът. Опитах и ​​../store/dir_to_scan, и /root/store/dir_to_scan. Също така се опитах да използвам както glob, така и scandir, както можете да видите по-долу, без резултат. Ако премахна директорията dir_to_scan, тя ще изброи директориите вътре в /root/store, което намирам за най-озадачаващо от всички. Също така направих chmod на папките и файловете до 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 argument supplied for 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 root root 4096 7 юни 22:18 dir_to_scan4 - person user1628514; 10.06.2013
comment
използвахте ли функцията с dir_to_scan2?, също можете да промените потребител/група от dir и файлове на apache. - person kraysak; 10.06.2013
comment
В крайна сметка ще го направя, но в момента не само го тествам. Работи на друг мой сървър, който също е озадачаващ със същите разрешения, само по-нова версия на php 5.5. - person user1628514; 10.06.2013