Как подключать PHP-файлы и зачем это вообще нужно | GeekBrains
Рассказываем об инструкциях для подключения PHP и сравниваем, как они работают
3 минуты45418Автор статьи
Анатолий Костыренко
Автор статьи
Анатолий Костыренко
https://gbcdn.mrgcdn.ru/uploads/post/2317/og_image/abcf60fe41cd67a165982ba9ff4c4aa5.png
Приветствую читателей блога! У вас наверняка уже есть небольшой опыт в кодинге на PHP. Возможно, вы уже разобрались с использованием переменных и базовых конструкций этого языка, а значит, логика вашего приложения увеличивается, как и количества кода.
Конечно, пока вся программа уменьшается в десяток строк, разбивать её на части не нужно. Но вы уже понимаете, что так будет не всегда: авторизация, отправка писем, взаимодействия с базой данных и т.д. – все это приведет к увеличению кода приложения.
Вы спросите: «Ну и что с того? Разве плохо писать всю логику в одном файле?».
- при дополнении и внесении новой логики приводит к частым ошибкам
- требует большего времени для изучения другим разработчиком
- через месяц-два при необходимости маленькой правки потребует у тебя гораздо больше времени на понимание кода, чем на саму правку.
Если этих доводов недостаточно – советую почитать книгу Роберта Мартина «Чистый код». А пока продолжу.
Представим, что у нас есть 2 файла: `index.php` и `1.php`, лежащих в одной директории.
Файл «index.php»:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> </body> </html>
Файл «1.php»:
<h2>Hello World!</h2>
Задача: вывести содержимое файла «1. php» в контейнере `body`, при запуске файла «index.php». Решить её можно разными способами, и в этом посте мы рассмотрим некоторые из них. Подключение PHP возможно с помощью разных инструкций:
- `include`
- `include_once`
- `require`
- `require_once`
Самый простой пример решения с `include`:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php include '1.php'; ?> </body> </html>
Результат запуска в браузере:
Как подключить PHP из другой директории
Теперь изменим условия. Переместим файл `1.php` в папку с названием `test`, которую создадим в директории с файлом `index.php`.
Поскольку подключаемый файл находится в другой директории, для его подключения следует указать сначала папку, в которой он находится, а потом и сам файл.
Далее изменим код в `index.php`.
<?php include 'test/1.php'; ?>
Строка, что мы указываем после инструкции `include`, это путь к файлу. Он может быть относительный (к файлу, где используется подключение) и абсолютным (от корня файловой системы). В приложениях рекомендуются использовать относительные пути.
Между папками, файлами и другими папками в пути устанавливаются разделители. Универсальный разделитель для различных операционных систем – `/`.
Если в папке `test` у нас была бы еще папка `lot`, в которой лежал файл `1.php`, то относительный путь выглядел бы так: ‘test/lot/1.php’.
С путями немного разобрались – возвращаемся к инструкциям. Произведем изменения в файлах. Файл «index.php»:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php $say = 'Hello world!'; include 'test/1. php'; echo $test; echo "<p>End</p>"; ?> </body> </html>
Файл `1.php`:
<?php echo "<h2>{$say}</h2>"; $test = 'TEst connect';
Посмотрим на изменение в выводе:
Как работает подключение кода PHP
Интерпретатор php «читает» код сверху вниз и слева направо, как мы читаем книги на русском языке. На исполнение от сервера ему указывается файл «index.php», а значит, чтение начинается с него. Дойдя до строчки с `include ‘test/1.php’`, интерпретатор пытается найти и исполнить это файл так, как будто он является частью «index.php».
Перед подключением и исполнением файла «1.php» уже существует переменная `$say`, в которой содержится ‘Hello world!’. При выполнении файла «1.php», содержимое этой переменной выводится на экран и создается переменная `$test`, которая в свою очередь и выводится на экран в файле `index.php`.
Если описанное выше непонятно, советую немного поиграться с файлами `1. php` и `index.php` создавая и выводя в них переменные.
Различия `include`, `include_once`, `require`, `require_once`
Переименуем файл «1.php»в файл «2.php» и обратимся к «index.php»:
В итоге получаем ошибку. Но обратите внимание на то, что после вывода ошибки код PHP все равно продолжил выполнение и вывел `End`. Заменим `include` на `require` и запустим на выполнение.
В итоге видим похожие ошибки, но не видим вывода `End` в конце: после ошибки код php прекратил свою работу.
Разница между `include` и `require` заключается в том, что при подключении файла PHP первая инструкция позволяет продолжить выполнения скрипта, если не найден файл, а `require` завершает его, выводя фатальную ошибку.
Теперь рассмотрим отличие инструкций `require` и `require_once`. Внесем небольшие правки в наши файлы. Вот новый «index.php»:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php $say = 'Hello world!'; require 'test/2. php'; require 'test/2.php'; require 'test/2.php'; require 'test/2.php'; echo "<p>End</p>"; ?> </body> </html>
И файл «2.php»:
<?php echo "<h2>{$say}</h2>";
Запускаем:
Как видно на скриншоте, с помощью `require` мы успешно подключили файл несколько раз. Снова внесем изменение в файлы. Новый файл «index.php»:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php require 'test/2.php'; require 'test/2.php'; require 'test/2.php'; require 'test/2.php'; echo "<p>End</p>"; ?> </body> </html>
И новый файл «2.php» — на этот раз объявим там функцию:
<?php echo '<p>Im included</p>'; function sayHello($say) { echo "<h2>{$say}</h2>"; }
Результат выполнения:
Второе подключение файла «2. php» приводит к ошибке, как раз потому что в этом файле происходит объявление функции. А в PHP-скрипте двух одинаковых функций быть не должно.
Теперь заменим все `require` на `require_once` и запустим снова:
Ура, работает! Но обратим внимание на то, что файл подключился только один раз.
Теперь вновь переименуем файл `2.php` в `1.php` и запустим «index.php».
`Require_once`, так же как и `require` завершает выполнение скрипта, если не найден файл указанный для подключения. Заменим `require_once` на `include_once`:
Ошибок стало больше, но код по-прежнему отработал до конца: end в конце картинки это подтверждает. Внесем правки в «index.php»:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php include_once 'test/1.php'; include_once 'test/1.php'; include_once 'test/1. php'; include_once 'test/1.php'; echo "<p>End</p>"; ?> </body> </html>
Запустим код:
Подведём итоги
Чтобы подключить PHP-файлы, можно воспользоваться четырьмя похожими инструкциями — `include` и `include_once`, `require` и `require_once`.
- Разница между `include` и `require`: при отсутствии файла последняя выводит фатальную ошибку, а первая — нет.
- Разница между `include` и `include_once` (а также `require` и `require_once` соответственно): инструкции с “once” проверяют перед подключением, был ли этот файл подключен ранее. Если он подключался, повторного подключения не произойдет.
- Разница между `require_once` и `include_once`: думаю, она понятна из двух предыдущих пунктов 🙂
Если вы хотите освоить PHP во всей его полноте — приглашаем вас на курсы PHP-разработки в GeekBrains. За шесть месяцев вы изучите не только работу с PHP, но и другие важные в профессии технологии — фреймворк Laravel, базы данных MS SQL и Postgre SQL, основы HTML/CSS и ООП. А также сможете пройти полноценную онлайн-стажировку!
программирование, php_developerНашли ошибку в тексте? Напишите нам.
10 клиентов веб-почты на основе AJAX и PHP для удобного взаимодействия с пользователем
Идентификатор сообщенияСотрудникам необходим доступ к электронной почте, где бы они ни находились — в дороге, на объектах клиентов, в удаленных офисах и дома. Клиенты WebMail позволяют получать и отправлять сообщения электронной почты по протоколам POP3 и SMTP как через локальные, так и через удаленные почтовые серверы. Обеспечение безопасной фильтрации небезопасного контента при просмотре сообщений электронной почты в формате HTML. Клиенты WebMail могут работать на различных популярных веб-платформах (PHP, ASP.NET, ruby on rails, java).
Сегодня я хотел поделиться с вами 10 клиентами веб-почты на основе AJAX и PHP, которые обеспечивают внешний вид, удобство использования и производительность настольного приложения. Некоторые из перечисленных ниже клиентов веб-почты имеют открытый исходный код, который можно легко изменить в соответствии с потребностями пользователя, а другие нет. Итак, Вы
Pro Tip
Зарегистрируйте бесплатную учетную запись Jotform , чтобы создавать мощные онлайн-формы за считанные минуты — без необходимости кодирования.
RoundCube Webmail — это многоязычный клиент IMAP на основе браузера с пользовательским интерфейсом, подобным приложению. Он обеспечивает полную функциональность, которую вы ожидаете от клиента электронной почты, включая поддержку MIME, адресную книгу, работу с папками, поиск сообщений и проверку орфографии. Веб-почта RoundCube написана на PHP и требует базы данных MySQL или Postgres. Пользовательский интерфейс полностью настраивается с использованием XHTML и CSS 2.
Zimbra предоставляет программное обеспечение для работы с электронной почтой и календарем с открытым исходным кодом, а также клиент AJAX на основе браузера для обеспечения богатого опыта с представлением сообщений и визуальным поиском, который делает несколько гигабайт почтовые ящики проще в использовании. Они также интегрируют сторонние приложения в виде «мэшапов» через веб-службы, чтобы вы могли просматривать данные CRM, карты или что-либо еще, не выходя из контекста сообщения.
3. Xuheki
Xuheki — это быстрый IMAP-клиент с AJAX-клиентом на основе браузера, поэтому вы можете получить к нему доступ из любого места для чтения электронной почты. Он имеет большинство функций, которые вы ожидаете от прекрасного «Почтового агента пользователя». Xuheki распространяется на условиях Стандартной общественной лицензии GNU.
SquirrelMail — это основанный на стандартах пакет веб-почты, написанный на PHP. Он включает встроенную чистую поддержку PHP для протоколов IMAP и SMTP, а все страницы отображаются в чистом HTML 4.0 (без необходимости JavaScript) для максимальной совместимости между браузерами.
AtMail, бесплатное облегченное клиентское программное обеспечение Ajax Webmail, написанное на PHP, позволяющее конечному пользователю получать электронную почту через веб-браузер и WAP-устройства. Это клиентское программное обеспечение веб-почты может быть установлено на различных платформах, таких как Windows и Linux. Кроме того, он поддерживает различные технологии электронной почты, такие как почтовые ящики IMAP / POP3, и дополнительный режим почтового сервера, который использует Exim в качестве MTA.
AfterLogic WebMail Lite PHP — это простой в использовании скрипт веб-почты с современным интерфейсом, поддерживающий AJAX и скины. Пользователи могут получать, просматривать, удалять, создавать и отправлять почту через веб-интерфейс (поддерживаются протоколы POP3 и SMTP). Несколько вложений, несколько почтовых учетных записей и доменов, панель предварительного просмотра, веб-администрирование. Простая установка, поддерживает PHP 4.1 и выше. С открытым исходным кодом и совершенно бесплатно. Может быть обновлен до версии Pro с расширенными функциями….
Live Demo
Hastymail — это полнофункциональный клиент IMAP/SMTP, написанный на PHP. Совместимость с КПК, телефонами, текстовыми браузерами и всеми распространенными браузерами. Hastymail имеет мощную систему плагинов, которую разработчики PHP могут использовать для изменения его работы. Плагины могут добавлять страницы в приложение Hastymail (включая файлы css), изменять существующие страницы, вставляя XHTML, изменять внутренние структуры данных в Hastymail, выполнять обратные вызовы AJAX с использованием своей системы AJAX и даже взаимодействовать с настроенным сервером SQL.
Mailr — это приложение веб-почты с открытым исходным кодом, написанное на Ruby и использующее инфраструктуру веб-приложений Ruby On Rails. Приложение протестировано с Courier-IMAP, но должно быть возможно использовать его с любым другим сервером IMAP.
9. Claros inTouch
Claros inTouch — это коммуникационный пакет Ajax с такими ключевыми функциями, как веб-почта, адресная книга, самоклеящиеся заметки, календарь (в процессе), веб-диск (в процессе), встроенный мессенджер и программа для чтения RSS. . Это первое веб-приложение с открытым исходным кодом, которое имеет встроенную защиту от спама и возможности обмена мгновенными сообщениями вместе с технологиями Web 2. 0. Построен на Java, использует JSP/Servlets с хорошо известными технологиями J2EE и использует базу данных MySQL.
Postaci — это почтовый клиент POP3/IMAP на основе PHP, очень простой и удобный в использовании. Он поддерживает аутентификацию SMTP. Он может работать с обоими протоколами, а протокол по умолчанию можно изменить в одном файле конфигурации. Postaci не зависит от платформы, он может работать в любой операционной системе, поддерживающей PHP. Postaci также не зависит от базы данных, его можно использовать с MySQL, mSQL, Microsoft SQL, Sybase, PostgreSQL.
Эта статья была первоначально опубликована 11 марта 2009 г. и обновлена 21 апреля 2022 г.
Учитесь жить и работать умнее, а не усерднее!
Получайте наши лучшие статьи каждую неделю прямо в свой почтовый ящик.
Введите ваш адрес электронной почты
РЕКОМЕНДУЕМЫЕ ИЗДЕЛИЯ
MailCatcher
MailCatcherЛовит почту и доставляет ее через сон.
MailCatcher запускает сверхпростой SMTP-сервер, который перехватывает любое отправленное ему сообщение для отображения в веб-интерфейсе. Запустите mailcatcher, настройте свое любимое приложение для доставки на smtp://127.0.0.1:1025 вместо SMTP-сервера по умолчанию, а затем проверьте http://127.0.0.1:1080, чтобы увидеть прибывшую почту.
Особенности
- Перехватывает всю почту и сохраняет ее для отображения.
- Показывает HTML, обычный текст и исходную версию сообщений, если применимо.
- Переписывает HTML, позволяя отображать встроенные, встроенные изображения и т. д., и открывает ссылки в новом окне.
- Список вложений и возможность отдельной загрузки частей.
- Загрузите исходное письмо для просмотра в родных почтовых клиентах.
- Параметры командной строки для переопределения настроек IP и порта SMTP/HTTP по умолчанию.
- Почта появляется мгновенно, если ваш браузер поддерживает WebSockets, в противном случае обновляется каждые тридцать секунд.
- Работает как демон в фоновом режиме, а может и в активном режиме. Команда
- Sendmail-аналог,
catchmail
, значительно упрощает использование mailcatcher из PHP. - Навигация с помощью клавиатуры между сообщениями
Как
-
гем установить mailcatcher
-
почтальон
- Перейти на http://127.0.0.1:1080/
- Отправка почты через smtp://127.0.0.1:1025
Используйте mailcatcher --help
для просмотра параметров командной строки. Смелые могут получить исходники из репозитория GitHub.
Упаковщик
Пожалуйста, не добавляйте mailcatcher в свой Gemfile. В какой-то момент это будет конфликтовать с гемами ваших приложений.
Вместо этого добавьте примечание в README о том, что вы используете mailcatcher, и для запуска gem установите mailcatcher
, затем mailcatcher
, чтобы начать.
РВМ
В RVM ваша команда mailcatcher может быть доступна только под ruby, в который вы устанавливаете mailcatcher. Чтобы предотвратить это и предотвратить конфликты гемов, установите mailcatcher в выделенный набор гемов с помощью скрипта-оболочки:
.rvm default@mailcatcher --create do gem install mailcatcher ln -s "$(rvm default@mailcatcher сделать оболочку rvm показать mailcatcher)" "$rvm_bin_path/"
Рельсы
Чтобы настроить ваше приложение rails, я рекомендую добавить это в ваш environments/development.rb
:
config.action_mailer.delivery_method = :SMTP config.action_mailer.smtp_settings = { :address => '127.0.0.1', :port => 1025} config.action_mailer. raise_delivery_errors = ложь
PHP
Для проектов, использующих PHP или PHP-фреймворки и платформы приложений, такие как Drupal, вы можете настроить конфигурацию почты PHP в файле php.ini для отправки через MailCatcher с помощью:
sendmail_path = /usr/bin/env catchmail -f [email protected]
Вы можете сделать это в конфигурации Apache следующим образом:
php_admin_value sendmail_path "/usr/bin/env catchmail -f [email protected]"
Если вы установили через RVM, это, вероятно, не сработает, если вы вручную не добавили пути к бинам RVM в PATH вашей системной среды. В этом случае запустите , который перехватит почту
, и поместите этот путь в указанную выше директиву sendmail_path
вместо /usr/bin/env catchmail
.
При запуске mailcatcher
на альтернативном SMTP IP и/или порту с такими параметрами, как --smtp-ip 192.168.0.1 --smtp-port 10025
, добавьте те же параметры в команду catchmail
:
sendmail_path = /usr/bin/env catchmail --smtp-ip 192. 160.0.1 --smtp-port 10025 -f [email protected]
Джанго
Для использования в Django добавьте следующую конфигурацию в файл settings.py вашего проекта
, если ОТЛАДКА: EMAIL_HOST = '127.0.0.1' EMAIL_HOST_USER = '' EMAIL_HOST_PASSWORD = '' EMAIL_PORT = 1025 EMAIL_USE_TLS = Ложь
API
Довольно RESTful URL-схема означает, что вы можете загрузить список сообщений в формате JSON из /messages
, метаданные каждого сообщения с /messages/:id.json
, а затем соответствующие части с /messages/:id.html
и /messages/:id.plain
для версии HTML и обычного текста по умолчанию, /messages/:id/:cid
для отдельных вложений по CID или все сообщение с /messages/:id.source
.
Предостережения
- Обработка почты довольно проста, но легко модифицируется. Если что-то не работает для вас, разветвите и исправьте это или сообщите о проблеме и дайте мне знать. Включите все сообщение, с которым у вас возникли проблемы.
- Кодировки сложны. MailCatcher не полностью поддерживает utf-8 напрямую по сети, вы должны использовать почтовую библиотеку, которая правильно кодирует вещи на основе возможностей SMTP-сервера.
ТОДО
- Добавить доставку почты по запросу, при желании несколько раз.
- Проверка совместимости с рекомендациями по дизайну CampaignMonitor и матрицей поддержки CSS.
- Перенаправить почту в службу рендеринга, возможно, в CampaignMonitor?
Спасибо
MailCatcher — это просто мешанина из тяжелой работы других людей. Большое спасибо людям, которые построили замечательные кишки, на которые опирается этот проект.
Пожертвования
Я работаю над MailCatcher в основном в свободное время. Если вы нашли Mailcatcher полезным и хотели бы помочь мне кормить меня и финансировать дальнейшее развитие и новые функции, пожалуйста, сделайте пожертвование через PayPal.