4 небольших, но весьма полезных функции PHP
При работе над приложением для клиентов разработчику приходится сталкиваться с непредсказуемыми условиями рабочего окружения, установками сервера и конфигурациями. Чтобы исправить положение можно использовать 4 простые, но эффективные PHP функции.
В ходе разработки нужно получать сообщения об ошибках как можно более высокого уровня. Но в рабочих версиях сервера нужно скрывать такие сообщения. Для этого можно использовать простую функцию, которая будет проверять константу DEVELOPMENT_ENVIRONMENT и действовать соответственно установкам:
Путь к хранилищу сообщений об ошибках в последней строке нужно установить свой.
Вторая функция является вспомогательной для третьей функции:
Она используется в следующей функции:
function removeMagicQuotes() {
if ( get_magic_quotes_gpc() ) {
$_GET = stripSlashesDeep($_GET );
$_POST = stripSlashesDeep($_POST );
$_COOKIE = stripSlashesDeep($_COOKIE);
}
}
Если окружение использует Magic Quotes, то выше приведенная функция пропускает обработку строк.
Последняя по порядку, но не по значению функция проверяет дьявольскую регистрацию глобальных установок и корректно исправляет ее:
И приложение снова в безопасности.
Такие мелочи существенно облегчают жизнь при разработке проектов на PHP.
В ходе разработки нужно получать сообщения об ошибках как можно более высокого уровня. Но в рабочих версиях сервера нужно скрывать такие сообщения. Для этого можно использовать простую функцию, которая будет проверять константу DEVELOPMENT_ENVIRONMENT и действовать соответственно установкам:
function setReporting() {
if (DEVELOPMENT_ENVIRONMENT == true) {
error_reporting(-1);
ini_set('display_errors','On');
} else {
error_reporting(-1);
ini_set('display_errors','Off');
ini_set('log_errors', 'On');
ini_set('error_log', ROOT.DS.'lm/tmp'.DS.'logs'.DS.'error.log');
}
}
if (DEVELOPMENT_ENVIRONMENT == true) {
error_reporting(-1);
ini_set('display_errors','On');
} else {
error_reporting(-1);
ini_set('display_errors','Off');
ini_set('log_errors', 'On');
ini_set('error_log', ROOT.DS.'lm/tmp'.DS.'logs'.DS.'error.log');
}
}
Путь к хранилищу сообщений об ошибках в последней строке нужно установить свой.
Вторая функция является вспомогательной для третьей функции:
function stripSlashesDeep($value) {
$value = is_array($value) ? array_map('stripSlashesDeep', $value) : stripslashes($value);
return $value;
}
$value = is_array($value) ? array_map('stripSlashesDeep', $value) : stripslashes($value);
return $value;
}
Она используется в следующей функции:
function removeMagicQuotes() {
if ( get_magic_quotes_gpc() ) {
$_GET = stripSlashesDeep($_GET );
$_POST = stripSlashesDeep($_POST );
$_COOKIE = stripSlashesDeep($_COOKIE);
}
}
Если окружение использует Magic Quotes, то выше приведенная функция пропускает обработку строк.
Последняя по порядку, но не по значению функция проверяет дьявольскую регистрацию глобальных установок и корректно исправляет ее:
function unregisterGlobals() {
if (ini_get('register_globals')) {
$array = array('_SESSION', '_POST', '_GET', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES');
foreach ($array as $value) {
foreach ($GLOBALS[$value] as $key => $var) {
if ($var === $GLOBALS[$key]) {
unset($GLOBALS[$key]);
}
}
}
}
}
if (ini_get('register_globals')) {
$array = array('_SESSION', '_POST', '_GET', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES');
foreach ($array as $value) {
foreach ($GLOBALS[$value] as $key => $var) {
if ($var === $GLOBALS[$key]) {
unset($GLOBALS[$key]);
}
}
}
}
}
И приложение снова в безопасности.
Такие мелочи существенно облегчают жизнь при разработке проектов на PHP.