【问题标题】:PHP - passing unknown/large string values to scriptPHP - 将未知/大字符串值传递给脚本
【发布时间】:2013-07-03 16:33:09
【问题描述】:

我有一个 php 脚本 (listening.php) 监听任何入站 GET 请求。

目前,我只监听特定的GET 变量。所有其他变量都被忽略。

我在外部 url 上放置了一个简单的像素类型脚本:

<?php
 $url = $_SERVER['SCRIPT_URI'];
?>
<script src="http://mydomain.com/listening.php?page=1&url=<?php echo $url;?>"></script> 

这很好用。 我想传递更多信息,但我想传递数组中的所有 $_SERVER 变量。

我有几个选项,比如遍历数组,以及使用键/值构建 url 字符串。

但是,我更感兴趣的是将整个数组作为一个整体传递,并将其存储在 mysql 中的 Text 列中。

我知道通过 url 传递单个字符串的大小可能存在限制。

有没有人有一个关于最佳实践的好方法或想法? 就我个人而言,我希望通过 url 传递数组不是一个好主意,但我正在寻找想法。

【问题讨论】:

    标签: php url variables


    【解决方案1】:

    您可以对数组进行编码和序列化:

    <?php
    $url = $_SERVER['SCRIPT_URI'];
    $srv = base64_encode(serialize($_SERVER));
    ?>
    <script src="http://mydomain.com/listening.php?page=1&url=<?php echo $url;?>&srv=<?php echo $srv; ?>"></script>
    

    然后在监听脚本中,你做相反的事情:

    <?php
    $srv = unserialize(base64_decode($_GET['srv']));
    ?>
    

    但是,请记住,这些请求对 GET 长度有限制。

    话虽如此,您可以使用gzcompressgzuncompress

    $srv = base64_encode(gzcompress(serialize($_SERVER)));
    

    解压:

    <?php
    $srv = unserialize(base64_decode(gzuncompress($_GET['srv'])));
    ?>
    

    【讨论】:

    • 我做了一个测试,看起来gzdeflategzinflate 也可能是可行的选择。
    • 我喜欢您对数组进行编码和序列化的优化形式。我没有想到这一点,似乎是最可行的路线。
    • 根据一些研究和stackoverflow.com/questions/2659952/…,看来您可能可以使用它。你可能想从$_SERVER 中选择你想要的,只是为了缩短字符串的长度。但是,在我的测试中,$srv 最终只有大约 1200 个字符,包括压缩。
    猜你喜欢
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2015-06-07
    • 2016-09-15
    • 1970-01-01
    相关资源
    最近更新 更多