簡體   English   中英

PHP包括調用其他文件

[英]PHP Include calling other files

我意識到我在PHP文件中一遍又一遍地使用了特定的函數,因此我從所有函數中取出了該函數,並將其放在單獨的PHP文件中,並在需要的地方包含了該函數。

現在,當我對函數進行更新時,使用該函數的所有文件都會更新。 大。

現在只有一個問題,該函數本身使用相對URL,當您包含PHP時,文件是相對於調用PHP的文件,而不是所包含的PHP目錄的文件。 我知道快速而又骯臟的答案是使用絕對鏈接,但是我如何才能使包含的PHP引用ITSELF而不是調用它的PHP。

例:

index.php包含一個名為create_table.php .....的文件。create_table.php將CSS和javascript回顯到index.php。 CSS和javascript與create_table.php位於同一目錄中,但是當使用src =“ javascript.js”時,它想查找index.php所在的javascript.js,而不是create_table.php所在的目錄。

編輯:結構如何工作

/includes/create_table.php
/includes/style.css
/includes/javascript.js
/test/dir/1/2/3/index.php

因此,當我嘗試使用src =“ javascript.js”而不是查找/includes/javascript.js時,它將嘗試查找/test/dir/1/2/3/javascript.js

絕對鏈接的使用不是“快速而骯臟的”,而是絕對必要的。
而且您的問題與PHP幾乎沒有共同之處。 是HTML問題。 HTML代碼讀取鏈接后,不是PHP調用您的CSS文件,而是瀏覽器

絕對路徑的唯一目的是解決您的問題-從任何位置查找特定文件。
當然,它應該僅是路徑,而不是URI。 所有HTML鏈接都可以(並且應該)縮短為路徑部分。

而不是尋找/includes/javascript.js

答對了!
因此,只需告訴它尋找這個地址,一個絕對的地址-/ /includes/javascript.js

我認為您最終將必須使用絕對路徑。 問題是如何在不進行硬編碼的情況下獲取那些絕對路徑...

您可以使用魔術常數__FILE__來獲取當前腳本的絕對路徑(即create_table.php),然后執行以下操作:

$filename = realpath(dirname(__FILE__).'/../../css/mystyles.css');

要獲取文件的絕對路徑,您知道該文件是相對於當前腳本的。 (即,向上兩個目錄,向下進入css /)

或者,您可以以其他方式開始並使用$_SERVER['DOCUMENT_ROOT'] 假設您知道所有相對於您的webroot的路徑。 這將是我的首選方式。


編輯:我認為您幾乎可以忽略上述情況! 我假設(在進行編輯之前)您實際上是在服務器端讀取CSS和JavaScript文件,並將其內容添加到index.php-我想不是!

重新回答...正是由於這個問題,我永遠不會將相對 路徑 URL用於客戶端CSS和JavaScript。 有些人總是使用絕對URL,就我個人而言,我更喜歡相對根URL。 如果您是在服務器端生成此URL,則沒關系。

根目錄相對網址: /includes/style.css

您認為這有什么問題? 我會說這是首選。

可能有更好的方法來處理您要執行的操作,而不是動態地從PHP函數中請求文件。

至少,絕對路徑是關鍵,並且通常是從根開始絕對路徑,例如:require_once(“ / lib / fileOne.php”);

不是:require_once(“ lib / fileOne.php”);

因此,您說的是總是需要一個文件。 在此文件中,具有將__FILE__SCRIPT_FILENAME進行比較的功能。 因此,例如,您知道includes/create_table.php到根目錄的路徑是../所以它的文件夾差為1 ,如果路徑是includes/foo/create_table.php ,則到根目錄的路徑將是是../../所以相差2等等

$dif_to_root=1;

for
(
$i=0,$path='';
$i<($dif_to_root-(count(explode('/',__FILE__))-count(explode('/',getenv('SCRIPT_FILENAME')))));
$i++
)$path.='../';

現在,在您的代碼中輸入src="$path.includes/style.css"

暫無
暫無

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

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