Меню Рубрики

Установка и подключение php

4 способа, как подключить PHP-файл к программе

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

Для чего нужно подключать файлы

Вначале разберемся, зачем это надо. Писать весь код в одном скрипте невозможно, непрактично и попросту странно: он разрастется до гигантских размеров и станет неудобным. Придется тратить много времени на его доработку и изменение.

PHP дает возможность дополнять программу новыми скриптами, фактически внешними кусками кода. Мы можем разложить все модули программы в разные папки, структурировать их и применять по необходимости.

Какие файлы можно подключать

Рекомендуем использовать файлы с расширением .php. Во время выполнения php-скрипта происходит следующее:

  1. В начале указанного файла прекращается парсинг в режиме PHP-кода.
  2. Он переключается в режим HTML.
  3. И продолжается снова в PHP, когда скрипт закончит работу.

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

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

4 способа, как подключить PHP-файл

Присоединить его можно четырьмя способами:

Все это — особые языковые конструкции PHP для расширения его частей. Расскажем подробнее о каждой: какова разница между ними и в каких условиях использовать.

Инструкция include

Если файл, который присоединили с помощью этой конструкции, по какой-либо причине не сможет подключиться, мы просто получим предупреждение — Warning. Если его проигнорировать, выполнение скрипта в этом файле не завершится.

Команда include используется для файлов, важность которых некритична. Мы запишем в историю, что один не подключился — «обратите внимание». Но работа программы продолжится без него.

Предположим, у нас есть файл Variable.php, а в нем следующий код:

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

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

Процесс аналогичен инструкции include. При ошибочном подключении код выглядит так:

Конструкция include с дополнением _once означает, что этот файл можно подключить только единожды. Команды без суффикса _once заставляют файл подключаться раз, второй, третий. Если объявляем директиву include_once, то он используется один раз. Это немного экономит место.

Отличается от require только отношением к количеству подключений скрипта. В коде большой программы может находиться много цепочных подключений, а внутри них могут содержаться еще другие файлы. Если использовать команду include или require, то каждый раз будет постоянно подключаться вся эта сложная цепочка.

Благодаря директиве _once файл хранится с пометкой, что он уже применялся. Мы его больше не трогаем и не используем.

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

Какой способ лучше выбрать

Мы рассмотрели все четыре возможных варианта, как подключить PHP-файл с целью расширения программы. Оптимальные среди них — конструкции с суффиксом _once.

Без _once происходит постоянное переопределение переменных. Оно может привести к алгоритмическим ошибкам. Еще возможна ошибка при вызове функции, которая находится в дважды подключенном файле. Поэтому наш выбор — include_once и require_once в зависимости от важности файлов для работы программы. Инструкции с суффиксами помогают избежать ошибок, связанных с повторным подключением.

Лайфхак от перфекциониста

Чтобы отличать основные файлы от подключаемых, вторые можно переименовать. К примеру, мы пишем сайт на PHP. Добавим .inc к основным файлам header.php, footer.php и другим. Получим названия вида header.inc.php, footer.inc.php и тому подобные. За счет этого в папке вы сразу поймете, какие скрипты основные, а какие — второстепенные.

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

Если вы начинающий PHP-программист, рекомендуем пройти курс «PHP-разработчик». Вы изучите его от азов до нюансов и станете настоящим гуру в профессии.

источник

Установка и подключение php

Есть разные способы установки всего необходимого программного обеспечения. Мы можем устанавливать компоненты по отдельности, а можем использовать уже готовые сборки на подобие Denwer или EasyPHP. В подобных сборках компоненты уже имеют начальную настройку и уже готовы для создания сайтов. Однако рано или поздно разработчикам все равно приходится прибегать к установке и конфигурации отдельных компонентов, подключения других модулей. Поэтому мы будем устанавливать все компоненты по отдельности. В качестве операционной системы будет использоваться Windows.

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

Для установки PHP перейдем на офсайт разработчиков http://php.net/. На странице загрузок мы можем найти различные дистрибутивы для операционной системы Linux. Если нашей операционной системой является Windows, то нам надо загрузить один из пакетов со страницы http://windows.php.net/download/.

Читайте также:  Установка крючка на воблер

Загрузим zip-пакет последнего выпуска PHP:

Как правило, последний выпуск PHP имеет две версии: Non Thread Safe и Thread Safe. Нам надо выбрать версию Thread Safe . Для этой версии доступны варинты для 32-битной и 64-битной систем.

Распакуем загруженный архив в папку, которую назовем php . Пусть эта папка у нас будет располагаться в корне диска C.

Теперь нам надо выполнить минимальную конфигурацию PHP. Для этого зайдем в каталог c:\php и найдем там файл php.ini-development. Это файл начальной конфигурации интерпретатора. Переименуем этот файл в php.ini и затем откроем его в текстовом редакторе.

Эта строка указывает на каталог с подключаемыми расширениями для PHP. Раскомментируем ее (убрав точку с запятой):

Так как все расширения находятся в каталоге ext .

Поскольку мы будем использовать базы данных MySQL, то нам надо указать расширение в php.ini. По умолчанию оно уже имеется в файле, только оно закомментировано:

Раскомментируем его, убрав знак точки с запятой:

Теперь по умолчанию эта библиотека будет использоваться при работе с базой данных. Также мы можем при необходимости раскомментировать и другие расширения. Но для начала нам хватит и одного.

Остальное содержимое файла оставим без изменений.

источник

Как установить PHP: все подводные камни процесса

От автора: один знакомый (еще тот «кривых дел мастер») решил самостоятельно собрать шкаф. В результате после нескольких часов мучений у него получился только стол. Вот такая метаморфоза случилась. Чтобы не оказаться в подобной ситуации, рассмотрим, как установить PHP правильно.

Без чего не будет работать PHP

PHP – не обычный язык, а серверный. Из-за этого простой установки интерпретатора языка будет мало. Чтобы вы смогли выполнять код на своем персональном компьютере, понадобится локальный сервер.

Подобного добра во всемирной паутине хватает. Перечислением достоинств и недостатков каждого из серверов мы заниматься не будем. Вместо этого опишем процесс установки проверенного временем варианта — Apache , который уже давно ассоциируется у всех с разработкой на PHP.

История данного продукта подробно описана в Википедии. Так как надежность Apache подтверждена многими годами «безжалостного» использования, то не будет на доказательство это растрачивать свое драгоценное время. Попытаемся самостоятельно установить PHP сервер на ПК под Винду.

Устанавливаем «индейца»

Рассмотрим поэтапную установку сервера из индейского племени Apache:

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Заходим на Apache.org, в меню справа жмем на «Download». После этого в предоставленном списке зеркал выбираем любое и скачиваем инсталяху с расширением .msi (родной формат под Windows) и версией не ниже 2.2

Поскольку проект является open source, то сейчас «развелось» множество сборок этого сервера. Если не можете найти указанную, перейдите по этому адресу. Здесь на зеркале доступны для скачивания родные версии Apache.

После загрузки запускаем инсталляционный пакет на выполнение. Процедура установки стандартная: соглашаемся с условиями использования, указываем имя домена и сервера, «мыло» администратора. Затем «Next».

Указываем директорию, куда следует установить PHP сервер Apache.

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

И ждем, пока пройдет процесс инсталляции ПО. Переходим в директорию, куда установили Apache. В папке конфигураций находим httpd.conf и открываем его. Находим строчку «Deny from all» и комментируем эту директиву. Таким образом мы снимаем встроенную защиту сервера, которая не нужна для локального использования Apache. То есть открываем доступ ко всем папкам, в том числе и к виртуальным. Если этого не сделать, то программа при попытке доступа к любой из директорий выдаст «403» ошибку.

Сохраните все изменения и перезапустите сервер.

Переходим к PHP

Заходим на php.net и скачиваем одну из «86» версий дистрибутива (лучше защищенную). Затем распаковываем ее в отдельной папке на том же диске, где и сервер. Я не буду полностью описывать все параметры языка, которые можно изменить. Более подробно об этом можно прочитать в сопутствующей технической документации.

Хотелось бы отметить, что все настройки PHP задаются в файле php.ini. Он открывается с помощью любого редактора (в том числе и Блокнотом). Приведу описание нескольких часто используемых параметров, которые задаются через этот файл:

post_max_size – устанавливает максимальный объем данных, которые можно за раз обработать с помощью метода POST.

upload_max_filesize – максимальный размер файлов, которые можно загрузить.

default_charset – с помощью данного параметра можно в PHP установить по умолчанию кодировку utf 8.

Теперь для полного счастья осталось прописать несколько строк в httpd.conf. С их помощью мы подключим PHP к локальному серверу, чтобы он работал в качестве модуля Apache. Этого вполне хватает для написания и тестирования кода в «домашних» условиях. Указанные строки следует разместить в середине файла:

LoadModule php5_module путь к инсталляции PHP/ php5apache2_2.dll – подключает библиотеку, с помощью которой дистрибутив будет использоваться в качестве модуля.

PHPIniDir «путь к файлу php.ini/» (например, PHPIniDir «F:/php-5.3.5/») – понятно без слов.

AddType application/x-httpd-php phtml php – настраивает соответствие между файлами PHP и mime-типом (application/x-httpd-php).

Ну как? Настройка требует времени, внимания и умения. А вы никогда не задумывались, что легче всего купить уже собранный «шкаф». Хотя в нашем случае под шкафом подразумевается уже готовый пакет ПО, в который входят и PHP, и сервер, и СУБД. Понятно, что речь идет о Денвере. Благодаря ему никакой «шкаф» не сможет превратиться под «умелыми» руками спеца в какой-нибудь «стол» или «тумбочку» .

Читайте также:  Установка win7 на gigabyte b250m

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Разработка веб-приложения на PHP

Создайте веб-приложение на PHP на примере приема платежей на сайте

источник

PHP для начинающих. Подключение файлов // PHP

В продолжении серии “PHP для начинающих”, сегодняшняя статья будет посвящена тому, как PHP ищет и подключает файлы.

Для чего и почему

PHP это скриптовый язык, созданный изначально для быстрого ваяния домашних страничек (да, да изначально это же Personal Home Page Tools), а в дальнейшем на нём уже стали создавать магазины, социалки и другие поделки на коленке которые выходят за рамки задуманного, но к чему это я – а к тому, что чем больше функционала закодировано, тем больше желание его правильно структурировать, избавиться от дублирования кода, разбить на логические кусочки и подключать лишь при необходимости (это тоже самое чувство, которое возникло у вас, когда вы читали это предложение, его можно было бы разбить на отдельные кусочки). Для этой цели в PHP есть несколько функции, общий смысл которых сводится к подключению и интерпретации указанного файла. Давайте рассмотрим на примере подключения файлов:

Если запустить скрипт index.php, то PHP всё это будет последовательно подключать и выполнять:

Когда файл подключается, то его код оказывается в той же области видимости, что и строка в которой его подключили, таким образом все переменные, доступные в данной строке будут доступны и в подключаемом файле. Если в подключаемом файле были объявлены классы или функции, то они попадают в глобальную область видимости (если конечно для них не был указан namespace).

Если вы подключаете файл внутри функции, то подключаемые файлы получают доступ к области видимости функции, таким образом следующий код тоже будет работать:

Отдельно отмечу магические константы: __DIR__ , __FILE__ , __LINE__ и прочие – они привязаны к контексту и выполняются до того, как происходит включение

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

А вы видели сайт-файл на 10 000 строк? Аж слёзы на глазах…

Функции подключения файлов

Как уже было сказано выше, в PHP существует несколько функции для подключения файлов:

  • include – включает и выполняет указанный файл, если не находит – выдаёт предупреждение E_WARNING
  • include_once – аналогично функции выше, но включает файл единожды
  • require – включает и выполняет указанный файл, если не находит – выдаёт фатальную ошибку E_ERROR
  • require_once – аналогично функции выше, но включает файл единожды

В действительности, это не совсем функции, это специальные языковые конструкции, и можно круглые скобочки не использовать. Кроме всего прочего есть и другие способы подключения и выполнения файлов, но это уже сами копайте, пусть это будет для вас “задание со звёздочкой” 😉

Давайте разберём на примерах различия между require и require_once , возьмём один файл echo.php:

И будем его подключать несколько раз:

Результатом выполнения будет два подключения нашего файла:

Существует ещё парочка директив, которые влияют на подключение, но они вам не потребуются – auto_prepend_file и auto_append_file – они позволяют установить файлы которые будут подключены до подключения всех файлов и после выполнения всех скриптов соответственно, я даже не могу придумать живой сценарий, когда это может потребоваться.

Таки придумать и реализовать сценарий по использованию директив auto_prepend_file и auto_append_file , менять их можно только в php.ini, .htaccess или httpd.conf (см. PHP_INI_PERDIR) 🙂

Где ищет?

PHP ищет подключаемые файлы в директориях прописанных в директиве include_path. Эта директива также влияет на работу функций fopen() , file() , readfile() и file_get_contents() . Алгоритм работы достаточно простой – при поиске файлов PHP по очереди проверяет каждую директорию из include_path , пока не найдет подключаемый файл, если не найдёт – вернёт ошибку. Для изменения include_path из скрипта следует использовать функцию set_include_path().

При настройке include_path следует учитывать один важный момент – в качестве разделителя путей в Windows и Linux используются различные символы – “;” и “:” соответственно, так что при указании своей директории используйте константу PATH_SEPARATOR , например:

Когда вы прописываете include_path в ini файле, то можете использовать переменные окружения типа $ :

Если при подключении файла вы прописываете абсолютный путь (начинающийся с “/”) или относительный (начинающийся с “.” или “..”), то директива include_path будет проигнорирована, а поиск будет осуществлён только по указанному пути.

Возможно стоило бы рассказать и про safe_mode, но это уже давно история (с версии 5.4), и я надеюсь вы сталкиваться с ним не будете, но если вдруг, то чтобы знали, что такое было, но прошло

Использование return

Расскажу о небольшом life-hack’е – если подключаемый файл возвращает что-либо с использованием конструкции return , то эти данные можно получить и использовать, таким образом можно легко организовать подключение файлов конфигурации, приведу пример для наглядности:

Занимательные факты, без которых жилось и так хорошо: если во включаемом файле определены функции, то они могут быть использованы в основном файле вне зависимости от того, были ли они объявлены до return или после

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

Читайте также:  Установка дачного забора из профлиста

При этом код должен работать следующим образом:

  • если в системном окружении есть переменная PROJECT_PHP_SERVER и она равна development , то должны быть подключены все файлы из папки default, данные занесены в перемененную $config , затем подключены файлы из папки development, а полученные данные должны перетереть соответствующие пункты сохраненные в $config
  • аналогичное поведение если PROJECT_PHP_SERVER равна production (естественно только для папки production)
  • если переменной нет, или она задана неверно, то подключаются только файлы из папки default

Автоматическое подключение

Конструкции с подключением файлов выглядят очень громоздко, так и ещё и следить за их обновлением – ещё тот подарочек, зацените кусочек кода из примера статьи про исключения:

Чтобы избежать подобного “счастья” была придумана функция __autoload – с её помощью можно подключать необходимые нам файлы по имени класса, но лишь при одном условии – для каждого класса создан отдельный файл по имени класса. Вот пример реализации функции __autoload() (пример из комментариев в мануале):

Класс который будем подключать:

Файл, который подключает данный класс:

Теперь о проблемах с данной функцией – представьте на минуточку ситуацию, что вы подключаете сторонний код, а там уже кто-то прописал функцию __autoload() для своего кода, и вуаля:

Чтобы такого не было, создали функцию, которая позволяет регистрировать произвольную функцию или метод в качестве загрузчика классов – spl_autoload_register, теперь index.php будет выглядеть следующим образом:

Рубрика “а вы знали?”: первый параметр spl_autoload_register() не является обязательным, и вызвав функцию без него, в качестве загрузчика будет использоваться функция spl_autoload, поиск будет осуществлён по папкам из include_path и файлам с расширением .php и .inc , но этот список можно расширить с помощью функции spl_autoload_extensions

Теперь каждый разработчик может регистрировать свой загрузчик, главное чтобы имена классов не совпадали, но это не должно стать проблемой, если вы используете пространства имён.

Поскольку уже давно существует такой продвинутый функционал как spl_autoload_register() , то функцию __autoload() хотят заявить как deprecated в PHP 7.1, а это значит, что в 7.2 её и вовсе может не быть

Ну более-менее картина прояснилась, хотя погодите, все зарегистрированные загрузчики становятся в очередь, по мере их регистрации, соответственно если кто-то нахимичил в своё загрузчике, то вместо ожидаемого результата может получится очень неприятный баг. Чтобы такого не было, взрослые умные дядьки описали стандарт, который позволяет подключать сторонние библиотеки без проблем, главное чтобы организация классов в них соответствовала стандарту PSR-0 (уже устарел) или PSR-4. В чём суть требований описанных в стандартах:

  1. Каждая библиотека должна жить в собственном пространстве имён (т.н. vendor namespace)
  2. Для каждого пространства имён должна быть создана собственная папка
  3. Внутри пространства имён могут быть свои подпространства – тоже в отдельных папках
  4. Один класс – один файл
  5. Имя файла с расширением .php должно точно соответствовать имени класса
Полное имя класса Пространство имён Базовая директория Полный путь
\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php
\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
\Zend\Acl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

Различия этих двух стандартов, лишь в том, что PSR-0 поддерживает старый код без пространства имён, а PSR-4 избавлен от этого анахронизма, да ещё и позволяет избежать ненужной вложенности папок.

Благодаря этим стандартам стало возможно появление такого инструмента как composer – универсального менеджера пакетов для PHP:

PHP-инъекция

Ещё хотел рассказать о первой ошибки всех, кто делает единую точку входа для сайта в одном index.php и называет это MVC-фреймворком:

Смотришь на код, и так и хочется чего-нить вредоносного туда передать:

Первое, что приходит на ум – принудительно добавлять расширение .php , но в ряде случаев это можно обойти “благодаря” уязвимости нулевого байта (почитайте, эту уязвимость уже давно исправили, но вдруг вам попадётся интерпретатор более древний, чем PHP 5.3, ну и для общего развития тоже рекомендую):

В современных версиях PHP наличие символа нулевого байта в пути подключаемого файла сразу приводит к соответствующей ошибке подключения, и даже если указанный файл существует и его можно подключить, то в результате всегда будет ошибка, проверяется это следующим образом strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename) (это из недров самого PHP)

Так же существует “чудесная” директива allow_url_include (у неё зависимость от allow_url_fopen), она позволяет подключать и выполнять удаленный PHP файлы, что куда как опасней для вашего сервера:

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

Написать скрипт, который позволит подключать php-скрипты из текущей папки по названию, при этом следуют помнить о возможных уязвимостях и не допустить промашек.

В заключение

Данная статья – основа-основ в PHP, так что изучайте внимательно, выполняйте задания и не филоньте, за вас никто учить не будет.

источник

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

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