json_encode 从 php 数组返回 null
json_encode returning null from php array
我在 php 中有一个来自递归迭代器的数组,当我转储文件时它加载正常。当我尝试 json_encode 并将其传递给浏览器时,我得到两种情况:
我回显 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
但是当我使用 class 中的方法调用它时(这是唯一的 运行)是 here。最终,我试图获取文件列表和文件大小作为数组,文件是键,大小是值。
(评论多于答案,但我需要更多space)。
Sverri 提到的表达式中的大括号没有任何作用,只是令人困惑。别管他们了。
另外 $files[] .= $pathname;
看起来很奇怪。 $files[] = ...
追加到数组,.=
追加到字符串。同时做这两件事是没有意义的。 PHP 似乎忽略了 .=
。也拿出来吧
所以
if (!$fileinfo->isFile()) continue;{
$files[] .= $pathname;
}
变成
if (!$fileinfo->isFile()) continue;
$files[] = $pathname;
这很可能无法解决您的问题。数组是否包含正确的数据?
我在 php 中有一个来自递归迭代器的数组,当我转储文件时它加载正常。当我尝试 json_encode 并将其传递给浏览器时,我得到两种情况:
我回显 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
但是当我使用 class 中的方法调用它时(这是唯一的 运行)是 here。最终,我试图获取文件列表和文件大小作为数组,文件是键,大小是值。
(评论多于答案,但我需要更多space)。
Sverri 提到的表达式中的大括号没有任何作用,只是令人困惑。别管他们了。
另外 $files[] .= $pathname;
看起来很奇怪。 $files[] = ...
追加到数组,.=
追加到字符串。同时做这两件事是没有意义的。 PHP 似乎忽略了 .=
。也拿出来吧
所以
if (!$fileinfo->isFile()) continue;{
$files[] .= $pathname;
}
变成
if (!$fileinfo->isFile()) continue;
$files[] = $pathname;
这很可能无法解决您的问题。数组是否包含正确的数据?