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