簡體   English   中英

PHP包含文件的路徑

[英]PHP Path to Include Files

我有一個帶有index.php的網站。 index.php有許多包含文件,例如

 <?php include_once('scripts/php/index_mainImageJoin.php');?>

我從根目錄創建了一個名為“ extrapages”的新文件夾,並將在其中具有包含與該站點有關的信息的頁面。 我已經像上面一樣添加了include_once文件,並更改了路徑,這些都很好。

我發現的問題是包含文件中的路徑失敗。 例如:如果圖像或其他包含文件在包含文件中,則從“ extrapages”文件夾運行時,它將失敗。 路徑問題。

有解決這個問題的好方法嗎? 是否可以將“擴展名”下頁面的站點根目錄(www)的路徑更改/設置為一個文件夾?

我可以將這些頁面移到根目錄上,並且它們可以正常運行,但我真的不希望網站根目錄上的所有內容雜亂無章。

任何想法和想法

解決任何路徑問題的關鍵稱為絕對路徑

  • 在為您的網站(包括圖像源)創建超鏈接時 ,請始終從/后面加上完整的正確路徑啟動它。 它永遠不會讓你失望。

  • 與文件系統調用相同:始終使用絕對路徑。 您的服務器通常為您提供一個非常方便的變量,稱為$_SERVER['DOCUMENT_ROOT']該變量包含文件系統與Web服務器的連接點,指向您的Web根目錄。

因此,當您從網站上的任何地方致電時,

include $_SERVER['DOCUMENT_ROOT'].'/scripts/php/index_mainImageJoin.php';

將始終指向同一位置

您應該使用dirname__FILE__通過使用這兩個常量,您應該能夠包含相對於當前文件的文件,而不是包含Web服務器調用的php腳本。

例如

include_once dirname(__FILE__) . '/../include.php';

dirname :將返回路徑的目錄部分

__FILE__ :是一個魔術常數,它被當前文件的路徑替換。

這樣做的唯一問題是鎖定了項目的結構,但是大多數情況下它是可以接受的。

只需使用set_include_path()將包含路徑添加一次(在開頭的某個位置或在配置文件中set_include_path() ,請參閱手冊 使用絕對路徑(不是相對路徑;可以使用dirname(__FILE__) ),它應該一直工作。

如果您使用的是PHP 5.3.0或更高版本,則可以(而不是__DIR__建議)使用__DIR__ (新定義的魔術常數)。

例:

include __DIR__ . '/../include.php';

現在,當您要避免使用../並映射包含項時,這無濟於事。 不過,還有一種更好的方法-在所有前端文件(應該是用戶只能訪問的PHP文件)中,定義一個常量,該常量提供腳本(而不是當前文件)的根路徑。

例如:

index.php

<?php
define('MYSCRIPT_ROOT', dirname(__FILE__));
// or in php 5.3+ ...
define('MYSCRIPT_ROOT', __DIR__);

// ... do some stuff here

include MYSCRIPT_ROOT . '/includes/myinclude.php';

現在,我們要在includes目錄中包含一個文件。

讓我們在includes/myinclude.php ,並包含include includes/myotherinclude.php文件。

includes/myinclude.php

<?php
if(!defined('MYSCRIPT_ROOT')) exit; // prevent direct access - ALWAYS a good idea.

// ... do stuff here or something

include MYSCRIPT_ROOT . '/includes/myotherinclude.php';

請記住,包含路徑應​​直接相對於項目本身的目錄,而不僅僅是相對於前端文件之一。 如果子目錄中有一個前端文件,則在定義常量時需要回退到項目根目錄本身。

例:

subdirectory/index.php

index.php

<?php
define('MYSCRIPT_ROOT', dirname(dirname(__FILE__)));
// or in php 5.3+ ...
define('MYSCRIPT_ROOT', dirname(__DIR__));

// ... do some stuff here

include MYSCRIPT_ROOT . '/includes/myinclude.php';

我們在這里所做的只是添加一個dirname()調用,該調用將刪除路徑中的目錄。 請參閱: http//us.php.net/manual/en/function.dirname.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM