Yousha
یک شنبه 01 اسفند 1389, 15:01 عصر
معمولاً اولین فایلی که قراره Include بشه Config. هستش(فایل پیکربندی نه تنظیمات):
راه های فوق العاده اشتباه و خطرناک:
require_once('./config.php');
require_once('config.php');
require_once('\www\root\config.php'); # !
require_once('www/public_html/config.php');
...
راه صحیح و ایمن:
require_once(addslashes(dirname(__file__)) . '/test-directory/' . '_config.php');
----------------------------------------------
نکته: DOCUMENT_ROOT که در متغیر $_SERVER قرار داره روی اکثر سیستمهای ویندوز Set نشده و یا مشکل / و \ رو داره.
پس اینو در اول خط و اولین فایل(مثلاً index) قرار میدید(حتی قبل از config).
# 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 عمل می کنید:
if(!defined('ROOT_PATH'))
{
define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT'] . '/');
}
if(!defined('SoftwareName_PATH'))
{
define('SoftwareName_PATH', ROOT_PATH . 'SoftwareFolderName' . '/');
}
به این . نقطه ها دقت کنید. اینکار اجازه خواندن/اجرای فایل رو از خارج از نرم افزار به خرابکار نمیده.
ROOT_PATH مسیر ریشه هاست/فضای شماست. مثل:
/usr/www/public_html/
یا c:\\www\\root\\MyUserName
SoftwareName_PATH مسیر جاری نرم افزارتون هست که داخل هاست/فضا تونه. مثل:
/usr/www/public_html/Wordpress/
یا c:\\www\\root\\MyUserName\\Wordpress
حالا هم برای Include کردن فایل های بعدی(مثل توابع، کلاسها و زبان و...) اینطوری عمل میکنید:
require_once(SoftwareName_PATH . 'functions/' . 'global.php');
require_once(SoftwareName_PATH . 'languages/' . 'english.php');
require_once(SoftwareName_PATH . 'classes/system/' . 'plugin.php');
در پایان اینطوری باید عمل کنید:
محتویات فايل index.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
if(!defined('ROOT_PATH'))
{
define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT'] . '/');
}
if(!defined('SoftwareName_PATH'))
{
define('SoftwareName_PATH', ROOT_PATH . 'SoftwareFolderName' . '/');
}
# ...
موفق باشید :)
راه های فوق العاده اشتباه و خطرناک:
require_once('./config.php');
require_once('config.php');
require_once('\www\root\config.php'); # !
require_once('www/public_html/config.php');
...
راه صحیح و ایمن:
require_once(addslashes(dirname(__file__)) . '/test-directory/' . '_config.php');
----------------------------------------------
نکته: DOCUMENT_ROOT که در متغیر $_SERVER قرار داره روی اکثر سیستمهای ویندوز Set نشده و یا مشکل / و \ رو داره.
پس اینو در اول خط و اولین فایل(مثلاً index) قرار میدید(حتی قبل از config).
# 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 عمل می کنید:
if(!defined('ROOT_PATH'))
{
define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT'] . '/');
}
if(!defined('SoftwareName_PATH'))
{
define('SoftwareName_PATH', ROOT_PATH . 'SoftwareFolderName' . '/');
}
به این . نقطه ها دقت کنید. اینکار اجازه خواندن/اجرای فایل رو از خارج از نرم افزار به خرابکار نمیده.
ROOT_PATH مسیر ریشه هاست/فضای شماست. مثل:
/usr/www/public_html/
یا c:\\www\\root\\MyUserName
SoftwareName_PATH مسیر جاری نرم افزارتون هست که داخل هاست/فضا تونه. مثل:
/usr/www/public_html/Wordpress/
یا c:\\www\\root\\MyUserName\\Wordpress
حالا هم برای Include کردن فایل های بعدی(مثل توابع، کلاسها و زبان و...) اینطوری عمل میکنید:
require_once(SoftwareName_PATH . 'functions/' . 'global.php');
require_once(SoftwareName_PATH . 'languages/' . 'english.php');
require_once(SoftwareName_PATH . 'classes/system/' . 'plugin.php');
در پایان اینطوری باید عمل کنید:
محتویات فايل index.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
if(!defined('ROOT_PATH'))
{
define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT'] . '/');
}
if(!defined('SoftwareName_PATH'))
{
define('SoftwareName_PATH', ROOT_PATH . 'SoftwareFolderName' . '/');
}
# ...
موفق باشید :)