json_encode возвращает ноль из массива php

У меня есть массив в php от recursiveiteratoriterator, он прекрасно загружается, когда я выгружаю файл. Когда я пытаюсь json_encode и передать его в браузер, я получаю 2 сценария:

Я повторяю кодировку json_ и получаю следующее:

["\/var\/www\/html\/dev\/workspace\/ftpscript\/test\/10MB.zip",
"\/var\/www\/html\/dev\/workspace\/ftpscript\/test\/test.php"]null

Если я вызываю его из удаленного PHP-скрипта (используя 2 сервера, источник (где находится скрипт) и тот, который берет информацию и обрабатывает его) с удаленного сервера и json_decode, то echo выдает:

NULL

Сценарий:

$files = array();
    $startpath = getcwd()."/test/";
    $fileinfos = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($startpath)
    );
    foreach($fileinfos as $pathname => $fileinfo) {
        if (!$fileinfo->isFile()) continue;{
        $files[] .= $pathname;
        }
    }
    $utfEncoded = array_map("utf8_encode", $files );
    echo json_encode($utfEncoded);

Я пробовал с и без кодирования, и это дает тот же результат. Я что-то пропустил? Если это имеет значение, я запускаю php 5.4.38 на Apache.

Редактировать:

Я немного изменил итератор и все еще получаю те же результаты... Теперь у меня есть:

function ft_srcscan() {
    $path = getcwd();
    $directory = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
    $iterator = new RecursiveIteratorIterator($directory);
    $files = array();
    foreach ($iterator as $info) {
        $files[$info->getPathname()] = $info->getSize();
    }
    echo json_encode($files);
}

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

Но когда я вызываю его, используя метод в моем классе (и он работает только), это здесь. В конечном итоге я пытаюсь получить список файлов и размеров файлов в виде массива, в котором файл является ключом, а размер - значением.

1 ответ

Решение

(Больше комментарий, но ответ, но мне нужно больше места).

Скобки в выражении, которое упоминает Сверри, ничего не делают и просто сбивают с толку. Просто оставь их.

Также $files[] .= $pathname; выглядит странно $files[] = ... добавляет к массиву, и .= добавляет к строке Делать оба одновременно не имеет смысла. PHP, кажется, игнорирует .=, Убери это тоже.

Так

if (!$fileinfo->isFile()) continue;{
$files[] .= $pathname;
}

становится

if (!$fileinfo->isFile()) continue;
$files[] = $pathname;

Это не поможет с вашей проблемой, скорее всего. Содержит ли массив правильные данные?

Другие вопросы по тегам