json_encode从php数组返回null

时间:2015-03-07 08:19:39

标签: php json recursiveiterator

我在一个来自recursiveiteratoriterator的php中有一个数组,它在我转储文件时加载正常。当我尝试对它进行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);

我尝试过编码和不编码它会产生相同的结果。我错过了什么吗?如果它有所作为我在apache上运行php 5.4.38。

编辑:

我已经改变了一些迭代器,但仍然有相同的结果...... 我现在有:

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。最终,我试图获取文件列表和文件大小作为数组,文件是关键,大小是值。

1 个答案:

答案 0 :(得分:0)

(更多评论是答案,但我需要更多空间)。

表达中的括号,Sverri提到什么都不做,只是令人困惑。把它们留下来吧。

同样$files[] .= $pathname;看起来很奇怪。 $files[] = ...附加到数组,.=附加到字符串。同时做两件事都没有意义。 PHP似乎忽略了.=。把它拿出来。

所以

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

变为

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

这最有可能帮助解决您的问题。数组是否包含正确的数据?