【问题标题】:curl does not give output as string instead of arraycurl 不会将输出作为字符串而不是数组给出
【发布时间】:2018-03-25 10:59:51
【问题描述】:

我有 2 个服务器 serverA 和 serverB。

服务器 A 有以下代码

$dir = "/boot";
echo "<pre>";
print_r(listFolders($dir));
function listFolders($dir)
{
   $dh = scandir($dir);
   $return = array();
   foreach ($dh as $folder)
   {
       if ($folder != '.' && $folder != '..')
       {
           if (is_dir($dir . '/' . $folder))
           {
               $return[] = array($folder => listFolders($dir . '/' . $folder));
           }
       }
   }
   return $return;

这将使我在 serverA 中以数组形式输出

但是当我从 serverB 用户 curl 时,它会以字符串形式输出。

如何从 serverB 获取输出为数组?

我的输出显示为

Array
(
    [0] => Array
        (
            [efi] => Array
                (
                )    
        )    
    [1] => Array
        (
            [grub] => Array
                (
                    [0] => Array
                        (
                            [fonts] => Array
                                (
                                )    
                        )    
                    [1] => Array
                        (
                            [i386-pc] => Array
                                (
                                )    
                        )    
                    [2] => Array
                        (
                            [locale] => Array
                                (
                                )    
                        )    
                    [3] => Array
                        (
                            [x86_64-efi] => Array
                                (
                                )    
                        )    
                )    
        )    
)

但上面的输出显示为字符串而不是数组。

【问题讨论】:

  • 等等,serverA 和 serverB 都是 Web 服务器,对吧?并且您正在尝试使用 curl 将数据从 serverA 获取到 serverB?

标签: php arrays curl


【解决方案1】:

使 serverA 使用 json_encode() 而不是 print_r() 以 JSON 格式打印您的数据:

echo json_encode(listFolders($dir));

然后可以使用json_decode()将cURL的输出(将是一个JSON数组STRING)转换为数组:

$dir_array = json_decode($stringReturnedByCURL);

cURL 是一个 HTTP 客户端。它唯一做的就是返回包含 HTML 网页的字符串。在此网页中,您可以放置​​该 JSON 数组。

这样,您使用 HTTP 将 以 JSON 编码 的数据从服务器 A 传输到服务器 B。 您问题中页面的输出只是以print_r 格式打印数组,它没有解码该格式的功能。

警告:您只需要打印 JSON ,删除 serverB 中 json_decode() 的 echo "&lt;pre&gt;"; 会在他的代码中发现意外的 &lt;pre&gt;必须解码。

【讨论】:

    【解决方案2】:

    尝试以 JSON 格式返回数组。

    例如。 return json_encode($return)

    编辑 1

    如果您想传输一些此类数据,那么您必须以 JSON 格式或 xml 格式进行传输

    【讨论】:

    • 我使用下面的命令来检索输出 $data=sudo /usr/bin/curl --silent -m 15 http://$serveraip/treeview.php;这会将输出显示为字符串而不是数组。
    • 如果您使用 curl 检索结果,那么它将始终为您提供字符串作为输出,除非您更改它的标题类型
    • 显示该标题类型
    • 是content-type 人。据我所知,没有content-type 会将内容作为 PHP 数组返回
    • Dhaval 是正确的。将来自 treeview.php 的响应返回为 json_encode($data);在获取它的服务器上,您可以使用 $data = json_decode($result)。您不能将 php 对象作为 php 数组从一台服务器发送到另一台服务器
    猜你喜欢
    • 2017-05-25
    • 1970-01-01
    • 2017-12-21
    • 2020-09-03
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    相关资源
    最近更新 更多