簡體   English   中英

在PHP中包含不與$ _SESSION變量一起使用

[英]Include don't work with $_SESSION variable in PHP

我正在嘗試包含具有絕對URL的文件:

<?
session_start();
$_SESSION['sr_path'] = 'http://domain.org/www/myapp';

include($_SESSION['sr_path'].'/assets/contact.php');
?>

但這不起作用。

知道為什么嗎?

您通過目錄而不是網址包含文件:

include(dirname(__FILE__).'/assets/contact.php');

要么

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

dirname(__FILE__)獲取您在其中編寫此代碼的當前文件的路徑。

或者在所有情況下,您都可以在網站index.php頁面中定義常量,並在任何地方使用此const:

define('ROOT', dirname(__FILE__));

然后在任何這樣的目錄中使用它:

include(dirname(__FILE__).'/same_index_file_path/contact.php');

您當前正在嘗試通過URL而非服務器路徑來包括文件。 默認情況下,您無法使用“ HTTP”包裝器,否則將收到此警告(或類似警告): http:// wrapper is disabled in the server configuration by allow_url_include=0

盡管可以通過URL包含文件,但通常最好在服務器上包含路徑。

如果您確實想繼續使用當前方法,並且將某些內容存儲在與腳本運行所在的服務器不同的服務器上,則需要通過將'allow_url_include'設置為1來更新配置。

包含PHP文檔指定:

如果在PHP中啟用了“ URL包含包裝器”,則可以使用URL(通過HTTP或其他受支持的包裝器-參見受支持的協議和包裝器以獲取協議列表)而不是本地路徑名來指定要包含的文件。

但是,值得注意的是,如果使用HTTP,則可能依賴於遠程服務器來為您處理PHP腳本並將其返回到腳本中。 如文檔所述:

遠程文件可以在遠程服務器上處理(取決於文件擴展名和遠程服務器是否運行PHP的事實),但是它仍必須生成有效的PHP腳本,因為它將在本地服務器上處理。

它需要澄清:

...該腳本實際上正在遠程服務器上運行,然后將結果包含在本地腳本中。

TL; DR

我想您實際上想做什么,假設您要包含的腳本與包含腳本的腳本位於同一台服務器上,只是在您的服務器上提供它的路徑,例如: /var/www/myapp/assets/contact.php如下所示:

include('/var/www/myapp/assets/contact.php');

代替這個:

include('http://example.com/myapp/assets/contact.php');

暫無
暫無

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

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