为了账号安全,请及时绑定邮箱和手机立即绑定

比较 PHP 中的路径

比较 PHP 中的路径

PHP
宝慕林4294392 2021-12-24 15:36:51
如果我的网站存储在服务器上这样的地方:/home/usr1/public_html/其中映射到:http://example.com/但后来我在这个网址的文件中:http://example.com/section1/page1.php我想包含一个保存在以下位置的文件:/home/usr1/public_html/includes/common.phpPHP 中是否有一个简单的函数可以用来将一个路径与另一个路径(例如当前路径)进行比较,以获取从另一个路径获取所需的相对字符串?例如:$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是否存在这样的特征或功能(或类似的)?
查看完整描述

2 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

如果你想做一个包含并且已经有了绝对路径,我建议使用它并且不关心相对路径。试图找出本地文件包含的相对路径只会增加更多步骤和过程失败的可能性。或者有什么理由需要我缺少的相对路径?

如果您不知道完整的绝对路径,但知道项目基文件夹的相对路径,请保存项目基文件夹的绝对路径一次,然后将相对路径连接到您的文件。

我还建议不要将您的包含放在公共 HTML 文件夹中。出于安全原因,您希望它们驻留在无法通过 HTTP 访问的文件夹中,以防止在 Web 服务器配置错误的情况下可能暴露源代码或 CSRF。

/home/usr1/includes/common.php

这样的文件将访问本地包含或其他文件操作,因为你的网络服务器不会成为这样的文件

http://example.com/../includes/common.php


查看完整回答
反对 回复 2021-12-24
?
侃侃无极

TA贡献2051条经验 获得超10个赞

实际上,您不需要像这样获取 abs 路径


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

首先,您需要将域的所有请求发送到一个文件(例如名称 controller.php),并且该文件位于您的根方向:


/home/usr1/public_html/controller.php

将请求发送到一个文件:


1 对于 Apache(在根目录.htacces 中):

RewriteEngine on


RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d


RewriteRule ^(.+)$ 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/blabla

echo $_GET['rout']; //  '/blabla'

// if request  == http://example.com/blabla/dabladabla

echo $_GET['rout']; //  '/blabla/dabladabla'

后取决于你的$_GET['rout']; 您可以控制哪个文件可以包含您的示例(controller.php):



include "includes/common.php";


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号