簡體   English   中英

從遠程服務器包含PHP文件時,常量不會“填充”

[英]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_fopenallow_url_include只能在php.ini或httpd.conf中設置。 本地服務器阻止文件被包含,這與在瀏覽器中鍵入URL不同。

為什么常量應該是全局的,而不是從遠程服務器包含時“繼承”?

即使外部包含有效,也無法按預期工作。 包含HTTP與標准包含不同。

您包括所包含文件的輸出 外部PHP文件在包含之前在外部服務器上處理。

如果可以通過這種方式逐字讀取外部PHP文件,那肯定會是一個安全漏洞。

通常建議使用外部包含。

它們通常不能很好地工作(或根本不能)。

所以不要使用外部包含。

暫無
暫無

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

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