[英]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中啟用了“ 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.