【问题标题】:PHP code returning empty in chrome and values in firefox, how do I investigate why?PHP代码在chrome中返回空,在firefox中返回值,我该如何调查原因?
【发布时间】:2016-06-02 13:36:33
【问题描述】:

我认为它应该是特定于服务器端的,这不应该引入依赖于浏览器的不同行为。

以下代码在 Firefox 中计算结果为 null,而它具有稍后处理到表中的数据。

$History = (isset($_SESSION['History']) ? $_SESSION['History'] : null); 

就像我做的一个快速测试

printf( "<p>Variable history%s", $History);

在 Firefox 中返回以下内容:

 Notice: Array to string conversion in /website/History.php on line 92
Variable historyArray 

虽然在 chrome 中它只是明显地返回 null:

 Variable history

为了澄清,我没有问题变量是一个数组(也就是说,上面只是一个调试类型测试)我有一个变量为空的问题。它仅在私有模式下在 Firefox 中可重现,但我不明白为什么在启用 cookie 时正常模式下的 chrome 有差异。

最初我使用的是 (!isset($_SESSION)) session_start();但使用那个或 session_start();不会改变这个结果。

【问题讨论】:

  • 您是否在 Chrome 中禁用了 cookie?
  • 在你的 chrome 中启用 cookie 然后它就可以工作了
  • cookies 已启用
  • var_dump($history) 看看会发生什么......它说你正在尝试将数组转换为字符串。如果数组中有超过 1 个索引,它可能会使 prinf 失败。 var_dump 将准确地告诉您从$history返回的内容
  • 这段代码错误删除if(!isset($SESSION))应该只是session_start()

标签: javascript php google-chrome firefox


【解决方案1】:

您目前正在尝试解决 2 个问题:会话发生了什么以及 $history 中发生了什么。你没有告诉我们后者是如何填充的。

调试任何 PHP 问题的第一步是确保启用错误报告或日志记录,并查看 PHP 是否发出任何错误。您在帖子中报告了警告意味着您已经涵盖了这一点。

对于会话,因为它们是持久的,您应该创建一个小脚本来重置当前会话 - 然后您可以通过在浏览器中访问它来将会话恢复到已知状态,例如

<?php
error_reportling(E_ALL);
session_start();
print "<pre>" . var_export($_SESSION, true) . "</pre>";
if (count($_GET)) {
    $_SESSION=array();
    print "session reset";
}

您还应该使用一种工具,该工具允许您查看请求和响应标头,以便您可以轻松检查缓存指令和 cookie 的名称/值等内容。

最后,这里的问题似乎与 $_SESSION['History'] 的数量有关,但您应该使用基于会话的简单脚本来检查:

<?php
session_start();
if (!$_SESSION['test']) {
   $_SESSION['test']=1;
}
print "iteration: " . $_SESSION['test']++;

一旦您很高兴会话处理与问题无关,并且您没有看到之前调试步骤的后果。看看如何填充 $_SESSION['History'](提示,使用 var_export($x, true) 或 serialize($x) 而不仅仅是 print/printf 来查看值)。

【讨论】:

    猜你喜欢
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多