2015-03-07 3 views
0

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

Я эхо 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.

Edit:

Я изменил 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); 
} 

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

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

+0

Как вы думаете, 'if (...) continue; {...}' does? Он делает что-то, что может быть предназначено, но это довольно нетрадиционно и легко понять неправильно. –

+0

В контексте итератора он переходит к следующей итерации, если элемент не является файлом. Поправьте меня, если я ошибаюсь, пожалуйста, это только второй раз, когда я использовал один из них и его месяцы (предыдущий вопрос). Я просто знаю, что в php, эхом от массива $ files, до json_encode это прекрасно и показывает, что мне нужно, его просто добавляющий нуль в конец массива после кодирования. –

ответ

0

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

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

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

Так

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

становится

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

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

+0

Я чувствую себя таким идиотом ... У меня был второй json_encode ранее в моем классе, который взял результат итератора и закодировал его еще раз ... Спасибо за помощь всем! –

Смежные вопросы