Include/ضمیمه کردن فایل بصورت صحیح و ایمن

Y.P.Y

Well-Known Member
معمولاً اولین فایلی که قراره Include بشه Config. هستش(فایل پیکربندی نه تنظیمات):

راه های فوق العاده اشتباه و خطرناک:
PHP:
require_once('./config.php');
require_once('config.php');
require_once('\www\root\config.php'); # !
require_once('www/public_html/config.php');
...

راه صحیح و ایمن:
PHP:
require_once(addslashes(dirname(__file__)) . '/test-directory/' . '_config.php');
----------------------------------------------

نکته: DOCUMENT_ROOT که در متغیر $_SERVER قرار داره روی اکثر سیستمهای ویندوز Set نشده و یا مشکل / و \ رو داره.
پس اینو در اول خط و اولین فایل(مثلاً index) قرار میدید(حتی قبل از config).
PHP:
# Windows
if(!isset($_SERVER['DOCUMENT_ROOT']) && isset($_SERVER['SCRIPT_FILENAME']))
{
	$_SERVER['DOCUMENT_ROOT']= str_replace('\\', '/', substr(&$_SERVER['SCRIPT_FILENAME'], 0, (0 - strlen(&$_SERVER['PHP_SELF']))));
}

# Windows
if(!isset($_SERVER['DOCUMENT_ROOT']) && isset($_SERVER['PATH_TRANSLATED']))
{
	$_SERVER['DOCUMENT_ROOT']= str_replace('\\', '/', substr(str_replace('\\\\', '\\', &$_SERVER['PATH_TRANSLATED']), 0, (0 - strlen(&$_SERVER['PHP_SELF']))));
}
حالا برای تعریف متغیر/ثابت های مسیر اینطوری در فایل config عمل می کنید:
PHP:
if(!defined('ROOT_PATH'))
{
	define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT'] . '/');
}

if(!defined('SoftwareName_PATH'))
{
	define('SoftwareName_PATH', ROOT_PATH);
}
به این . نقطه ها دقت کنید. اینکار اجازه خواندن/اجرای فایل رو از خارج از نرم افزار به خرابکار نمیده.
ROOT_PATH مسیر ریشه هاست/فضای شماست. مثل:
/usr/www/public_html/
یا c:\\www\\root\\MyUserName

SoftwareName_PATH مسیر جاری نرم افزارتون هست که داخل هاست/فضا تونه. مثل:
/usr/www/public_html/Wordpress/
یا c:\\www\\root\\MyUserName\\Wordpress

حالا هم برای Include کردن فایل های بعدی(مثل توابع، کلاسها و زبان و...) اینطوری عمل میکنید:
PHP:
require_once(SoftwareName_PATH . 'functions/' . 'global.php');
require_once(SoftwareName_PATH . 'languages/' . 'english.php');
require_once(SoftwareName_PATH . 'classes/system/' . 'plugin.php');

در پایان اینطوری باید عمل کنید:
محتویات فايل index.php
PHP:
# Windows
if(!isset($_SERVER['DOCUMENT_ROOT']) && isset($_SERVER['SCRIPT_FILENAME']))
{
	$_SERVER['DOCUMENT_ROOT']= str_replace('\\', '/', substr(&$_SERVER['SCRIPT_FILENAME'], 0, (0 - strlen(&$_SERVER['PHP_SELF']))));
}

# Windows
if(!isset($_SERVER['DOCUMENT_ROOT']) && isset($_SERVER['PATH_TRANSLATED']))
{
	$_SERVER['DOCUMENT_ROOT']= str_replace('\\', '/', substr(str_replace('\\\\', '\\', &$_SERVER['PATH_TRANSLATED']), 0, (0 - strlen(&$_SERVER['PHP_SELF']))));
}

# Includeing config.php
require_once(addslashes(dirname(__file__)) . '/config.php');
# Including misc.
require_once(SoftwareName_PATH . 'functions/' . 'global.php');
require_once(SoftwareName_PATH . 'languages/' . 'english.php');
require_once(SoftwareName_PATH . 'classes/system/' . 'plugin.php');

محتویات فايل config.php
PHP:
if(!defined('ROOT_PATH'))
{
	define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT'] . '/');
}

if(!defined('SoftwareName_PATH'))
{
	define('SoftwareName_PATH', ROOT_PATH . 'SoftwareFolderName');
}

# ...
موفق باشید
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا