【问题标题】:MAMP localhost include and cookie setting functionalityMAMP localhost 包含和 cookie 设置功能
【发布时间】:2012-12-07 10:12:47
【问题描述】:

出于显而易见的原因,我正试图将我的网站移至离线状态,但我无法让 localhost PHP 函数正常工作。我的代码如下:

include "http://localhost:8888/mainbar.php?display=1";

如果我只有文件名,我可以包含该文件,但我需要通过 url 传递值,所以这不是一个选项。我已经研究了让它工作的其他方法,但使用 MAMP 的全部意义在于能够离线工作,然后上传改进。

接下来,我无法设置 cookie。这是我拥有的以下 cookie 代码:

$expire=time() + (14 * 24 * 60 * 60);
setcookie("user", "Conan", $expire, '/');

我也尝试使用 Chrome 设置 cookie,但无法这样做。如果无法做到,我会感到惊讶。

【问题讨论】:

  • 通常包括在本地文件上完成,而不是通过 Web 服务器。当您通过 http 包含时,发生的事情是 PHP 充当某种 Web 浏览器并向服务器发出第二个请求。这真的是你想做的吗?似乎您可能只想将变量传递给包含。 $display = 'foo'; 然后在包含中,$display 仍然是 foo。我觉得我错过了什么?这里似乎有一个糟糕的设计或对include 的误解。
  • 为什么不直接使用include 而不是echo file_get_contents('http://localhost:8888/mainbar.php?display=1')?除非它本身包含 php 代码,否则这是一个非常糟糕的主意。事实上,整件事是个坏主意,因为 mainbar.php 中的任何内容都应该在这段代码中调用。
  • 您在本地主机上的时间合适吗?
  • @Corbin 实际上配合使用完整的 url 是完全合法的。
  • @Pete 它是合法的,就像用鞋子敲钉子是合法的一样。你可以这样做,但这可能不是一个好主意。

标签: php cookies include localhost mamp


【解决方案1】:

应该只给包含文件路径,而不是 URL。

正确的用法如下所示: 包括“/path/to/file”

include "/var/www/html/yourappfolder/mainbar.php";

我看到您正在尝试将变量 ?display=1 传递给它。解决方案不是弄清楚如何使用 URL 参数加载文件,您真的想重新设计如何获取与 display 变量相对应的信息。

您要做的是改进软件设计并在某处创建单独的功能,例如:getMainBarData($display)。在您的 mainbar.php 文件中,您将调用此函数来获取当前的结果。在您使用包含的文件中,您可以包含包含新函数getMainBarData($display) 的文件,并直接调用它:getMainBarData(1)

所以基本上,你想创建一个函数,它既可以被mainbar.php 使用,也可以使用include 来创建这个文件。 2个页面可以使用的1个功能是您的最佳解决方案。

至于 cookie 问题.. 尝试不使用路径“/”.. 所以:

setcookie('user', 'Conan', $expire);

【讨论】:

  • 随机挑剔:使用硬编码的完整路径是等待发生的巨大痛苦。使用define() 基本路径、使用谨慎的相对路径或大量使用__DIR__ 都容易得多。 (不是你特别说他应该使用硬编码的完整路径,但是初学者很容易养成坏习惯:(.)
  • 我完全同意,我也这样做。为简单起见,如果这不是一个熟悉的概念,我不想添加任何额外的混淆层
【解决方案2】:

对于问题的第一部分,您需要启用 url_file_include。这被认为是一个巨大的安全风险,通常永远不应该使用它,因为它是糟糕设计的标志。为了使这项工作你只需要添加一个

allow_url_include=1

在您的 php.ini 中。 对于问题的后半部分,您的代码在我的 MAMP 安装上运行正常,因此您必须确保您对 setcookie 的调用在浏览器的任何输出(任何回显)之前。 此外,如果您要保存任何敏感信息,则应考虑不使用 cookie。

【讨论】:

  • 是的 - 这绝对是一种替代方案,但不是您刚刚考虑的。这是一个快速的捷径,而不是解决正确的软件设计,以及它带来的巨大安全风险。
猜你喜欢
  • 2016-11-03
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
相关资源
最近更新 更多