簡體   English   中英

如何使網站可讀但文件下載管理器無法下載的包含/文件夾中的 php 文件?

[英]How can I make the php files inside an includes/ folder readable by the website but not downloadable by file download managers?

我有一個小的 PHP/MySQL 項目,我想上傳到我們的子域。 該項目有一個 includes/ 文件夾,其中包含一些 PHP 文件,這些文件包含有關數據庫名稱、用戶名、密碼和登錄 function 的信息。

我怎樣才能使這個目錄的文件可以被網站讀取(所以當有人訪問網站時,他們可以登錄並做其他事情)但公眾無法訪問? 我可以使用文件下載器來下載我想要阻止的文件夾的內容。

解決方案是使用 .htaccess 文件嗎?

編輯:

謝謝大家的回答。 經過一番閱讀,我將文件夾結構切換為如下所示:

includes/
  - initiate.php
  - login.inc.php
  - functions.inc.php
public/
  - index.php
  - login.php
templates/
  - header.php
  - footer.php

我現在在設置相對和絕對路徑常量時遇到問題

initial.php 有我的常量變量:

define('INITIATE_FOLDER', dirname(__FILE__));
define('ROOT_FOLDER', dirname(INITIATE_FOLDER));
define('TEMPLATES', ROOT_FOLDER . '/templates');
define('INCLUDES', ROOT_FOLDER . '/includes');
define('WWW_ROOT', ROOT_FOLDER . '/public');

當我回顯常量時,我得到以下信息:

echo INITIATE_FOLDER; C:\wamp64\www\project\includes
echo ROOT_FOLDER; C:\wamp64\www\project
echo INCLUDES; C:\wamp64\www\project/includes
echo TEMPLATES; C:\wamp64\www\project/templates
echo WWW_ROOT; C:\wamp64\www\project/public

你能告訴我我做錯了什么以及如何糾正嗎?

正如其他人所說,只要您的文件以.php結尾,那么<?php?>標記之間的所有內容都會在您的服務器提供之前從頁面中刪除。

如果您試圖阻止提供非 php 文件,最好的辦法是將您的包含文件夾放在不公開的位置。

一般來說,當你 FTP 進入你的服務器時,布局是這樣的:

www/
public_html/
... etc, other folders

您想要公開的文件應該 go 位於 public_html/www 文件夾內(www 通常只是 public_html 的快捷方式/符號鏈接)。

您應該將目錄 go 包含在public_html文件夾旁邊,而不是在其中。

www/
public_html/
includes/
... etc, other folders

然后,在您包含這些文件的文件中,從新位置包含它們。

<?php
require_once "includes/databaseSettings.php";

變成

<?php
require_once "../includes/databaseSettings.php";

現在,您的文件位於 HTTP 服務器所服務的目錄之外,但仍可包含在代碼的 rest 中。

這通常是我的經驗,但可能因供應商而異。 如果,當您 FTP 進入您的服務器時,您沒有看到wwwpublic_html文件夾,請嘗試向上導航一個目錄。

如果您的服務器設置正確,則不會下載任何 PHP 文件,僅執行。

基本上,如果文件以<?php開頭,則您安裝了 PHP 擴展,那么它將是可執行的。

暫無
暫無

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

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