Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 允许设置页面框架,但不允许在其上显示';他自己的_Php_Apache_Iframe - Fatal编程技术网

Php 允许设置页面框架,但不允许在其上显示';他自己的

Php 允许设置页面框架,但不允许在其上显示';他自己的,php,apache,iframe,Php,Apache,Iframe,这是关于控制页面可以在哪些站点上构建的后续内容 我想使用接受的答案,但是当点击iframe中的链接时,引用者会被报告为承载框架内容的域。如果站点不在框架内,是否有服务器端方法防止其显示?(阿帕奇,php5) 以下是我想说的: 我的服务器生成了一些内容。我们希望与其他特定网站共享该内容。我们不希望此内容自行显示。如果可能的话,我不想依赖客户端脚本,因为它可以关闭。(将body标签或main wrapper div设置为display:none并没有真正的帮助,因为内容仍然在源代码中。)我认为服务器

这是关于控制页面可以在哪些站点上构建的后续内容

我想使用接受的答案,但是当点击iframe中的链接时,引用者会被报告为承载框架内容的域。如果站点不在框架内,是否有服务器端方法防止其显示?(阿帕奇,php5)

以下是我想说的:


我的服务器生成了一些内容。我们希望与其他特定网站共享该内容。我们不希望此内容自行显示。如果可能的话,我不想依赖客户端脚本,因为它可以关闭。(将body标签或main wrapper div设置为
display:none
并没有真正的帮助,因为内容仍然在源代码中。)

我认为服务器(或服务器端代码)不可能知道页面是否显示在iframe中。服务器提供页面请求,但不知道演示文稿

我认为最接近服务器端解决方案(PHP)的方法是检查
$server['HTTP\u REFERER']


如果您必须将对脚本的访问限制在一个框架内,那么您将需要客户端上的某些东西来检查演示文稿。在javascript中实现这一点的两个解决方案是和

我认为服务器(或服务器端代码)不可能知道页面是否显示在iframe中。服务器提供页面请求,但不知道演示文稿

我认为最接近服务器端解决方案(PHP)的方法是检查
$server['HTTP\u REFERER']


如果您必须将对脚本的访问限制在一个框架内,那么您将需要客户端上的某些东西来检查演示文稿。在javascript中实现这一点的两个解决方案是和

PHP不可能知道请求是否来自iframe内部,因为它将具有与在顶级窗口中发出的完全相同的形式

为什么不能使用includes?在这种情况下,有一个简单的解决方案:

if (strcmp(basename($_SERVER['SCRIPT_NAME']), basename(__FILE__)) === 0){
    header("location: index.php");
}
编辑:

我想说的是,使用iFrame,您无法控制服务器端的访问

让我们设想一下,您拥有自己的主页
index.php
,以及iframed页面,如
foo.php

执行
操作时,会向服务器发出一个新的HTTP请求,该请求与对
index.php
发出的请求几乎相同

使用includes,您只有一个请求。PHP服务器解析的请求的参数之一是脚本名。执行以下操作时:
GET/index.php HTT/1.1
,脚本名称将为
index.php


将我展示给您的代码放在包含的文件中会阻止它们被直接访问,您可以通过包含引用它们。

PHP不可能知道请求是否来自iframe内部,因为它的格式与在顶级窗口中发出的格式完全相同

为什么不能使用includes?在这种情况下,有一个简单的解决方案:

if (strcmp(basename($_SERVER['SCRIPT_NAME']), basename(__FILE__)) === 0){
    header("location: index.php");
}
编辑:

我想说的是,使用iFrame,您无法控制服务器端的访问

让我们设想一下,您拥有自己的主页
index.php
,以及iframed页面,如
foo.php

执行
操作时,会向服务器发出一个新的HTTP请求,该请求与对
index.php
发出的请求几乎相同

使用includes,您只有一个请求。PHP服务器解析的请求的参数之一是脚本名。执行以下操作时:
GET/index.php HTT/1.1
,脚本名称将为
index.php


将我展示给您的代码放在包含的文件中会阻止它们被直接访问,您可以通过包含引用它们。

我遇到了与此相同的问题:

$ref = $_SERVER['HTTP_REFERER'];
if($ref == '') {
exit;
}

iframe的referer是父窗口的url,因此,如果要iframe的页面没有referer,则不会加载,因此您需要

我遇到了与此相同的问题:

$ref = $_SERVER['HTTP_REFERER'];
if($ref == '') {
exit;
}

iframe的referer是父窗口的url,因此,如果要iframe的页面没有referer,则不会加载,因此您会得到想要的内容

。据我所知,服务器无法可靠地知道请求的上下文。您能否颠倒您链接的帖子上的条件?我的意思是,检查页面是否有一个窗口。父级,如果是,则显示其他显示禁止的错误?测试referer是否来自iframe所在的页面。如果没有,则加载它应该驻留的页面。@Reikyoshin我知道我可以在客户端检测到它。我正在寻找一种在HTML发送到客户端之前知道的方法。不过,我可能会想出一个ajax解决方案。。据我所知,没有可靠的方法让服务器知道所请求的上下文。你能不能把你链接的帖子上的条件颠倒过来?我的意思是,检查页面是否有一个窗口。父级,如果是,则显示其他显示禁止的错误?测试referer是否来自iframe所在的页面。如果没有,则加载它应该驻留的页面。@Reikyoshin我知道我可以在客户端检测到它。我正在寻找一种在HTML发送到客户端之前知道的方法。不过,我可能会想出一个ajax解决方案。。在我提问之前,我几乎得出了相同的结论,但希望其他人知道我忽略了什么。在我提问之前,我几乎得出了相同的结论,但希望其他人知道我忽略了什么。如果我遵循您代码的逻辑,那么它会与我试图做的完全相反。如果我没有遵循代码的逻辑,那么请详细说明