Указан неверный аргумент для foreach () - использование glob - PullRequest
1 голос
/ 08 мая 2011

Сегодня у меня проблема с моим скриптом, мой скрипт должен искать (.css файлы)

Я использовал код для:

  1. Поиск всех подпапок вкорневая папка
  2. Создайте все пути к подпапкам в массиве
  3. , используя foreach () {glob ....}, скрипт должен найти все пути к файлам css

Вот мой код:

$path = '';
$stack[] = $dir;

while ($stack) {
    $thisdir = array_pop($stack);

    if ($dircont = scandir($thisdir)) {
        $i=0;

        while (isset($dircont[$i])) {
            if ($dircont[$i] !== '.' && $dircont[$i] !== '..') {
                $current_file = "{$thisdir}/{$dircont[$i]}";

                if (is_dir($current_file)) {
                    $path[] = "{$thisdir}/{$dircont[$i]}";
                    $stack[] = $current_file;
                }
            }
            $i++;
        }
    }
}

$path[] = $dir;
foreach($path as $dirname){
    $add = glob($dirname . '/*.css');

    foreach($add as $file){
        $code = file_get_contents($file);
        $code_arab = arabicer($code);
        file_put_contents($file,$code_arab);
    }
}

Когда я запускаю свой скрипт, я обнаружил, что сообщение об исчезновении:

Предупреждение: неверный аргумент для foreach () в / home/u274517531/public_html/libs/functions.php в строке 131

Я уверен, что мой массив не пуст.

Итак, кто-нибудь может мне помочь, как решить эту проблему?

Спасибо.

Ответы [ 3 ]

1 голос
/ 08 мая 2011

Вы говорите, что уверены, что ваш массив не пустой, но значение Недопустимый аргумент, предоставленное для сообщения об ошибке foreach () , означает, что это , а не массив . Попробуйте сами, если не верите:

var_dump($add);

Скорее всего, произошла ошибка при поиске файлов и glob () возвращает FALSE:

Возвращает массив, содержащий совпавшие файлы / каталоги, пустой массив, если не найдено ни одного файла или FALSE ошибка.

0 голосов
/ 20 декабря 2012

Сегодня я обнаружил ту же проблему с PHP-скриптом, и для его устранения потребовалось переключение из цикла foreach в цикл for.Не уверен, что означает, массив выглядит и работает одинаково.

// Errors out
$files = glob($directory.'*.html');
foreach($files as $file){
    echo($file);
}

// No error
$files = glob($directory.'*.html');
for($i=0; $i<count($files); $i++){
    echo($files[$i]);
}
0 голосов
/ 08 мая 2011

Измените это:

$path[] = $dir;
foreach($path as $dirname){
    $add = glob($dirname . '/*.css');
    foreach($add as $file){

на это:

$path[] = $dir;
var_dump($path);
foreach($path as $dirname){
    $add = glob($dirname . '/*.css');
    var_dump($add);
    foreach($add as $file){

Мы не знаем, какая строка 131, поэтому я не знаю, какой foreach не работает.

(я предполагаю, что 2-й, потому что первый практически вынужден массив на $path[] = ..)

...