У меня есть массив в 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, это дает эхо:
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.
Редактировать:
Я немного изменил iteraor и все равно получаю те же результаты... У меня теперь есть:
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);
}
Когда я помещаю тот же самый итератор на тестовую страницу сам по себе вместе с кодировкой, я получаю результаты здесь
Но когда я называю это с помощью метода в моем классе (и это единственное, что работает), здесь. В конечном итоге я пытаюсь получить список файлов и размеров файлов в виде массива, который является ключом, а размер - значением.
(Еще комментарий, что ответ, но мне нужно больше места).
Скобки в выражении, о которых говорит Сверри, ничего не делают и просто сбивают с толку. Просто оставьте их.
Также $files[].= $pathname;
выглядит странно. $files[] =...
добавляет к массиву и .=
добавляет к строке. Выполнение обоих в то же время не имеет смысла. PHP, похоже, игнорирует .=
. Возьмите его тоже.
Так
if (!$fileinfo->isFile()) continue;{
$files[] .= $pathname;
}
становится
if (!$fileinfo->isFile()) continue;
$files[] = $pathname;
Скорее всего, это не поможет. Имеет ли массив правильные данные?
if(...)continue;{...}
сделает? Он делает что-то, что может быть намечено, но это довольно нетрадиционно и его легко понять неправильно.