【问题标题】:PHP include when a "root forward slash" precedes the included path like: "/folder/file.php"当“根正斜杠”位于包含路径之前时,PHP 包含:“/folder/file.php”
【发布时间】:2011-03-20 01:42:23
【问题描述】:

为了加载图像的css或javascript等文件,我学会了添加一些额外的安全性并在文件夹前面添加额外的/,确保这些文件是从从根路径开始的文件夹加载的病房:

例如/images/photo.jpg
例如/scripts/script.js e.g./layout/css.css`

现在,当我在 PHP 中执行相同的技巧时,文件似乎没有加载,然后添加了正斜杠!

<? include ("/folder/file.php"); ?>     // include this file

但是,当我删除路径前面的 / 时,一切正常,但 Dreamweaver 说它找不到文件!当我添加 / 时,dreamweaver 可以找到远程资产/文件,但是在运行该站点时,文件并没有很好地包含。

【问题讨论】:

  • 您的服务器操作系统会有所帮助;)

标签: php file directory dreamweaver


【解决方案1】:

PHP 的面向文件的函数(include、require、fopen、opendir 等)通常都希望处理文件系统路径。也就是说,本地服务器上的路径,无需通过 Web 服务器进行中介。

这并不是说你不能为函数提供完整的绝对 URL,但一般来说,如果你没有看起来像 url 的东西(protocol://host/path?query#fragment),它将被解释为本地文件系统中的内容。

因此,当您在包含路径前添加 / 时,它会被视为从本地文件系统顶部开始的绝对本地路径。

如果没有前导/,则将其视为相对路径,PHP 将遍历其包含路径以尝试根据include_path + file_to_include 查找文件。

【讨论】:

    【解决方案2】:

    / 开头的路径通常被解释为绝对路径(相对于环境)。因此,Dreamweaver 可能会将 root(即/)解释为项目的根路径,而 unix 服务器(以及在其上运行的 php)将路径解释为目录系统中的根.而在 HTTP 上,它通常是指当前域的文档根目录。

    最好的解决方案是简单地使用相对路径,即以. 开头的路径,例如../../folder/file.php

    【讨论】:

    • 非常感谢,虽然它对服务器没有帮助! ./../../../ 最终都没有包含该项目。似乎只有folder/file.php 有效?没有正斜杠...
    • @Sam:嗯,你当然需要指定正确的相对路径。所以如果当前文件在/xy/file.php,需要包含/folder/file.php,那么就需要使用../folder/file.php
    • 现在我明白你了... okidoki +1 然后配合澄清!短暂的启蒙 bbbbzbzzzzzzzzbbzbz :)
    【解决方案3】:

    如果你想包含一个我们认为的“本地 url 路径”的文件,常见的用法是:

     include("$_SERVER[DOCUMENT_ROOT]/folder/file.php");
    

    (这是完全有效的 PHP3 样式语法。但现在"{$_SERVER['DOCUMENT_ROOT']}" 更常见。但没有区别。)

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 2013-06-18
      • 2016-12-12
      • 2018-03-30
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      相关资源
      最近更新 更多