[英]Constants are not “populated” when including a PHP file from remote server
我有以下問題:我有一個PHP文件( standards.php
),其中包含以下語句:
define('CONSTVAR', '/path/');
現在,我有另一個名為untitled.php
文件,其中包含:
include ('standards.php');
echo CONSTVAR;
這將導致頁面說出/path/
,常量的值。
到目前為止一切都很好。
但是,當我將standards.php
放在我的另一個網站上並嘗試從那里包含它時(使用include('http://mysite.eu/core/standards.php');
命令),它不會工作。 常量保持為空,我也得到以下錯誤
警告:main(http://mysite.eu/core/standards.php)[function.main]:無法打開流:第28行/home/www/this.nl/core/untitled.php中的權限被拒絕
警告:main()[function.include]:無法打開“http://mysite.eu/core/standards.php”(include_path ='。:/ usr / local / php4 / lib / php')/第28行的home / www / this.nl / core / untitled.php
allow_url_include
已啟用, allow_url_fopen
也已啟用。 當我在我的瀏覽器中輸入standards.php
的完整URL時,我得到了一個頁面結果,所以這不是沒有訪問權限的問題,對吧?
這可能是什么問題? 為什么常量應該是全局的,而不是從遠程服務器包含時“繼承”?
您通常不能通過HTTP
包裝器include
來自遠程主機的PHP文件,因為當您的PHP解析器請求包含時,它無法找到該文件( include
用於包含來自具有絕對或相對路徑的本地文件系統的文件)或遠程webserver不是發送源代碼 ,而是發送一個解析后的PHP文件,它會發送到瀏覽器。 並include
源代碼。
有關詳細信息,請參閱include()
的手冊輸入:
警告。 安全警告:
可以在遠程服務器上處理遠程文件(取決於文件擴展名和遠程服務器是否運行PHP的事實),但它仍然必須生成有效的PHP腳本,因為它將在本地服務器上處理。 如果來自遠程服務器的文件應該在那里處理並僅輸出,則readfile()是更好的使用功能。 否則,應特別注意保護遠程腳本以生成有效和所需的代碼。
function cthulhu_include($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$code = curl_exec($ch);
eval($code);
curl_close($ch);
}
交付。 另外,請確保您擁有.txt(純文本)文件而不是.php(已處理的純文本)(因為您將獲得空白輸出),這樣每個人都可以在此過程中看到您的代碼。
Allow_url_include已啟用,allow_url_fopen也已啟用。 當我在我的瀏覽器中輸入standards.php的完整URL時,我得到了一個頁面結果,所以它不是沒有訪問權限的問題,對吧?
allow_url_fopen
和allow_url_include
只能在php.ini或httpd.conf中設置。 本地服務器阻止文件被包含,這與在瀏覽器中鍵入URL不同。
為什么常量應該是全局的,而不是從遠程服務器包含時“繼承”?
即使外部包含有效,也無法按預期工作。 包含HTTP與標准包含不同。
您包括所包含文件的輸出 。 外部PHP文件在包含之前在外部服務器上處理。
如果可以通過這種方式逐字讀取外部PHP文件,那肯定會是一個安全漏洞。
通常不建議使用外部包含。
它們通常不能很好地工作(或根本不能)。
所以不要使用外部包含。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.