【问题标题】:How can I access a script out of root by http protocol?如何通过 http 协议从 root 访问脚本?
【发布时间】:2016-08-22 12:37:18
【问题描述】:

我有这个文件夹结构:

\out
    \script.php
\root
    \include
        \calculator.php

我需要将该脚本写入\calculator.php。我怎样才能包含它?

// calculator.php
require( what path ? );
 ..

注意:我可以通过这个路径包含它:../out/script.php。但我还需要将参数传递给script.php。所以我想要这样的东西:

.. what path/script.php?arg=value

如你所知,因为我需要传递一个参数,所以我必须使用http 协议。我只想知道,如何同时使用http../?像这样的:

http://../out/script.php?arg=value

【问题讨论】:

  • 不,您不能通过网络浏览器访问根目录及其子文件夹之外的任何内容;尽管您可以在 Web 服务器中配置一个别名,以允许您访问其他文件夹
  • @MarkBaker 实际上我可以像../out/script.php 这样访问根目录之外的东西。但我不知道如何既传递参​​数又使用../
  • 技术上可以在覆盖请求参数后包含一个本地脚本。 很少推荐。
  • 您的网络服务器应该阻止您通过网络浏览器访问根目录及其子文件夹之外的任何内容....否则,乔黑客将能够访问服务器上的任何文件,包括密码文件,那就是一个严重的安全漏洞,会彻底破坏 www
  • @MarkBaker 看,我已经放弃了this 方法。这很糟糕吗?

标签: php


【解决方案1】:

包含脚本时不需要传递参数,因为它与第一个脚本加载到相同的范围内。这意味着脚本 ../out/script.php 可以通过 $_GET 变量访问查询字符串参数:

$_GET['arg']

此外,您在计算器中定义的任何变量都将在 script.php 中可用

【讨论】:

    【解决方案2】:

    在包含文件之前,您可以在 $_GET 超全局变量中实例化一些变量,即

    $_GET['arg'] = "value";
    require('../../out/script.php');
    

    但在我看来,这并不理想。

    如果我是你,我会使用一个无聊的 'ol 全局变量(假设你从全局范围开始):

    $arg = 'value';
    require('../../out/script.php');
    

    然后像任何其他变量一样简单地使用它(尽管可能需要进行一些健全性检查):

    if (!isset($arg)) {
        die('Oh my! $arg is not set! Error! Danger!');
    }
    
    do_something_with($arg);
    

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 2013-05-18
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2011-12-12
      • 2018-08-09
      相关资源
      最近更新 更多