Php define


bool define ( string $name , mixed $value [, bool $case_insensitive = false ] ) define определяет константу с именем $name и значением $value во время выполнения скрипта. Третий необязательный параметр $case_insensitive указывает, должно ли имя константы быть чувствительным к регистру — по умолчанию (false) константы чувствительны к регистру. Если $case_insensitive установлен в true, то константы хранятся в нижнем регистре, но доступны в любом случае. Пример использования: <?php
define
('ONE', 1);
echo
ONE; // Выведет «1»
echo one; // Выдаст ноутис, так как константа не определена, а потом выведет «one»


define('TWO', 2, true);
echo
TWO; // Выведет «2»
echo Two; // Выведет «2»
echo two; // Выведет «2»
?>

phpfunctions.ru

Как защитить файлы инклюда от прямого вызова

Сегодняшний урок я скорее всего назвал бы не уроком, а ответом на вопрос, заданном на сайте evgeniypopov.com.

Исходников нет, т.к. реализация очень простая:

Итак, как это делается. Далеко ходить не будем. Рассмотрим как реализовано в CMS Joomla. В файле index.php корневой директории в самом начале есть такая строчка:

   define( '_JEXEC', 1 );

А в файлах подключаемых компонетов, модулей и т.д. (тоже в самом начале) такая:

  defined('_JEXEC') or die('Restricted access');  

Собственно все. В index.php в корневой директории создается константа командой define c именем » _JEXEC» и значением «1». В файлах подключаемых компонетов при помощи функции defined(«_JEXEC») мы проверям существование константы «_JEXEC». Если константа не найдена результат работы функции будет false, в этом случае пишем сообщение «Доступ запрещен» и останавливаем скрипт с помощью функции die (пcевдоним функции exit()).

По аналогии также делаем и у себя. Вот код демо-страницы:
файл index.php

  <?php define( '_JEXEC', 1 );?>
<h2>Напишите как защитить файлы инклюда от прямого вызова! </h2>
<br />
<h4 style="color:#090">Ответ:
<?php include("inc/response.php"); ?>
</h4>

Инклюд-файл inc/response.php:

<?php 
defined('_JEXEC') or die('Ай-яй-яй, сюда нельзя!');
echo 'очень просто. Этот ответ находится в "инклюдированном" файле, попробуйте обратиться к нему напрямую, дописав в строке
браузера /inc/response.php'
?>

 

Все очень просто. В коде я привел имя константы и ее значение в том виде, как написано в файлах Joomla. Имя константы и ее значение могут быть любыми, так что желательно придумать свое. Помните только, что имена констант пишутся в верхнем регистре.

Вот и все. по остальным вопросам ответы тоже будут, но позже. Всему свое время 🙂

ruseller.com

There's an undocumented side-effect of setting the third parameter to true (case-insensitive constants): these constants can actually be "redefined" as case-sensitive, unless it's all lowercase (which you shouldn't define anyway).

The fact is that case-sensitive constants are stored as is, while case-insensitive constants are stored in lowercase, internally. You're still allowed to define other constants with the same name but capitalized differently (except for all lowercase).

<?php
 
// "echo CONST" prints 1, same as "echo const", "echo CoNst", etc.
 
define('CONST', 1, true);
  echo CONST;
// Prints 1


  define('CONST', 2);
  echo CONST;
// Prints 2
 
echo CoNsT; // Prints 1
 
echo const; // Prints 1

  // ** PHP NOTICE: Constant const already defined **
  define('const', 3);
  echo const;
// Prints 1
 
echo CONST; // Prints 2
?>

Why would you use this?

A third party plugin might attempt to define a constant for which you already set a value. If it's fine for them to set the new value, assuming you cannot edit the plugin, you could define your constant case-insensitive. You can still access the original value, if needed, by using any capitalization other than the one the plugin uses. As a matter of fact, I can't think of another case where you would want a case-insensitive constant...


php.net

Я пробовал свою руку в OO PHP и в настоящее время имею три файла. У меня есть class_lib.php, который на данный момент имеет только класс базы данных, файл index.php и файл definition.php. Я хочу поместить всю информацию о моей важной базе данных в файл определений.


x41E;днако, когда я это делаю, я получаю сообщение об ошибке при попытке подключения к базе данных: «Unkown server DB_HOST». Файл моих определений:

<?php define("DB_HOST","localhost"); define("DB_USER","root"); define("DB_PASS","password"); define("DB_NAME","database"); ?> 

Затем я использую их в индексном файле так:

  • Вложенные php включают поведение
  • Разбор PHP включает

  • Что лучше в PHP?
  • Какие каталоги проверяет PHP при включении относительного пути с include ()?
  • Предоставление родительской переменной PHP include () 'd
 include('definitions.php'); include('class_lib.php'); $testing = new databaseServer(); $testing->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); в include('definitions.php'); include('class_lib.php'); $testing = new databaseServer(); $testing->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); в include('definitions.php'); include('class_lib.php'); $testing = new databaseServer(); $testing->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); 

И функция, которую я использую в классе databaseServer, такова:

  

function connect($host,$user,$pw,$db) { $this->con = mysql_connect($host,$user,$pw); if (!$this->con) { die('Could not connect: ' . mysql_error()); } $this->selectDb($db); } function selectDb($database) { $this->db = mysql_select_db($database,$this->con); if (!$this->db) { echo "Could not Select database: " . mysql_error(); } }

Любые идеи, почему это не сработает? Я также попытался поместить файл определений в include в файле class_lib, но он все еще не работает.

ruphp.com

Описание констант

Константа описывается только один раз и только в конструкции PHP define. Константа фиксирует имя, а не значение. Требование неизменности значения константы осталось в далеком прошлом. Сегодня на первый план вышло обозначение параметра, а не его значение.


Удобно именовать, например, папку корня сайта, операции записи, чтения или удаления удобочитаемыми именами и передавать в функции такие имена в качестве параметров. На самом деле передаются числа, не несущие никакого смысла.

С самого начала константы были сообщениями, математическими коэффициентами и целочисленными значениями. В настоящее время требования локализации языка клиента автоматически наложили вето на PHP define для констант в качестве сообщений об ошибках, элементах диалога и контента сайта. Нельзя фиксировать то, что в одной стране выглядит не так, как в другой.

Математические значения могут быть обозначены как константы. Это осталось, хотя редко используется. Особенные параметры, которые желательно защитить по соображениям безопасности, зависят от конкретной разработки и относятся к стилю кодирования, ограничивающего преднамеренное нанесение вреда средствами языка программирования (PHP дает ошибку при повторном объявлении).

Главное в использовании конструкции PHP define (‘ИмяПараметра’, ‘Значение’) — первый элемент. Можно еще указать регистрозависимость третьим параметром (True), но это малосущественно. Программирование, как классическая юриспруденция, стало отбирать из прошлого опыта только самое существенное.

Особенности констант


После конструкции PHP define (‘PMA_ENGINE_DETAILS_TYPE_PLAINTEXT’, 0) можно использовать осмысленное имя PMA_ENGINE_DETAILS_TYPE_PLAINTEXT, а не бессмысленный ‘0’. Но передавать в качестве параметра проще, удобнее и правильнее именно простое число.

Константа не предваряется символом $, используется осмысленно и делает код скрипта читабельным и комфортным. Сложился стиль писать константы только заглавными буквами, разделяя слова символом подчеркивания. Однако этот раритет от С/С++ все чаще уходит на второй план.

Define на PHP — это константа. Она должна быть осмысленной, лаконичной и максимально компактной — это главное. Константа — это статика, а значит, можно один раз продумать, как ее использовать, затем применять эффективно.

fb.ru

Чем отличаются константы от переменных в PHP

  • Имена констант не начинаются со знака доллара, как имена переменных;
  • Константу можно определить только при помощи функции define(), а не присваивая ей значение, как объявляются переменные;
  • Константы не зависимы от области видимости, доступ к ним есть в любом месте программы;
  • После того, как константа была объявлена, её нельзя аннулировать или поменять её значение;
  • Константы могут иметь только скалярные значения.

Как проверить существование константы в PHP

Иногда может потребоваться определить существование константы. Для этого в PHP есть функция defined(), название которой отличается одной буквой от функции define(). Данная функция возвращает логическое значение true, если константа объявлена.

<?php define( "PASSWORD", 'QWE123' ); if ( defined("PASSWORD") == true ) echo "Константа PASSWORD объявлена!"; 

Предопределенные константы PHP

Интерпретатор PHP автоматически создаёт для вас несколько констант. Например, константа __FILE__ содержит имя файла, обрабатываемого интерпретатором в данный момент. Константа __LINE__ содержит номер текущей строки этого файла. Такие константы особенно полезны на эьапах отладки программы для генерирования сообщений об ошибках. Константа PHP_VERSION содержит версию PHP (о ней мы упоминали в статье «как узнать версию php»). Этим можно воспользоваться для того, чтобы не допустить выполнения программы на устаревших версиях PHP.

Специальные константы нечувствительны к регистру.

Конечно, их больше чем три, но на этане начального изучения PHP, узнать о этих трёх константах будет достаточно.

komotoz.ru

My hack at constant arrays :

   function carray($const = null, $index = null)
   {
     static $carrays;

     if ($const === null)
     {
         $i = count($carrays);
         $carrays[$i] = $index;
        
         return $i;
        
     } else
     {       
         return $index === null ? $carrays[$const] : $carrays[$const][$index];     
     }     
   }
    
   function aconst()
   {   
     $args = func_get_args();
    
     if (count($args) == 1 && is_array($args[0]))
     {       
         return carray(null, $args[0]);
        
     } else
     {
         return carray(null, $args);         
     }               
   } 

Use like this:

   define('NRWORDS', aconst('zero', 'one', 'two', 'three'));

   define('STUNT_DESC', aconst(array(
     STUNT_TWOWHEELS => 'Two wheels',
     STUNT_WHEELIE  => 'Wheelie',
     STUNT_STOPPIE  => 'Stoppie'
   )));     

   print(carray(NRWORDS, 2));

   print(carray(STUNT_DESC, STUNT_WHEELIE));

  
   $arr = carray(STUNT_DESC);

   print_r($arr[STUNT_STOPPIE]);
  

bvr.

php.svchat.ru


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.