簡體   English   中英

如何在外部文件中執行php

[英]How to execute php in an external file

為什么不起作用?

// File hosted on `example.com`
// db-con.php
<?php
  define("DB_HOST" , "host");
  define("DB_NAME" , "name");
  define("DB_USER" , "user");
  define("DB_PASS" , "pass");

--

// File hosted on `another-example.com`
// index.php
<?php
  include 'http://example.com/db-con.php';
  echo DB_HOST;

--

// output
Notice: Use of undefined constant DB_HOST - assumed 'DB_HOST' in C:\Users\Alex\Dropbox\Shared\Web\htdocs\BASE_TEMPLATE\index.php on line 14

當然,通過包括外部文件,可以運行php,並定義常量嗎?

您所看到的不是包含文件,而是包含請求該文件時遠程Web服務器的響應

也就是說,遠程Web服務器看到對db-con.php的請求,將其加載,執行代碼(在其自己的本地進程中定義常量),然后將輸出返回給您(該輸出可能為空,因為代碼沒有回聲)。 因此,最終結果與包含一個空文件的結果相同。

更新:從手冊中挖出參考:

如果在PHP中啟用了“ URL fopen包裝器”(默認配置),則可以使用URL指定要包含的文件(通過HTTP或其他受支持的包裝器-有關協議列表,請參閱受支持的協議和包裝器)而不是本地路徑名。 如果目標服務器將目標文件解釋為PHP代碼,則可以使用與HTTP GET一起使用的URL請求字符串將變量傳遞到包含的文件。 嚴格來講,這與包括文件並讓其繼承父文件的變量作用域不同; 該腳本實際上是在遠程服務器上運行的,然后將結果包含在本地腳本中。

那怎么辦呢?

嗯,包括來自遠程服務器的代碼是您不應該真正想到的事情(盡管有多種方法可以實現它,但這是一個非常糟糕的主意)。 無論如何,如果沒有遠程服務器的明確配合,您將無法做到這一點(否則任何人都可以包括其他人的配置文件,並使用get_defined_constants來獲取密碼)。 而且,如果您這樣做,其他任何人都可以按照相同的步驟操作,並掌握您的密碼。 您不希望這種情況發生。

暫無
暫無

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

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