【问题标题】:how to share perl array of hash reference with php如何与php共享哈希引用的perl数组
【发布时间】:2014-02-25 01:57:19
【问题描述】:

我需要将哈希引用数组传递给 php,以便 php 可以使用该数据。

我在做什么?

我正在使用 PHP::Serialize 模块序列化 perl 哈希引用数组并将其存储到数据库中。但是在阅读时我遇到了问题。

#!/usr/local/bin/perl
use PHP::Serialization qw(serialize unserialize);
my @rss_feed_result = ({
                            'data'=> 'here',
                            'id'=> 1,
                            },
                        );

my $rss_feed_result = serialize(\@rss_feed_result);
//storing it to database then

现在我通过反序列化读取 php 中的相同数据,并在反序列化后低于输出,这是不正确的。

<?php
.....read data from database into $perl_serialize_data
$perl_serialize_data = "HERE PERL SERIALIZE DATA";
print_r(unserialize($perl_serialize_data));
?>

下面是输出。

(
    [0] => {
    [1] => 'data'=>
    [2] => 'here',
    [3] => 'id'=>
    [4] => 1,
    [5] => },
)

如何解决这个问题?

【问题讨论】:

  • 您还没有展示如何在 PHP 中反序列化数据。
  • 只需将 perl 序列化的数据转换成 php 中的字符串并使用 unserialize 函数即可。
  • 是的,你已经说过了。你还没有展示你是如何做到的。提问时不要描述你的代码做了什么;这迫使人们猜测你在做什么,他们可能会猜错。相反,显示您使用的确切代码。
  • @ThisSuitIsBlackNot - 我希望你现在没事。
  • 这次分享成功了吗?

标签: php perl serialization


【解决方案1】:

如果您使用use warnings,您会收到以下警告:

Possible attempt to separate words with commas at foo.pl line 1.

使用qw(),您试图将该数据结构引用为单个单词。结果在 Perl 中如下所示:

("{", "'data'=>", "'here',", "'id'=>", "1,", "},")

但你不想要一个列表。你想要数据结构。相反,您可能想要这样做:

use strict;
use warnings;
use PHP::Serialization qw(serialize unserialize);
my $rss_feed_result = {
  'data' => 'here',
  'id'   => 1,
};

my $php = serialize($rss_feed_result);

如果你有这些哈希引用的列表,你仍然可以使用你的数组。

my @rss_feed_results = (
  {
    'data' => 'here',
    'id'   => 1,
  },
  {
    'data' => 'there',
    'id'   => 2,
  },
  {
    'data' => 'over yonder',
    'id'   => 3,
  },
);
my $php = serialize(\@rss_feed_results);

【讨论】:

  • 抱歉代码错误。我已经纠正了。实际上,我面临着取消 perl 在 PHP 中完成的序列化数据的问题。
  • 尝试反序列化这个序列化数据 "my $php = serialize(\@rss_feed_results);"在 php.Here 只有我面临问题;在 php 中读取序列化数据。
  • 您的问题在于 Perl 中的序列化。您传递的数据结构是错误的。摆脱qw。它用于单词列表,而不是哈希引用。
  • 我已经更正了它,如之前的注释中所述。请考虑该数组是正确的,但具有哈希引用并将其序列化。然后尝试使用 php 对其进行反序列化。如果您得到正确的数据结构,请告诉我
【解决方案2】:

您的 RSS 提要解析器会返回一个哈希值,但您使用

my @rss_feed_result = qw(
   {
      'data'=> 'here',
      'id'=> 1,
   },
);

相同
my @rss_feed_result = (split ' ', q(
   {
      'data'=> 'here',
      'id'=> 1,
   },
));

如果您确实有对哈希的引用,它可能会正常工作。

my @rss_feed_result = (
   {
      'data'=> 'here',
      'id'=> 1,
   }
);

(括号可选。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 2011-07-26
    • 2016-06-06
    • 1970-01-01
    • 2012-06-12
    • 2011-04-11
    • 1970-01-01
    • 2011-04-20
    相关资源
    最近更新 更多