0

我在 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

如果我从远程服务器和 json_decode 它的远程 PHP 脚本(使用 2 个服务器、源(脚本所在的位置)和获取信息并处理它的那个)调用它,它会回显:

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。

编辑:

我已经改变了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);
}

当我将完全相同的迭代器连同编码一起放入测试页面时,我在这里得到了结果

但是当我使用我的类中的方法调用它时(它是唯一运行的东西)就在这里。最终,我试图将文件列表和文件大小作为数组获取,文件是键,大小是值。

4

1 回答 1

0

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

Sverri 提到的表达式中的大括号没有任何作用,只是令人困惑。把它们放在外面。

看起来也$files[] .= $pathname;很奇怪。$files[] = ...追加到数组,并.=追加到字符串。同时做这两件事是没有意义的。PHP 似乎忽略了.=. 也拿出来。

所以

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

变成

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

这很可能对您的问题没有帮助。数组是否包含正确的数据?

于 2015-03-07T10:51:56.220 回答