【问题标题】:PHP json_encode fails from https [closed]PHP json_encode 从 https 失败 [关闭]
【发布时间】:2012-12-20 16:57:06
【问题描述】:

当用作安全页面并调用 json_encode() 时,我的 php 脚本会失败,否则不会。该代码是从一个从 XHR 调用的更大脚本中提炼出来的。 PHP 版本 5.2.0., Apache/1.3.34 (Unix)。

问题的来源:PHP、我的 ISP 还是我?

要演示,请以 4 种方式调用此脚本:

https://www.camdenac.com/test_json_encode.php?encode=0 => 有效,安全协议,不调用 json_encode()。
https://www.camdenac.com/test_json_encode.php?encode=1 => 失败,安全协议,调用 json_encode()。

在第一种情况下,您会看到一些 html,然后 php 会回显结果。 在第二种情况下,您只会看到 html;没有php输出。

/*
Try these 2 links also from non-secure protocol.
http://www.camdenac.com/test_json_encode.php?encode=0  => works.
http://www.camdenac.com/test_json_encode.php?encode=1  => works.
*/

<?php
$encode= 0;
if( isset($_GET['encode']) ){
    $encode= substr(trim($_GET['encode']),0,1);
}

$dummy= array(1,2,3,4,5);
$json="We did not call json_encode.";

if($encode){
    $json= json_encode($dummy);
}

echo '<p>IT WORKS!</p>';
echo '<p>Host protocol is: '.$_SERVER['HTTP_HOST'].'</p>';
echo '<p>Query string is: '.$_SERVER['argv'][0].'</p>';
echo '<p>HTTPS is: '.$_SERVER['HTTPS'].'</p>';
echo '<p>json encoding is: '.$json.'</p>';
echo '<p>Array dump follows:</p>';

var_dump($dummy);
?>

【问题讨论】:

  • 定义“失败”。怎么了?你有什么错误吗?你确定两个脚本是一样的吗?你确定 PHP 版本是一样的吗?
  • 等一下,最后 2 次测试的“工作,失败”是否反转?你var_dump($_GET)了吗?您是否有任何重写规则可能会破坏 https 请求的查询字符串?
  • json_encode 看起来与它没有任何关系。 $_GET 的内容如何根据​​使用的请求 URL 改变?也许将您的 $encode 转换为 (bool)。
  • @SheikhHeera 他在前两行重复了$json
  • @user1919378 你有它。什么PHP版本? json_encode() 在 5.2.something 之前不可用。您的服务器是否对 HTTPS 请求使用不同的 PHP 版本?听起来像是与您的托管支持讨论的事情。奇怪的情况....

标签: php https json


【解决方案1】:

我认为你的 php 版本太旧并且不包含 json_encode 函数。如果你想使用它,你可能需要更新你的 php 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多