代码之家  ›  专栏  ›  技术社区  ›  Fostah

保持URL字符串的PHP变量

php
  •  -1
  • Fostah  · 技术社区  · 15 年前

    我不是一个PHP开发人员,但我目前正在开发一个内部工具,这样我的团队就可以利用它的优点。有一个索引文件看起来是这样的:

    require( ($loader_path = "../../loaderapi/") . "loader.php" );
    

    这样使用,$loader_path会将其值保留在loader.php文件中。

    但是,我们希望从团队的服务器访问此API,如下所示:

    require( ($loader_path = "http://remoteservername/loaderapi/") . "loader.php" );
    

    在这种情况下,$loader_path变量不保留其值。我猜这和它是一个完整的URL有关,但我可能错了。你知道我怎样才能做到这一点,或者为什么我不能这样做吗?

    6 回复  |  直到 15 年前
        1
  •  3
  •   Gumbo    15 年前

    如果通过HTTP访问PHP脚本,则只返回该脚本的输出。因此,脚本将尝试解释该远程PHP脚本的输出,而不是其源代码。

    如果文件系统上存在连接,您可能需要尝试 file://remoteservername/loaderapi/loader.php 相反。

        2
  •  0
  •   dcousineau    15 年前

    不不不不不不不不不不不不不不不不不不不!

    远程文件包含是一个坏主意,可能是 这个 最大的安全漏洞。即使对于一个内部工具来说,这也是不可接受的,即使仅仅是因为产生了坏习惯。

    默认情况下,php禁用此行为 ,并且有一个广泛的推动,使其能够在URL上执行include 完全地 从PHP中剥离(因为没有令人信服的理由拥有这种能力)。

    如果要加载共享资源,请浏览共享文件系统驱动器(如中所述,不要使用 http , ftp 什么都没有 file:// )或者更好地分发 loader.php 通过版本控制系统。从单个文件资源加载将使您在将来遇到问题,例如新的dev覆盖 加载器.php 破坏别人的密码。

        3
  •  0
  •   Matt Poush    15 年前

    这两者之间不应该有任何真正的区别;您要做的是定义$loader_路径,连接loader.php,并将其传递给required。

    但是:您正在一个require的范围内定义变量,这将停止require脚本的处理失败。

    尝试将“require”替换为“include”,看看它是否保留变量。

    另外,请注意,如果您在Windows计算机上运行PHP服务器,且PHP版本低于4.3.0,则“require”和“include”都不能处理远程文件: http://us.php.net/manual/en/function.include.php

    另外,如前所述,如果.php驻留在解析php的远程服务器上,您将不会得到代码,而是得到远程服务器处理代码的结果。您要么将它作为一个.txt文件提供服务,要么编写一个在处理时输出有效PHP的PHP。

        4
  •  -1
  •   Doug Hays    15 年前

    您是否尝试将其分为两行:

    $loader_path = "http://remoteservername/loaderapi/";
    require( $loader_path . "loader.php" );
    

    这样也更容易阅读。

        5
  •  -1
  •   Patrick Desjardins    15 年前

    只需将所有内容放在3行上即可简化代码读取:

    $loader_path = "http://remoteservername/loaderapi/";
    $page = "loader.php";
    require($loader_path . $page );
    

    更清晰,更有效。

        6
  •  -1
  •   GSto    15 年前

    为什么不把它放在需求声明之上呢?会使阅读变得更容易。

    <?php
      $loader_path = "../../folderName/"
      require($loader_path . "filename")
     ?>