Суперглобальные переменные PHP. О проекте

Суперглобальные переменные PHP. О проекте

28.04.2019

Вступление

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

Назначение, цели и задачи проекта

Целью создания проекта сайт было желание удовлетворить потребность начинающих веб-программистов в интернет-ресурсе с богатым тематическим содержанием. Сейчас портал сайт способен практически полностью удовлетворить потребности начинающих программистов языка PHP в материалах по PHP, MySQL, в необходимых вспомогательных инструментах, таких как редакторы PHP кода и сопутствующие утилиты для PHP, справочнике по функциям PHP на русском языке, системы поиска необходимой информации, форуме разработчиков и.т.п.
Продвинутые и профессиональные веб-программисты, несомненно, также найдут для себя полезную информацию на портале сайт.

Краткая история проекта

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

В марте 2005 года я приобрел домен сайт с целью воплощения своих идей по созданию крупнейшего специализированного сайта по языку PHP и веб-технологиям.
Накопленной мною информации, программ и ресурсов было недостаточно для создания полноценного и содержательного информационного ресурса. Поэтому я решил продолжать накапливать информацию, параллельно изучая PHP, MySQL и веб-технологии. Для меня это был процесс обучения, при этом постепенно создавался достаточно содержательный информационный ресурс. Из-за недостатка времени процесс моего обучения языку PHP, а значит и создание сайта, затянулся на несколько месяцев.

Таким образом, постепенно, к концу апреля 2006 года, был сформирован уже действительно полноценный портал по PHP, MySQL и связанным веб-технологиям.

Развитие портала

Портал сайт постоянно развивается, многие идеи и пожелания учитываются и реализовываются, обновляется и дополняется информационное содержимое портала, постоянно увеличивается количество и состав посетителей, портал становится все более известным и популярным в среде веб-программистов.

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

Если у Вас возникли некоторые идеи или пожелания, поделитесь ими, воспользуйтесь

; поэтому там, где заботы особенно значительны (напр. при отдаче на сохранение животных), П. прямо превращается в поручение или личный наем .

По русскому праву "на сохранение или в П. могут быть отдаваемы вещи , деньги и акты" (ст. 2100), причем сенатом разъяснено, что предметом П. не могут быть птицы, пчелы , скот (73 / 1577 ; 75 / 982).

П. - один из древнейших договоров; потребность отдавать на сбережение свои вещи при отлучках или в случае каких-либо бедствий, пожара, нашествия врагов и т. д. существовала в древности, может быть, еще в большей степени, чем теперь. В Древнем Риме поклажа сливалась иногда с поручением попечения о семье и всем хозяйстве в один общий договор, так назыв. datio iu tutelam , известный уже очень рано. Характерной особенностью древнего договора П. является то, что он был заключаем обыкновенно с лицами близкими, друзьями, и основывал отношения доверия (древнее римское право знало и П. недвижимостей , так назыв. fiducia cum amico contracta; см. Фидуция).

Согласно с этим договор является безвозмездным и на первых порах не ведет ни к какой юридической ответственности, исключая случаев кражи поклажепринимателем отданных на сохранение вещей; при краже посторонними лицами иск из воровства предъявлялся собственником к этим лицам. По "Русской Правде ", количество отданных на сохранение вещей удостоверяется при возвращении присягой принявшего на хранение. Тем сильнее была нравственная ответственность за нарушение доверия. В Риме недобросовестного поклажепринимателя постигало бесчестье (infamia). В русском праве до сих пор поклажеприниматель, присужденный судом к возвращению вещей, платит, кроме убытков, еще штраф в размере 10% с цены вещей или суммы денег, бывших на хранении, в пользу богоугодных заведений (ст. 2116). Такого постановления нет в западноевроп. законодательствах.

Старая точка зрения на П. как на договор, возникающий на почве взаимного личного доверия и требующий со стороны поклажепринимателя некоторого одолжения, самопожертвования в пользу поклажедателя, отражается и на постановлениях действующего права. Оно не допускает возможности принуждения к принятию П. после состоявшегося соглашения о ней; договор о П. - реальный контракт, действительный лишь с момента отдачи вещи. Некоторые законодательства (франц., остз.) до сих пор признают в принципе безвозмездность договора П. Эти же законодательства - и все остальные при безвозмездной П. - признают ответственность поклажепринимателя лишь за умышленно или по грубой неосторожности причиненный вред и налагают на него обязанность заботиться о полученных на хранение вещах, как о собственном своем имуществе. При опасности, угрожающей одинаково собственным и принятым на хранение вещам, они должны быть спасены вместе (ст. 2105 русского Гражданского зак.). За всякую вину и случай поклажеприниматель отвечает лишь в том случае, если не возвратит вещь поклажедателю в установленный срок или по его первому требованию, хотя бы срок возвращения и был установлен. Дальше установленного срока поклажеприниматель не обязан хранить вещь. Поклажепринимателю не дозволяется пользование взятой на хранение вещью; в противном случае он отвечает уплатой убытков. При пользовании отданными на хранение деньгами П. обращается в заем, подлежащий оплате узаконенными процентами. Поклажедатель обязывается уплатить поклажепринимателю все издержки, понесенные им для сохранения вещи в целости. Общегерманское гражданское уложение стремится ввести П. в разряд возмездных договоров с равной ответственностью обеих сторон, согласно с современным значением договора. И оно, однако, не решается целиком возвести ее в контракт консенсуальный. По общегерманскому уложению, вознаграждение по договору Π предполагается молчаливо условленным, когда по обстоятельствам дела можно ожидать, что П. была возмездной; в таком случае и поклажеприниматель отвечает за всякую вину в случае повреждения вещи. Русское право дает специальные постановления о П. денег для установления различия между поклажею и займом, важного в особенности в интересах конкурса, в массу которого отданные на хранение деньги не поступают, подлежа возвращению целиком поклажепринимателю; отсюда обычное прикрытие поклажей договора займа. Закон требует, чтобы отданные на хранение кредитные билеты были означены по ΝΝ, а относительно звонкой монеты был указан ее род и год чекана. Предписывается также особая форма П. - сохранная расписка (см.) с специальными постановлениями относительно ее юридического значения. Западные законодательства просто постановляют, что П., совершенная на вещи заменимые с обязанностью возвратить их в том же количестве и качестве, обращается в заем (см. ниже).

Особые виды П. 1) Необходимая П., сделанная при каком-нибудь несчастном случае - пожаре, наводнении, кораблекрушении, и др. - по французскому и русскому праву не требует доказательства путем письменного документа, подлежа всем остальным правилам о добровольной П. К необходимой П. русское право причисляет также П. вещей воинскими чинами при внезапном отправлении в поход и П., производимую в торговле по купеческим обычаям (ст. ). 2) П. у содержателей гостиниц вещей приезжих , остановившихся в этих гостиницах, была регулирована особыми нормами еще у римлян; эти нормы с некоторыми дополнениями перешли в западноевроп. и остзейское законодательства. Вещи, внесенные в гостиницу или трактир постояльцем с ведома содержателя и его прислуги или принятые этими лицами в силу закона, поступают на хранение к ним, причем хозяин отвечает за всякого рода ущерб и гибель вещей, причиненные им самим, его слугами или лицами посторонними, за исключением самого постояльца и сопровождающих его лиц, а также кроме случая непреодолимой силы. Вывешенное в гостинице объявление о сложении этой ответственности недействительно; ответственность имеет место и при безвозмездной остановке в гостинице, но она может быть снята по специальному соглашению (остзейское право ; общегерманское не признает и этого ограничения). За сохранность денег и ценных бумаг хозяин ответствует лишь до суммы марок, а свыше - только в том случае, если отказался принять их на специальное хранение в качестве ценных вещей или ущерб произошел по его вине или вине его служащих. Заявление о потере вещей должно быть сделано немедленно после того, как она обнаружена. Русское право возлагает ответственность за утрату вещей на содержателя гостиницы лишь в том случае, если деньги и вещи сданы с обоюдного согласия на специальное его хранение (ст. 2124). 3) Так наз. depositum irregulare - отдача на сохранение денег и заменимых вещей с обязанностью возвратить их в том же количестве и качестве. При такой П. вещи и деньги переходят в собственность поклажепринимателя; он платит определенные проценты и несет полную ответственность; отношения здесь подобны займу, но лицо, принимающее такую П., делает это не в своем интересе, а в интересе лица отдающего. Такова отдача денег на хранение слугами господам; таковы все депозиты (см.) в банках и специальных учреждениях для хранения денег и ценностей. Римское право рассматривало поэтому depositum irregulare как особый вид П. Общегерманское уложение, следуя за швейцарским, ввиду того, что цель договора юридически безразлична признает такое отношение договором займа. Время и место возвращения депозита и по общегерм. уложению определяются, однако, постановлениями о П., т. е.

Суперглобальные переменные доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $_SERVER . На это не влияют даже настойки конфигурации PHP (php.ini).

Переменная $HTTP_SERVER_VARS $HTTP_SERVER_VARS и $_SERVER - это различные переменные).

Вы можете не найти некоторый переменные, которые могут содержаться в массиве $_SERVER , если вы запускаете PHP из коммандной строки.

PHP_SELF

Имя файла в настоящее время выполняющегося сценария, относительно корня документа. Например, $_SERVER ["PHP_SELF"] в сценарии при адресе http://example.com/test.php/foo.bar возвращает /test.php/foo.bar . Предопределенная константа __FILE__ содержит полный путь и имя файла.
Если PHP выполняется из командной строки, эта переменная содержит имя сценария (доступно, начиная с PHP 4.3.0).

argv

Массив параметров, переданных сценарию. При использовании метода GET, он будет содержать строку запроса.

argc

Содержит номер параметров командной строки, переданных сценарию (если они переданы из командной строки).

GATEWAY_INTERFACE

Содержит версию CGI, которую использует веб-сервер (Например, CGI/1.1).

SERVER_NAME

Имя веб-сервера, под которым текущий скрипт выполняется. Если скрипт исполняется на виртуальном веб-сервере, переменная будет содержать имя веб-сервера, которое было определено для виртуального веб-сервера.

SERVER_SOFTWARE

Идентификационная строка веб-сервера, которая передается через заголовки при ответах на запросы сервера.

SERVER_PROTOCOL

Имя и версия используемого протокола HTTP (Например, HTTP/1.1).

REQUEST_METHOD

Используемый метод запроса веб-страницы ("GET", "HEAD", "POST", "PUT").

REQUEST_TIME

Время начала запроса веб-страницы. Доступна, начиная с PHP 5.1.0

QUERY_STRING

Строка запроса веб-страницы, если она существует, через которую был получен доступ к странице.

DOCUMENT_ROOT

Корневая директория, под которой выполняется текущий скрипт. Определяется конфигурацией веб-сервера.

HTTP_ACCEPT

HTTP_ACCEPT_CHARSET

HTTP_ACCEPT_ENCODING

HTTP_ACCEPT_LANGUAGE

HTTP_CONNECTION

HTTP_HOST

HTTP_REFERER

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

HTTP_USER_AGENT

REMOTE_ADDR

IP-адрес удаленного пользователя, который обращается к текущей странице.

REMOTE_HOST

REMOTE_PORT

Порт, используемый для соединения с веб-сервером

SCRIPT_FILENAME

Абсолютный путь для текущего скрипта.

SERVER_ADMIN

Значение, задаваемое SERVER_ADMIN (для Apache). Определяется директивой конфигурации веб-сервера. Если скрипт исполняется на виртуальном хосте, то значение определяется текущими настройками виртуального хоста веб-сервера.

SERVER_PORT

Текущий порт веб-сервера, используемы для предечи данных по протоколу HTTP. По-умолчанию "80".

SERVER_SINGATURE

PATH_TRANSLATED

Базовый путь к текущему сценарию.

SCRIPT_NAME

Содержит путь и имя файла текущего исполняемого скрипта.

REQUEST_URI

URI для текущей страницы, например, " /index.html ".

PHP_AUTH_DIGEST

Если PHP работает как модуль Apache, переменная используется в аутентификации по протоколу HTTP, для проверки подлинности.

PHP_AUTH_USER

Если PHP работает как модуль Apache, либо как ISAPI IIS, данная переменная содержит имя авторизируемого пользователя при аутентификации по протоколу HTTP.

PHP_AUTH_PW

Если PHP работает как модуль Apache, либо как ISAPI IIS, данная переменная содержит пароль авторизируемого пользователя при аутентификации по протоколу HTTP.

AUTH_TYPE

Если PHP работает как модуль Apache, либо как ISAPI IIS, данная переменная содержит тип используемой аутентификации по протоколу HTTP.

Переменная $HTTP_ENV_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_ENV_VARS и $_ENV - это различные переменные).

Переменная $HTTP_COOKIE_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_COOKIE_VARS и $_COOKIE - это различные переменные).

Переменная $HTTP_GET_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_GET_VARS и $_GET - это различные переменные).

Переменная $HTTP_POST_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_POST_VARS и $_POST - это различные переменные).

Переменная $HTTP_POST_FILES содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_POST_FILES и $_FILES - это различные переменные).

Переменные сессий доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $_SESSION . На это не влияют даже настойки конфигурации PHP (php.ini).

Переменная $HTTP_SESSION_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_SESSION_VARS и $_SESSION - это различные переменные).

Сообщение последней ошибки PHP сценария: $php_errormsg

Переменная $php_errormsg содержит сообщение последней ошибки PHP скрипта.

Эта переменная будет доступна только в пределах области, в которой произошла ошибка, и только если опция track_errors конфигурации включена (по умолчанию она отключена).


Есть еще вопросы или что-то непонятно - добро пожаловать на наш

Я попытаюсь тут разъяснить то, как я подхожу к написанию сайтов, где могут применять подключаемые модули. Пример тому известный скрипт PHPNuke. Как бы не ругали его, подход, примененный в нем, к модульному программированию очень удобен. Но из-за корявости общего кода применять такой скрипт на серьезных сайтах, точнее скажем порталах, с большим количеством посетителей, не рекомендуется. Почему? Скрипт работает медленно, очень большая нагрузка на базу данных. Можно еще очень много чего описать, но это уже материал для другой статьи. Если кому интересно, то в интернете полно описаний этого движка. В <неудобоваримости> PHPNuke я убедился сам. Мой основной проект NVIDIA BIOS Collection в начала базировался на PHPNuke, но постоянные проблемы с хостингом заставили меня начать разработку своей система портала с нуля. Из PHPNuke я взять только суть модулей, все остальное же делал сам. И так для начала. Прежде всего, надо продумать систему каталогов, что и где будет лежать. Вот примерный вариант.

* /mods/ — каталог для хранения модулей
* /img/ — картинки
* /include/ — каталог вспомогательных файлов

Это что нам сейчас пока надо. Применять блоки и скины мы пока не будем. В моем портале также были другие каталоги

* /blocks/ — Тоже своего рода модули, но не выводящие сами информацию, а возвращающие заполненную переменную.
* /js/ — каталог для Java скриптов
* /theme/ — каталог выбора тем или, грубо говоря, набор скинов для сайта.
* /files/ — файлы для скачивания

ну и другие каталоги.

В корневом каталоге храниться всего один файл index.php и вся работа идет через него. Теперь надо решить как будет выглядеть сам сайт. Для нашего примера подойдет наипростейший вариант дизайна, верх сайта, низ сайта, а в середине наша информация из модулей. Для этого в каталоге include создадим два файла top.php и bottom.php, что соответственно будет верхней частью дизайна и нижней частью дизайна.

$PAGE_TITLE

здесь выводится шапка

Меню сайта

- Модуль1
- Модуль2

"; ?>

Предвижу комментарии, где скажут, почему я не вывожу HTML код отдельно, а php отдельно. Я приучил себя к написанию 100% PHP кода, с одной стороны не очень и красиво может выглядеть, но мне так удобнее. Если кто-то хочет писать по-другому, то тут я не советчик. Заметьте переменную $PAGE_TITLE в top.php. В моей реализации вся информация о модулях храниться в базе данных, где помимо имени файла модуля храниться также и его название, которое потом и кладется в $PAGE_TITLE, для вывода его в головок браузера.

"; ?>

Также создадим файл конфигурации config.php и положим его в каталог include.

Вот примерная схема работы index.php

Теперь создадим два файла mod1.php и mod2.php и положим их в каталог mods.

"; echo "А здесь можно посмотреть на модуль номер 2"; ?> mod2.php "; echo "А здесь можно посмотреть на модуль номер 1"; ?>

Поясню немного вот эту строку

if (!eregi("index.php", $PHP_SELF)) { die ("Access denied"); }

В каждый модуль желательно включать такую проверку во избежании вызова файла модуля вне самого index.php. На примере моего портала до вызова модуля у меня идет подключение в базе данных, считывание некоторых глобальных переменных и без них, ни один модуль сам по себе работать не сможет. Так что лучше всего просто запретить вызов модуля напрямую. Вызов модулей в данном случае производится через строку в виде index.php?mod=имя модуля, но тут можно применить и систему ЧПУ. Тогда URL примет вид index.php/имя модуля/

Вот в принципе очень грубая схема реализации модулей. Можно добавить любой модуль, просто положив его в каталог mods/ и придерживаясь общей концепции работы, построить очень сложный сайт. В чем удобства работы? По сути вы отодвигаете от себя основную заботу по натягиванию кода на дизайн. Это делает один раз в index.php. Сам же модуль должен только работать и приносить пользу. Централизация сбора основной информации из базы или конфигурационного файла, глобальные переменные сайта, информация о пользователе и т.д. С другой стороны есть недостатки (хотя при определенном взгляде они не кажутся недостатками), скажем надо четко следить за тем какие имена переменных используются до модуля, чтобы не перезаписать, случайно, их внутри модуля. Один раз у меня такое случилось. После такого случая, я взял для себя за правило называть системные переменные в таком виде $sys_имя переменной. Другой очевидный недостаток это трудность реализации разных вариантов дизайна для разных модулей. Но! Тут есть выход тоже.

Если взять за правило, что каждый модуль обязан сам вывести шапку и низ сайта, то вам уже предоставляется свобода по выбору что и как выводить.

К примеру, наши простые модули можно модифицировать в таком варианте.

"; echo "А здесь можно посмотреть на модуль номер 2"; include("inc/bottom.php"); ?>

Как делать в данном и конкретном случае решать Вам. Я же просто попытался направить тех, кто начинает писать на php, а может и тех, кто уже пишет, на определенный вариант или стиль программирования.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows