Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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 检查站点是否在iframe内_Php_Iframe - Fatal编程技术网

Php 检查站点是否在iframe内

Php 检查站点是否在iframe内,php,iframe,Php,Iframe,任何人都知道是否可以使用PHP检查站点是否位于iframe中 我知道使用javascript是可能的,但我找不到任何使用PHP的示例?不,PHP是服务器端。它无法知道它是否在iframe中 PHP从不在iframe中。PHP在服务器端执行,并生成HTML、Javascript或文本等输出。PHP生成的输出可能产生或驻留在iframe中,但绝不是PHP本身 附加细节 关于您在评论中添加的其他详细信息(您希望区分直接发送到站点的请求和通过Facebook应用程序发送的请求),您可以使用以下几种技术

任何人都知道是否可以使用PHP检查站点是否位于iframe中


我知道使用javascript是可能的,但我找不到任何使用PHP的示例?

不,PHP是服务器端。它无法知道它是否在iframe中

PHP从不在iframe中。PHP在服务器端执行,并生成HTML、Javascript或文本等输出。PHP生成的输出可能产生或驻留在iframe中,但绝不是PHP本身


附加细节

关于您在评论中添加的其他详细信息(您希望区分直接发送到站点的请求和通过Facebook应用程序发送的请求),您可以使用以下几种技术:

  • $\u服务器['HTTP\u REFERER']:
  • 您可以检查推荐人以确定请求是否来自Facebook URL、您自己网站上的另一个页面、第三方网站,或者是直接流量。此方法并非万无一失,但可能提供比应用程序当前接收到的信息更多的信息

  • 单独的URL
  • 您可以为在您的站点和Facebook版本上运行的应用程序创建单独的URL。使用
    $\u服务器['REQUEST\u URI']
    ,您可以轻松检测您的应用程序是通过'yoursite.com/fbapp'还是'yoursite.com/localapp'访问的。两个URL都可以通过Apache的mod_rewrite或您选择的别名解决方案引用相同的脚本

  • URL参数
  • 这种方法可能是最容易实现的。如果在向Facebook提供应用程序URL时可以提供URL参数,只需添加一个参数即可。例如:

    ?access_method=facebook
    

    在PHP中,您可以轻松检查
    access\u方法
    参数的存在和值,并根据需要采取措施。

    您可以检查
    $\u服务器['HTTP\u REFERER']
    。这是不可信的,因为浏览器并不总是提供这些信息。另外,
    HTTP\u REFERER
    并不总是指iframe,但对于特定情况,这是很好的。

    对于使用此旧线程的任何人来说:有一种非常简单的方法可以在PHP中检查页面是否通过iframe加载

    <?php
    if(!$_SERVER['HTTP_REFERER'] == 'YourFrameURL') {
        // Site is NOT loaded from iframe
        die('Please load this page from YourFrameURL');
    }
    else {
        // Site IS loaded from iframe: display content
    ?>
    
    if( isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] == 'iframe' ) {}
    

    谢谢你的回答。这是因为人们可以通过使用我的应用程序。facebook应用程序或直接在浏览器中。因此,如果用户在facebook上的我的应用程序上,链接应该与直接通过浏览器而不是通过facebook在我的网站上的链接有所不同。知道我该怎么做吗?@Simon这里的方法是使用javascript检查页面是否加载在iframe中。请在此处阅读更多信息:@antide需要与某种PHP@Simon很抱歉,在PHP中无法获得快速、直接和准确的解决方案。最好的做法是使用javascript来处理这个问题。@Ancide yearh,这有点烦人$\u服务器['HTTP\u REFERER']在facebook上输出正确的url,但在我的网站上直接通过浏览器,我得到以下错误:未定义索引:HTTP\u REFERER
    $\u服务器['HTTP\u REFERER']
    在您直接访问该网站时未设置。您可以使用以下方法对其进行测试:
    if(isset($\u SERVER['HTTP\u REFERER']){…}
    。看起来该解决方案可行。我将在IE中测试它并返回!:-)@Simon同样,我建议检查
    HTTP\u REFERER
    是否是facebook中的一个特定URL,因为如果其他网站有到您网站的直接链接,并且有人来到您的网站抛出此链接,那么
    HTTP\u REFERER
    将等于用户来自的URL。是的,没错。如果我是通过facebook来的。一个链接,url将是apps.facebook.com/application,因为脚本认为我是通过facebook使用该应用程序的:实际上:
    if(isset($\u SERVER['HTTP\u REFERER'])和&$\u SERVER['HTTP\u REFERER'])!='http://YourFrameURL“){}
    检查referer是否已设置且与您的urlGood解决方案不同!与Wordpress插件完美配合,我不希望脚本在iFrame中排队。谢谢。我找不到iframe是该字段有效值的文档,在sec fetch dest头上也找不到太多其他值。您是否有关于此工作方式的链接或资源?每个浏览器都支持它吗?它在chrome上工作,完全符合我的需要,但我只是想澄清一下它的浏览器支持。Geilt,我也找不到任何关于这方面的信息。因此,我只需通过代理或直接,使用yes/no Adguard(以及类似的方法)比较所有带有和不带iFrame的$_服务器。许多$\u服务器变量与其他值一起存在。唯一一个总是在iFrame中显示给我们的(无论连接如何)是$\u服务器['HTTP\u SEC\u FETCH\u DEST']。IE、Firefox和Safari不支持此标题-
    if( isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] == 'iframe' ) {}