猿问

比较 PHP 中的路径

如果我的网站存储在服务器上这样的地方:


/home/usr1/public_html/

其中映射到:


http://example.com/

但后来我在这个网址的文件中:


http://example.com/section1/page1.php

我想包含一个保存在以下位置的文件:


/home/usr1/public_html/includes/common.php

PHP 中是否有一个简单的函数可以用来将一个路径与另一个路径(例如当前路径)进行比较,以获取从另一个路径获取所需的相对字符串?


例如:


$thisPath = dirname(__FILE__);

// $thisPath is now equal to:

// /home/usr1/public_html/section1/page1.php


$relPath = comparePaths($thisPath, '/home/usr1/public_html/includes/common.php');

// $relPath is now equal to:

// ../includes/common.php


$relPath2 = comparePaths($thisPath, '/home/usr1/public_html/section1/part2/anotherpage.php');

// $relPath2 is now equal to:

// part2/anotherpage.php

是否存在这样的特征或功能(或类似的)?


宝慕林4294392
浏览 146回答 2
2回答

阿晨1998

如果你想做一个包含并且已经有了绝对路径,我建议使用它并且不关心相对路径。试图找出本地文件包含的相对路径只会增加更多步骤和过程失败的可能性。或者有什么理由需要我缺少的相对路径?如果您不知道完整的绝对路径,但知道项目基文件夹的相对路径,请保存项目基文件夹的绝对路径一次,然后将相对路径连接到您的文件。我还建议不要将您的包含放在公共 HTML 文件夹中。出于安全原因,您希望它们驻留在无法通过 HTTP 访问的文件夹中,以防止在 Web 服务器配置错误的情况下可能暴露源代码或 CSRF。/home/usr1/includes/common.php这样的文件将只访问本地包含或其他文件操作,因为你的网络服务器不会成为这样的文件http://example.com/../includes/common.php

侃侃无极

实际上,您不需要像这样获取 abs 路径/home/usr1/public_html/includes/common.php首先,您需要将域的所有请求发送到一个文件(例如名称 controller.php),并且该文件位于您的根方向:/home/usr1/public_html/controller.php将请求发送到一个文件:1 对于 Apache(在根目录.htacces 中):RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.+)$ controller.php?rout=$1 [QSA,L]2 对于 nginx(在这是我的服务器块:** nginx.conf ** 或sites-available/example.com.conf 中):server {    .    .    // Here your     .    .    location / {        if (!-e $request_filename){            rewrite ^(.*)$ /controller.php?rout=$1 break;        }    }}在那个controller.php 中需要之后创建 home url(root 与您的域):$link = "http" . ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "s" : null ) . "://" . $_SERVER['HTTP_HOST'];//$link - link is your domain // $link == http://example.com/在您的controller.php之后,您的域之后有一个所有请求// if request  == http://example.com/blablaecho $_GET['rout']; //  '/blabla'// if request  == http://example.com/blabla/dabladablaecho $_GET['rout']; //  '/blabla/dabladabla'后取决于你的$_GET['rout']; 您可以控制哪个文件可以包含您的示例(controller.php):include "includes/common.php";
随时随地看视频慕课网APP
我要回答