json — код json, возвращающий ноль из массива 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);
}

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

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

0

Решение

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

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

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

Так

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

становится

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]