从另一个PHP文件运行一个php文件,就像我直接从浏览器中打开它一样(相对路径问题)

乔纳森·菲利普·钱伯斯

假设我有一个做重要事情的PHP文件。

doAllTheThings.php:

<?php
    include '../importantThing1.php';
    include '../importantThing2.php';
    include '../importantThing3.php';
    //lots more complicated code below

我们还假设我在Web浏览器中输入地址,这花了半分钟,但是所有事情都完成了,众所周知,太好了,让我们不要搞乱它。(有很多合理的理由不去使用它。也许我没有写过,也不了解它。也许我没有访问它的权限。也许这是一个紧急补丁,并且没有时间更新和测试每个包含路径。)

现在假设我希望用户能够做一些可以导致代码运行的事情。

customerInterface.php:

<?php
    //lots more complicated code above
    if(doTheThings){
        include '../../things/important/doAllTheThings.php';
    }

它可以运行,但是现在相对路径不起作用。ImportantThing链接已断开。没有重要的事情完成。

如何执行“ doAllTheThings.php”,使其行为与直接在浏览器地址栏中键入地址一样?(无需更改目录结构,文件位置或“ doAllTheThings.php”)

将B.

假设没有正在运行的客户端代码,doAllTheThings.php并且您知道的路径doAllTheThings.php

主要问题是如何include解析嵌套include文件中的路径

如果在中找不到该文件include_pathinclude则最终将在失败之前入调用脚本的自身目录当前工作目录[原文]

在这种情况下,调用脚本为customInterface.php

作为在include做出决议从执行的脚本文件的当前工作目录的相对路径,最简单的方法来规避这一问题并作出调用脚本的行为,如果你执行的doAllTheThings.php直接,你可以使用chdir,以改变当前的工作目录。

chdir https://3v4l.org/D0Tn6

<?php
    //...

    if (true) {
        //check to make sure doAllTheThings.php actually exists and retrieve the absolute path
        if (!$doAllThings = realpath('../../things/important/doAllTheThings.php')) {
           throw new \RuntimeException('Unable to find do all things');
        }

        //change working directory to the same as doAllTheThings.php
        chdir(dirname($doAllThings));

        //include doAllTheThings from the new current working directory
        include $doAllThings;

        //change the working directory back to this file's directory
        chdir(__DIR__);
    }

    //...
?>

包括__DIR__dirname(__FILE__)

但是,如果可能的话,我强烈建议使用绝对路径,方法是包括根路径,__DIR__或者dirname(__FILE__)在任何相对include路径之后附加PHP在PHP <5.3中这将消除使用chdir()作为变通办法的需要,并允许PHP解析要包含的正确路径,同时还允许整个应用程序在从其执行脚本的任何系统上运行。

<?php
    include __DIR__ . '/../importantThing1.php';
    include __DIR__ . '/../importantThing2.php';
    include __DIR__ . '/../importantThing3.php';

set_include_path

另一种更复杂的方法是使用来指定包含文件目录set_include_path()但是,如果您不知道嵌套的包含脚本所在的目录,则需要您解析包含文件以进行检查。因此,尽管可行,但我不推荐这种方法。

<?php
if ($doAllThings = realpath('../../things/important/doAllTheThings.php') {
    //retrieve the directory names of the scripts to be included
    $basePath = dirname($doAllThings);
    $subPath = dirname($basePath);

    //add the directories to the include path
    $include_path = set_include_path(get_include_path() . PATH_SEPARATOR . $basePath . PATH_SEPARATOR . $subPath);

    include $doAllThings;

    //restore the include path
    set_include_path($include_path);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用相对路径以建立到另一个文件的链接时出现问题

来自分类Dev

Javascript:将一个js文件加载到另一个js文件中,就像一个文件一样

来自分类Dev

使用相对路径从另一个 py 脚本运行 py 脚本

来自分类Dev

从另一个文件夹执行Node脚本时的相对路径错误

来自分类Dev

当运行5分钟的php脚本时,我无法在另一个浏览器选项卡中访问此文件

来自分类Dev

在Java中查找从一个URL到另一个URL的相对路径

来自分类Dev

无法使用相对路径重定向到另一个页面

来自分类Dev

无法使用相对路径重定向到另一个页面

来自分类Dev

如何从另一个目录导入具有相对路径的 Python 模块?

来自分类Dev

像我使用MATLAB一样在Python Spyder中打开一个函数

来自分类Dev

像我使用MATLAB一样在Python Spyder中打开一个函数

来自分类Dev

从远程计算机角度看的文件夹浏览器对话框,就像一个SSMS使用的一样

来自分类Dev

如何在浏览器内部未运行的另一个JavaScript文件中包含一个JavaScript文件?

来自分类Dev

通过相对路径中的守护程序systemd启动一个dotnet核心可执行文件

来自分类Dev

运行Javascript + PHP形成另一个文件

来自分类Dev

运行Javascript + PHP形成另一个文件

来自分类Dev

相对于bat文件中另一个文件的路径

来自分类Dev

VBA将一个对象与另一个对象用字符串修剪(与FSO.Getfolder有关)基本上以文件的相对路径结尾

来自分类Dev

VBA将一个对象与另一个对象用字符串修剪(与FSO.Getfolder有关)基本上以文件的相对路径结尾

来自分类Dev

如何打开从 pwa(在 android shell 中)到另一个浏览器的链接

来自分类Dev

打开位于另一个文件Powershell中的文件(从文件路径)

来自分类Dev

在PHP类中包含另一个文件

来自分类Dev

从另一个 php 文件中检索数据

来自分类Dev

检查浏览器宽度并执行一个Javascript文件并覆盖另一个Javascript

来自分类Dev

在循环内的一个php中执行另一个php文件

来自分类Dev

Hana:如何创建一个表类型,就像另一个表的类型一样?

来自分类Dev

如何在另一个目录中执行* .cmd,就像它在当前目录中运行一样?

来自分类Dev

如何在一个类中定义/声明一个变量,以便可以在PHP的另一个文件中访问它?

来自分类Dev

我的模态组件位于其他文件中,我正在尝试从另一个组件中打开它

Related 相关文章

  1. 1

    使用相对路径以建立到另一个文件的链接时出现问题

  2. 2

    Javascript:将一个js文件加载到另一个js文件中,就像一个文件一样

  3. 3

    使用相对路径从另一个 py 脚本运行 py 脚本

  4. 4

    从另一个文件夹执行Node脚本时的相对路径错误

  5. 5

    当运行5分钟的php脚本时,我无法在另一个浏览器选项卡中访问此文件

  6. 6

    在Java中查找从一个URL到另一个URL的相对路径

  7. 7

    无法使用相对路径重定向到另一个页面

  8. 8

    无法使用相对路径重定向到另一个页面

  9. 9

    如何从另一个目录导入具有相对路径的 Python 模块?

  10. 10

    像我使用MATLAB一样在Python Spyder中打开一个函数

  11. 11

    像我使用MATLAB一样在Python Spyder中打开一个函数

  12. 12

    从远程计算机角度看的文件夹浏览器对话框,就像一个SSMS使用的一样

  13. 13

    如何在浏览器内部未运行的另一个JavaScript文件中包含一个JavaScript文件?

  14. 14

    通过相对路径中的守护程序systemd启动一个dotnet核心可执行文件

  15. 15

    运行Javascript + PHP形成另一个文件

  16. 16

    运行Javascript + PHP形成另一个文件

  17. 17

    相对于bat文件中另一个文件的路径

  18. 18

    VBA将一个对象与另一个对象用字符串修剪(与FSO.Getfolder有关)基本上以文件的相对路径结尾

  19. 19

    VBA将一个对象与另一个对象用字符串修剪(与FSO.Getfolder有关)基本上以文件的相对路径结尾

  20. 20

    如何打开从 pwa(在 android shell 中)到另一个浏览器的链接

  21. 21

    打开位于另一个文件Powershell中的文件(从文件路径)

  22. 22

    在PHP类中包含另一个文件

  23. 23

    从另一个 php 文件中检索数据

  24. 24

    检查浏览器宽度并执行一个Javascript文件并覆盖另一个Javascript

  25. 25

    在循环内的一个php中执行另一个php文件

  26. 26

    Hana:如何创建一个表类型,就像另一个表的类型一样?

  27. 27

    如何在另一个目录中执行* .cmd,就像它在当前目录中运行一样?

  28. 28

    如何在一个类中定义/声明一个变量,以便可以在PHP的另一个文件中访问它?

  29. 29

    我的模态组件位于其他文件中,我正在尝试从另一个组件中打开它

热门标签

归档