Как открыть php файл в браузере через apache
Молодец. Устанавливать Apache, PHP, MySQL лучше всего самому, так как при этом ты получишь ценные знания, а сборки лучше не использовать.
Q. Как менять настройки PHP? Например, объем памяти или максимальное время работы скрипта?
Редактируй файл php.ini в папке PHP и перезапусти сервер (если он у тебя есть). Формат этого файла и настройки описаны в мануале, гугли. Если ты накосячишь и неправильно отредактируешь файл, PHP может перестать запускаться.
Q. Что еще за Апач? Зачем он нужен?
Без Апача ты только можешь запускать скрипты из командной строки (это такое черное окошко с белыми буквами).
Q. Где скачать Апач для Винды? На официальном сайте написано, хрен вам, а не бинарники, компилируйте сами! А если искать в Гугле то предлагают скачать трояны и вирусы.
Q. Какую версию качать? Там их много!
Q. Я установил, но он пишет при запуске что ему не хватает какой-то MSVCRT.dll
На сайте apachelounge написано, а ты не прочел, что надо установить дополнительно библиотеку Visual C++ Redistributable for Visual Studio (не саму Visual Studio) с сайта майкрософт. Вернись и найди ссылку.
Q. Где менять настройки Апача?
Q. Я редактировал настройки и не уверен, что они правильные. Можно их как-то проверить?
Да, в командной строке набрать
Q. Ок, я установил Апач, как его запускать и останавливать?
Либо через программу Apache Monitor, либо зайти в Панель управления — Службы и найти там Апач, либо Пуск -> services.msc и найти там Апач, либо командой в консоли net start apache2.4 или net stop apache2.4
Q. Я установил Апач, но он не стартует, пишет непонятную фигню. У меня запущен скайп и торренты и пара игрушек, может в этом дело?
Q. Я установил Апач, как проверить, что он работает?
Q. Что такое localhost ? Что такое 127.0.0.1?
127.0.0.1 (и любой другой IP который начинается с 127) — это IP адрес твоего собственного компьютера (так называемый loopback interface — интерфейс обратной петли (согласен, странный перевод)). То есть при попытке соединиться с этим адресом данные не отправляются в сеть, а соединение обрабатывает программа на твоем компьютере, например, Апач.
localhost — это имя домена, которое соответствует адресу 127.0.0.1 и которое прописано в файле hosts
Q. Что такое файл hosts?
Это файл, в нем можно написать какому IP-адресу соответствует домен, и эта запись будет иметь приоритет перед DNS-сервером (обычно для определения IP по домену используется он).
Q. Если я переставлю Апач не на порт 80, а на другой порт, как открыть страницу? localhost не работает
Q. А что это, такое, порт?
Гугли в википедии TCP-протокол и TCP-порт. Программист должен это знать.
Q. Ок, Апач и PHP я установил, но Апач не выполняет PHP-файлы, а просто показывает их исходный код. Бу :(
Все пути естественно надо заменить на правильные.
Q. Когда я открываю браузером php-файл, он не выполняет код, а выводит белую страницу или куски слов
Проверь, что в адресной строке браузера. Если там написано что-то вроде
Q. Ок, я все настроил но при попытке открыть php-файл через браузер и веб-сервер я все равно вижу белый экран
Может быть в твоем файле ошибка и он не запускается, а в PHP у тебя выключено отображение ошибок. Читай дальше.
Q. Если при работе с Апач или PHP вознимают ошибки и предупреждения, но они не выводятся на экран, где искать их текст?
В логах, естественно. Расположение логов задается настройками Апача, директивами ErrorLog и CustomLog, по умолчанию они указывают в папку logs в папке Апача. Логи надо уметь читать.
Q. А можно выводить ошибки PHP на страницу в браузере?
Ты можешь включить отображение ошибок. Открой файл php.ini, напиши или исправь там display_errors = On и error_reporting = E_ALL и перезапусти веб-сервер. Теперь ошибки должны выводиться на экран. Никогда не делай так на боевых серверах - посетители не должны видеть подробности ошибок.
Q. Если можно выводить ошибки на экран, зачем логи, не понимаю?
Ты дубовая голова. Представь, что у тебя есть сайт. И у кого-то из посетителей во время обработки запроса произойдет ошибка. Ночью, когда ты спишь. Как ты о ней узнаешь? Только прочитав утром логи.
Q. Как посмотреть текущие настройки PHP?
Сделай файл 1.php c содержимым
и открой его через браузер.
Q. Ну офигеть, неужели нельзя было сделать простой удобный установщик с кнопкой Далее?
Нет, нельзя. Это программы для суровых бородатых программистов, а не блондинок из гламурного журнала. Те, кто использует сборки вместо хардкорной самостоятельной установки, становятся на шаг ближе к блондинкам. Так что иди и удали денвер.
Плюс, когда ты правишь текстовый конфиг, ты можешь скопировать кусочек конфига, можешь опубликовать его на форуме, можешь делать поиск по тексту, можешь сохранить конфиг и восстановить из бекапа. А можешь ли ты так же сделать с программой, где настройки делаются галочками и кнопочками? То-то!
Q. Ок, Апач работает, PHP работает. Но меня напрягает, что у меня только один хост — localhost. Я бы хотел иметь несколько сайтов на компе с разными адресами.
Это файл, в котором задается соответствие между именем домена и Ip-адресом. Там допиши что-то вроде:
Директива ErrorLog задает файл, в который надо писать информацию о произошедших ошибках.
Q. Что такое DocumentRoot?
Корневая папка сайта
Q. А ничего, что я несколько сайтов в файле hosts вешаю на один и тот же адрес, 127.0.0.1?
Ничего. Браузер при соединении с сервером шлет в заголовках имя сайта, который он хочет открыть, так что проблем не будет.
Q. Так, а MySQL надо ставить?
Надо. У него установщик с кнопочками, так что это не сложно. Скачай MySQL Community Server, и при установке не ставь все подряд, а только MySQL Server (обязательно) и Workbench (по желанию).
Q. У меня тут установлен WAMP, OpenServer и XAMPP. Это же не помешает?
Как сказать. Как раз может помешать. Это сборки, содержащие Apache/PHP/MySQL. Если любая из них запущена, то Апач в ней занимает порт 80 не давая запуститься другим Апачам на том же порту. Также, они могут присутствовать в списке служб и сбивать тебя с толку. Лучшее решение — удалить эти сборки через официальное удаление (не удалением файлов).
Q. Спрошу еще раз. А как запускать/останавливать/перезапускать Апач? Я что-то не вижу кнопок.
Апач — консольная программа, у него нет кнопок. Ты можешь:
Q. Ты упомянул «перезапустить Апач». Зачем и как это делать?
Если ты поменял настройки в конфиге, Апач сам их не применит. Ты должен его перезапустить, под Windows перезапуск делается остановом службы и повторным запуском.
Q. Как узнать список подключенных в PHP расширений?
Набери команду php -m в консоли. Возможно придется дописать полный путь к php.exe вместо слова «php». А команда php -i выведет подробную информацию о текущих настройках PHP.
Выбирайте самую последнюю версию, с той битностью, какая у вашего сервера. Т.е. если у вас Apache 64-битный, то PHP также должен быть 64-битным. Всегда выбирайте Thread Safe версию.
Для каждого файла имеется две ссылки:
Выбирайте Zip, поскольку отладочный пакет только для тех, кто действительно знает, зачем он им нужен. Здесь имеется ввиду не отладка PHP-скриптов, а отладка самого интерпретатора PHP.
Настройка PHP в Windows
Настройка выполняется в два этапа:
- подключение PHP к Apache
- изменение настроек самого PHP (какие расширения включены, сколько выделено памяти PHP скриптам и т.д.)
Подключение PHP к Apache
В этот файл добавьте три строки, две из которых нужно откорректировать:
В первой строке вместо C:/путь/до/PHP напишите точный путь до папки, куда вы распаковали файлы PHP. В третьей строке C:/путь/до/PHP/php8apache2_4.dll также откорректируйте путь, указав расположение PHP папки.
К примеру, я распаковал PHP в папку C:/Server/bin/PHP, тогда мои настройки следующие:
Если папка PHP находится в корне диска C, тогда эти строки должны быть такими:
Чтобы изменения вступили в силу, перезапустите веб-сервер или компьютер.
Настройка PHP
В папке PHP найдите файл php.ini-development и переименуйте его в php.ini – это нужно сделать обязательно, иначе PHP не будет видеть сделанные настройки.
Открываем файл php.ini любым текстовым редактором, ищем строчку
и заменяем её на
Обратите внимание, что вам нужно скорректировать строку C:\путь\до\PHP\ext\, указав конкретный путь до папки, где размещены файлы PHP.
У PHP (как и у Apache) имеется много расширений. Если вы не знаете, какое расширение для чего нужно, то как минимум два варианта:
- начать изучить предназначение каждого расширения и подключить только те, которые вам действительно нужны;
- подключить самые важные расширения, чтобы любые сайты и движки работали без ошибок.
Чтобы подключить большую часть расширений, найдите группу строк:
и замените её на:
теперь раскомментируйте эту группу строк:
Мы подключили самые востребованные расширения, чтобы работало как можно больше функций PHP.
Веб-сервер — это программа, которая предназначена для обработки запросов к сайтам и отправки пользователям страниц веб-сайтов. Самый популярный пример веб-сервера это Apache.
PHP — это язык программирования. Также называется среда для выполнения скриптов, написанных на PHP. В операционной системе, в том числе и Windows, PHP может быть установлен самостоятельно, без веб-сервера. В этом случае программы (скрипты) на PHP можно запускать из командной строки. Но веб-приложения очень часто используют PHP, данный интерпретатор стал, фактически, стандартом веб-серверов и поэтому они почти всегда устанавливаются вместе.
MySQL — это система управления базами данных (СУБД). Это также самостоятельная программа, она используется для хранения данных, поиска по базам данных, для изменения и удаления данных. Веб-приложения нуждаются в постоянном хранилище, поэтому для веб-сервера дополнительно устанавливается и СУБД. Кстати, вполне возможно, что вы слышали про MariaDB — это тоже СУБД. Первой появилась MySQL, а затем от неё ответвилась MariaDB. Для веб-приложений обе эти СУБД являются взаимозаменяемыми, то есть никакой разницы нет. В этой инструкции я буду показывать установку на примере MySQL, тем не менее если вы хотите попробовать новую MariaDB, то смотрите статью «Инструкция по установке веб-сервера Apache c PHP, MariaDB и phpMyAdmin в Windows».
Что касается phpMyAdmin, то это просто скрипт на PHP, который предназначен для работы с базами данных — наглядно выводит их содержимое, позволяет выполнять в графическом интерфейсе такие задачи как создавать базы данных, создавать таблицы, добавлять, изменять и удалять информацию и т. д. По этой причине phpMyAdmin довольно популярен, хотя и не является обязательной частью веб-сервера.
Особенность Apache и других компонентов веб-сервера в том, что их корни уходят в Linux. И эти программы применяют в своей работе основные концепции этой операционной системы. Например, программы очень гибки в настройке — можно выполнить установку в любую папку, сайты также можно разместить в любой папке, в том числе на другом диске, не на том, где установлен сам веб-сервер. Даже файлы журналов можно вынести на третий диск и так далее. У веб-сервера много встроенных модулей — можно включить или отключить их в любом сочетании, можно подключить внешние модули. Можно создать много сайтов на одном веб-сервере и для каждого из них установить персональные настройки. Но эта гибкая настройка выполняется через текстовые файлы — именно такой подход (без графического интерфейса) позволяет описать любые конфигурации
Не нужно этого боятся — я расскажу, какие файлы нужно редактировать и что именно в них писать.
Мы не будем делать какие-то комплексные настройки — наша цель, просто установить веб-сервер на Windows. Тем не менее было бы странно совсем не использовать такую мощь в настройке. Мы разделим сервер на две директории: в первой будут исполнимые файлы, а во второй — данные (файлы сайтов и баз данных). В будущем, когда возникнет необходимость делать резервные копии информации или обновлять веб-сервер, вы поймёте, насколько удобен этот подход!
Мы установим сервер в отдельную директорию. Для этого в корне диска C:\ создайте каталог Server. В этом каталоге создайте 2 подкаталога: bin (для исполнимых файлов) и data (для сайтов и баз данных).
Перейдите в каталог data и там создайте подпапки DB (для баз данных) и htdocs (для сайтов).
Перейдите в каталог C:\Server\data\DB\ и создайте там пустую папку data.
Для работы всех компонентов веб-сервера необходим файл «Visual C++ Redistributable for Visual Studio 2015-2022» - это официальный файл от Microsoft. Чтобы его скачать перейдите по ссылке. После скачивания, запустите этот файл и выполните установку.
Подготовительные действия закончены, переходим к установке компонентов веб-сервера.
Как установить Apache на Windows
Распакуйте папку Apache24 из этого архива в C:\Server\bin\.
В нём нам нужно заменить ряд строк.
Сохраняем и закрываем файл. Всё, настройка Apache завершена! Описание каждой изменённой директивы вы найдёте на этой странице.
Откройте командную строку (это можно сделать нажав одновременно клавиши Win+x).
Выберите там Windows PowerShell (администратор) и скопируйте туда:
Если поступит запрос от файервола в отношение Apache, то нажмите Разрешить доступ.
Теперь вводим в командную строку:
И нажмите Enter.
Это означает, что веб-сервер работает. Чтобы увидеть там файлы, добавьте их в каталог c:\Server\data\htdocs\ - это главная папка для данных сервера, где будут размещаться все сайты.
Как установить PHP на Windows
В папке c:\Server\bin\ создаём каталог PHP и копируем в него содержимое только что скаченного архива.
И перезапускаем Apache:
В каталоге c:\Server\data\htdocs\ создаём файл с названием i.php, копируем в этот файл:
Настройка PHP 8
Настройка PHP происходит в файле php.ini. В zip-архивах, предназначенных для ручной установки и для обновлений, php.ini нет (это сделано специально, чтобы при обновлении случайно не удалить ваш файл с настройками). Зато есть два других, которые называются php.ini-development и php.ini-production. Любой из них, при ручной установке, можно переименовать в php.ini и настраивать дальше. На локалхосте мы будем использовать php.ini-development.
Открываем файл php.ini любым текстовым редактором, ищем строчку
и заменяем её на
Теперь найдите группу строк:
и замените её на:
теперь раскомментируйте эту группу строк:
Этими действиями мы включили расширения. Они могут понадобиться в разных ситуациях для разных скриптов. Сохраняем файл и перезапускаем Apache.
Материалы по дополнительной настройке, в том числе подключение поддержки PERL, Ruby, Python в Apache (только для тех, кому это нужно):
Как установить MySQL в Windows
На странице скачивания нам предлагают зарегистрироваться или войти в существующую учётную запись - но это делать необязательно. Достаточно нажать на ссылку «No thanks, just start my download».
В каталог c:\Server\bin\ распаковываем файлы из только что скаченного архива. Распакованная папка будет называться примерно mysql-8.0.17-winx64 (зависит от версии), переименуйте её в mysql-8.0.
Заходим в эту папку и создаём там файл my.ini. Теперь открываем этот файл любым текстовым редактором и добавьте туда следующие строки:
Сохраните и закройте его.
Настройка завершена, но нужно ещё выполнить инициализацию и установку, для этого открываем командную строку от имени администратора и последовательно вводим туда:
По окончанию этого процесса в каталоге C:\Server\data\DB\data\ должны появиться автоматически сгенерированные файлы.
Теперь служба MySQL будет запускаться при каждом запуске Windows.
Как установить phpMyAdmin в Windows
Прямая ссылка на самую последнюю версию: phpMyAdmin-latest-all-languages.zip.
В каталог c:\Server\data\htdocs\ копируем содержимое только что скаченного архива. Переименовываем эту папку в phpmyadmin.
В каталоге c:\Server\data\htdocs\phpmyadmin\ создаём файл config.inc.php и копируем туда:
В качестве имя пользователя вводим root. Поле пароля оставляем пустым.
Заключение
Вот и всё — теперь у вас есть свой персональный локальный веб-сервер на своём домашнем компьютере.
Если вдруг у вас что-то не получилось, то скорее всего вы пропустили какой-то шаг или сделали его неправильно — попробуйте всё сделать в точности по инструкции. Если проблема осталась, то ознакомьтесь со справочным материалом «Ошибки при настройке и установке Apache, PHP, MySQL/MariaDB, phpMyAdmin» и если даже он не помог, то напишите о своей ошибке в комментарии.
Большое количество материалов по Apache на русском языке специально для Windows вы найдёте на этой странице.
Этот раздел содержит инструкции по установке PHP для Apache 2.x на системы Microsoft Windows. Мы также имеем инструкции для пользователей Apache 1.3.x на отдельной странице.
Замечание: Поддержка Apache 2.2
Пользователям Apache 2.2 следует обратить внимание на то, что DLL файл для Apache 2.2 называется php5apache2_2.dll , а не php5apache2.dll и он доступен только для PHP 5.2.0 и более поздних версий.
Вам настоятельно рекомендуется ознакомиться с » Документацией по Apache, чтобы получить базовые знания о Apache 2.x Server. Также перед чтением данной справки обратите внимание на » Рекомендации для Windows по Apache 2.x.
Apache 2.x предназначен для работы в серверных версиях Windows, таких как Windows NT 4.0, Windows 2000, Windows XP или Windows 7. Хотя Apache 2.x может использоваться на Windows 9x, эти платформы не поддерживаются полностью, и некоторые функции не будут работать правильно. Исправление этой ситуации не планируется.
Скачайте наиболее актуальную версию » Apache 2.x и подходящую версию PHP. Следуйте Пошаговому руководству по установке и вернитесь для продолжения интеграции PHP и Apache.
Существует три пути установки PHP для Apache на Windows. Вы можете запустить PHP как обработчик, как CGI, или под FastCGI.
Замечание: Помните, что при указании путей в конфигурационных файлах Apache под Windows, все обратные слеши, например, c:\directory\file.ext должны быть изменены на прямые: c:/directory/file.ext . Для путей с директориями также может понадобиться слеш в конце.
Установка PHP как обработчика под Apache
Замечание: Не забудьте указать актуальный путь к директории PHP вместо C:/php/ в приведенном примере. Позаботьтесь, чтобы в директиве LoadModule использовались либо php5apache2.dll либо php5apache2_2.dll и удостоверьтесь, что указанный файл фактически находится по пути, который вы указали в директиве.
Приведенная выше конфигурация позволит PHP обработать любой файл, который имеет расширение .php, даже если имеются другие расширения. К примеру, файл с именем example.php.txt будет запущен обработчиком PHP. Чтобы гарантировать, что только файлы, которые имеют расширение .php будут запущены, используйте следующую конфигурацию:
Запуск PHP как CGI
Вы должны обратиться к документации » Apache CGI для более полного понимания о запуске CGI под Apache.
Для запуска PHP как CGI, вам необходимо поместить ваши php-cgi файлы в директорию, обозначенную как директория CGI, используя директиву ScriptAlilas.
Используя установку CGI, ваш сервер открыт перед несколькими возможными уязвимостями. Пожалуйста, ознакомьтесь с разделом "Безопасность CGI" чтобы узнать, как можно защитить себя от таких атак.
Запуск PHP под FastCGI
Запуск PHP под FastCGI имеет ряд преимуществ по сравнению с запуском как CGI. Установка же довольно проста:
Настроить свой веб сервер как указано ниже, позаботившись о соответствии всех путей установки на вашей конкретной системе:
HTML файл содержит текст страницы и специальные теги (метки) вроде , которые разбивают этот текст на абзацы, заголовки, позволяют добавлять в него ссылки, картинки, формы и многое другое. Ты можешь увидеть полученный от сервера HTML-код любой страницы в интернете, зайдя на нее и нажав Ctrl + U в браузере или выбрав в меню что-то вроде "Вид" - "Показать исходный код страницы".
Заголовок Content-Type влияет на то, как именно браузер отобразит содержимое. Если там будет например указано image/png , то браузер будет воспринимать тело ответа как картинку в формате PNG и попытается его отобразить. Конструкция вроде image/png называется MIME-тип, она состоит из 2 частей: общего типа данных ( image , text , audio ) и конкретного формата файла. Подробнее про MIME-типы можно почитать в Википедии.
Этот ответ отличается от предыдущего кодом состояния. В данном случае он равен 404 , что значит "запрошенный файл отсутствует на сервере". Тело ответа содержит HTML-код с текстом ошибки ("Page . not found on this server"), которая будет показана пользователю.
Вот самые распространенные коды состояний:
- 200 Ok - все ок, тело ответа содержит запрошенный файл
- 500 Internal Server Error - сервер не смог обработать запрос из-за ошибки на нем
- 404 Not Found - запрошенный файл не был найден на сервере (скорее всего, неправильно указан URL в запросе)
- 403 Access Denied - доступ к запрошенному файлу запрещен
- 301 Moved Permanently - запрошенный файл находится теперь по другому адресу, который указан в заголовке ответа Location . Браузер должен сделать новый запрос по этому адресу.
- если тебе интересно, можешь глянуть полный список кодов состояний в Википедии
Этот запрос точно так же содержит стартовую строку, заголовки запроса, и тело запроса (в GET-запросе выше тела не было), в котором передаются введенные в форму пользователем данные (логин и пароль). Заголовок Content-Type указывает, что в теле содержатся данные из формы и указывает способ их кодирования, а заголовок Content-Length содержит размер данных в байтах.
Что отправит сервер в ответ на этот запрос, зависит от того, как программа на сервере будет обрабатывать эти данные.
Статические и динамические страницы
Например, статический сайт хорошо подходит для публикации документации, информационного сайта, финансового отчёта, книги, какой-то информации, которая редко обновляется.
Также, статический сайт имеет одну особенность: так как это просто набор файлов, то его можно просматривать даже без веб-сервера и связи с интернетом. Достаточно сохранить HTML-файл со страницей себе на компьютер (например, нажав Ctrl + S в браузере), после этого её можно открыть и просмотреть в браузере (дважды кликнув или перетащив его в окно браузера). Или можно сделать архив с содержимым сайта и раздавать пользователям.
Динамические сайты сложнее сделать, в них чаще бывают ошибки, при неправильном написании возможны уязвимости, они сильнее нагружают процессор и память сервера (на 2019 год типичный статический сайт может обработать десятки тысяч запросов в секунду, а динамический - несколько сотен), но зато они позволяют реализовать взаимодействие с пользователями. Например, при отправке пользователем комментария программа может добавлять его в базу данных и он появится на странице.
Также, на динамическом сайте возможно сделать редактирование и добавление информации на сайт не с помощью правки кода, а через "админку" ("админка" - это административный интерфейс, закрытая часть сайта, позволяющая управлять им). Это позволяет заказать разработку сайта, а далее обновлять его без участия программиста и необходимости оплачивать его труд. Потому большинство сайтов в интернете - динамические.
Наконец, возможны и смешанные подходы. Например, можно сделать динамический сайт с ограниченным доступом, на котором производится редактирование информации, и публичный сайт на статической схеме. Редактор добавляет информацию на динамическом сайте, жмет кнопку публикации, и генерируется статическая копия сайта, которая выгружается на публично доступный сервер. Это позволяет совместить плюсы обоих подходов. По такой схеме работают некоторые государственные сайты.
Итак, для того, чтобы отобразить в браузере какую-то страницу, нам нужен веб-сервер (чтобы отвечать на запросы браузера). Есть несколько разных программ-серверов, например Apache, Nginx, но мы начнем с изучения простого веб-сервера, встроенного в интерпретатор php.
Сначала нам необходимо установить PHP себе на компьютер (или получить доступ к линукс-серверу, где он уже установлен). Как именно устанавливать PHP, зависит от операционной системы:
- для Windows - инструкции описаны в уроке по установке PHP на Windows
- для линукс - способ зависит от используемого дистрибутива. Например, в дебиан или убунту это делается командой sudo apt-get install php5 , в других дистрибутивах - немного другой командой. Погугли
- для MacOS X - погугли
- для андроида - придется помучиться. На июль 2016 года актуальна такая последовательность действий: для начала надо установить scripting layer for android - скорее всего его нет в Google Play, и надо установить apk файл вручную (будь осторожен, то что в Google Play находится по словам sl4a - это какие-то посторонние приложения). Затем из этого приложения надо установить PHP. И тогда появится возможность открыть окно командной строки и запускать сам PHP.
PHP - это программа командной строки. Это значит, что у него нет никакого графического интерфейса с кнопками и окнами, а для выполнения какого-то действия надо набрать в командной строке правильную команду. Потому сначала рекомендую изучить наш урок по использованию командной строки. Настройки php задаются в файле php.ini, который в linux лежит в /etc/php/, а в Windows - в папке с PHP, но нам пока не требуется их менять.
Проверь, что ты смог правильно установить PHP. Для этого набери команду
Если все верно, то она выведет информацию о версии установленного интерпретатора PHP (если у тебя PHP не находится в PATH , то вместо php придется писать полный путь к файлу, например c:\php\php.exe ). Еще одна полезная команда - это php -i - она выводит информацию о текущих настройках PHP. Все возможные опции, которые можно указать, перечислены в мануале по использованию php.
Встроенный в PHP сервер
В интерпретатор PHP встроен простой веб-сервер. Его не стоит использовать на реальном сайте, но он годится для того, чтобы запускать простые скрипты на своем компьютере.
Инструкции ниже требуют знания командной строки, если ты не знаешь ее, то прочти сначала урок по ней.
Итак, в PHP встроен простейший веб-сервер для разработчиков. Чтобы запустить его, создай папку, из которой будут раздаваться файлы, она называется корень сервера или document root. Допустим, это d:\server. Открой командную строку и перейди в эту папку, а затем запусти веб-сервер, набрав следующие команды. После каждой команды надо нажимать клавишу Enter. Будь внимателен при их наборе, не пропускай пробелы, не путай прямую и обратную наклонную черту:
(если ты работаешь не под Windows, то команды будут иметь немного другой вид). Если тебе лень писать каждый раз эти команды вручную, то в уроке по командной строке описано, как можно поместить их в bat-файл, который можно запускать просто двойным кликом по иконке.
-S обозначает «запуститься в режиме веб-сервера». Надо написать именно заглавную S, c маленькой буквой не заработает. localhost (вместо него можно еще писать 127.0.0.1 - это твой собственный адрес) обозначает принимать соединения только со своего компьютера, и не принимать соединения с других устройств (если хочешь чтобы твой сервер был доступен во всей локальной сети, пиши вместо localhost адрес 0.0.0.0 — после этого к тебе можно будет зайти по ip).
9001 — это номер порта, на котором сервер будет ждать соединения от браузера. Если произойдет ошибка и будет написано что этот порт уже занят, введи другое число (от 1 до 65534), например 9002. Вообще-то обычно для веб-сервера используется порт 80, но у тебя он может быть занят другими программами - например, скайпом, торрентокачалкой или чем-то еще (если это так, стоит зайти в их настройки и запретить его использовать на будущее). Также ты можешь увидеть список занятых портов командой netstat -an , а команда netstat -abn покажет программу, занявшую порт (нужно запускать эту команду из консоли с повышенными привилегиями).
Учти что в линуксе и маке, чтобы открыть порт ниже 1024, нужны права администратора (то есть сервер надо запускать через sudo: sudo php . , что не очень безопасно и не рекомендуется).
Номер порта нужен для того, чтобы на компьютере можно было одновременно запустить несколько работающих с сетью программ. Мы назначаем каждой из них свой номер порта. Когда на компьютер приходят данные из сети, ОС по номеру порта понимает какой именно программе они адресованы. Две программы не могут использовать одновременно один и тот же порт. Подробнее о TCP-портах.
Завершить работу сервера можно, нажав Ctrl + C или закрыв окно консоли. Сервер будет в процессе работы писать в консоль информацию о поступающих от браузера запросах и информацию о возникающих ошибках.
Теперь надо проверить, как работает наш сервер. По умолчанию веб-сервер просто отдает файлы из корневой папки, путь к которым указан в URL. Создай в папке сервера файл, например 1.txt и напиши в нем текст, например hello world (латиницей, чтобы не беспокоиться о кодировках). После этого открой браузер и введи в адресную строку адрес
Если все верно, ты должен увидеть содержимое текстового файла, а в консоли появится строчка с этим запросом. Если что-то не работает - перепроверяй, запущен ли php, что он пишет в консоль, правильно ли ты написал слово localhost и номер порта.
Повторим еще раз, что происходит в этом случае:
- браузер соединяется с веб-сервером на порту 9001
- браузер отправляет запрос на получение файла cat.jpg
- сервер обрабатывает запрос, находит файл и отправляет ответ с кодом 200 , заголовком Content-Type: image/jpg и содержимым файла в теле ответа
- браузер извлекает картинку из тела ответа и отображает на экране
Разумеется, веб-сервер и браузер не обязательно запускать на одном и том же компьютере. Можно запустить веб-сервер на одном компьютере, и делать запрос из браузера с другого компьютера - все будет работать точно так же. Именно это и происходит, когда ты заходишь на какой-то сайт - твой браузер запрашивает и отображает файлы с удаленного компьютера.
Пока мы запрашивали текстовые файлы и картинки, сервер в PHP отдавал их как статические файлы. Но сервер умеет еще генерировать страницы динамически. Если мы запросим PHP-файл, то веб-сервер вместо отдачи этого файла запустит записанный в нем код и отдаст в браузер то, что выводит этот код.
Создадим в корневой папке файл 1.php с таким содержимым:
Обрати внимание, что браузер сам не умеет выполнять PHP-код. Он лишь посылает запрос на сервер и отображает то, что придет в ответ. PHP-код выполняет именно сервер.
Если ты видишь вместо него белую страницу, а исходный код в браузере показывает текст скрипта - значит скрипт не выполнился. Проверь, правильный ли URL в адресной строке браузера. Если там что-то вроде file://d:/server/1.php - значит ты невнимательно прочел инструкции выше. Протокол file:// обозначает, что браузер открывает файл напрямую с диска, а не запрашивает с веб-сервера, и потому PHP-код не будет выполняться.
Если при выполнении скрипта возникают какие-то ошибки, они отображаются в консоли, где запущен сервер. Не забывай туда поглядывать.
Наконец, давай сделаем еще один файл, который показывает текущие настройки PHP и который пригодится нам если что-то пойдет не так. Создай файл info.php с текстом:
И открой через браузер. Ты увидишь большую синюю таблицу - поизучай ее, она пригодится тебе не раз, когда ты будешь разбираться почему что-то не работает.
Передача аргументов в скрипт
Если пользователь не укажет в URL значения x и y , то PHP не поместит их в массив $_GET . Когда наш скрипт попытается обратиться к $_GET['x'] , произойдет ошибка. Потому мы делаем проверку, что в массиве есть такой элемент, и если его нет, то присваиваем переменной значение 0. Если элемент есть, то мы обрабатываем значение функцией floatval, которая преобразует любое значение в целое или дробное число. Даже если пользователь вместо числа напишет бессмысленное значение вроде x=xyz , в программе не произойдет ошибки.
В PHP7 добавили новый оператор объединения с null, с помощью которого можно чуть упростить код:
В этом месте ты можешь достать свои старые задачи, которые ты делал на PHP, и попробовать позапускать их через сервер и браузер.
Разумеется, вручную вписывать аргументы в URL (особенно, если они содержат спецсимволы) не очень удобно. В языке HTML есть возможность помещать на страницу формы с полями ввода, выпадающими списками, чекбоксами и радиокнопками. При заполнении такой формы и нажатии кнопки отправки браузер сам соберет URL с добавлением введенных значений и отправит запрос на сервер.
Пробелы и перевод строки
Чтобы переносы строк нормально работали и в браузере, и при запуске скрипта в консоли, можно использовать для них традиционный \n, а в начале программы поставить
Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML-код, и уважать переносы строк в нем. Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
Ведь по умолчанию веб-сервер отдает результат в браузер, говоря что это HTML-файл, а в этом языке любое число пробелов и переводов строк выводится как один пробел. Отдавая заголовок Content-Type , мы говорим браузеру что наш файл содержит обычный текст и не должен интерпретироваться как HTML код.
Если ты попытаешься открыть URL, в котором не указано имя файла, например: http://localhost:9001/ , то сервер будет искать файлы с названием index.php или index.html в корневой папке. Это так называемый "индексный" файл, который отдается по умолчанию, если конкретное имя файла не указано.
Имя скрипта маршрутизации надо указать при запуске веб-сервера. Попробуем написать простой скрипт с такой логикой:
- если запрошен URL /latest-news, то выполнить скрипт news.php
- если запрошен URL /hello, то вывести фразу "hello world"
- иначе искать указанный в URL файл
Создадим в корневой папке скрипт router.php с таким кодом. Если ты видишь тут незнакомые функции и команды, погугли их:
Чтобы веб-сервер использовал скрипт маршрутизации, его надо запускать такой командой:
Вот краткое объяснение использованных в скрипте выше конструкций:
Апач сложнее чем встроенный сервер, но дает больше возможностей.
Что делать дальше
Ты наверно заметил, что в тексте выше не раз повторяется слово HTML. Это неспроста - на этом языке верстаются веб-страницы. Иди и изучи основы этого языка, чтобы ты умел сверстать хотя бы страницу с заголовком, картинкой и ссылкой. Это займет у тебя максимум пару дней.
Наконец, стоит почитать туториал в официальном мануале PHP и научиться добавлять в HTML странички PHP код, а также обрабатывать данные из форм:
После этого прочитай урок про шаблоны.
Изучив все это, попробуй решить задачи ниже. Если ты смог их решить - отлично, ты готов к написанию своего первого веб-приложения на PHP - задаче про список студентов.
Полезные функции и конструкции PHP, которые стоит изучить
- require , require_once
- header()
- setcookie()
В файле с запросом должно быть примерно такое содержимое:
При соединении openssl выведет довольно много отладочной информации об используемом сервером сертификате и параметрах SSL/TLS шифрования. Ее вывод можно отключить, дописав к команде (до символа < ) флаг -quiet . Про другие опции можно прочесть в мануале по openssl s_client (англ., сложный).
Еще один кредит
Для решения этой задачи тебе надо изучить основы HTML, HTML-формы и глобальную переменную $_GET в PHP.
Сделай форму с 3 полями ввода: сумма кредита, ежемесячная выплата, комиссия и проценты в месяц. При их заполнении программа должна рассчитать кредит (аналогично задаче про айфон) и вывести один из вариантов:
- надпись "поле X заполнено неверно", если введены неправильные данные
- надпись "выплатить кредит невозможно так как ежемесячный прирост X больше ежемесячной выплаты", если выплатить кредит не получится
- надпись "время выплаты: N месяцев, сумма выплаты: X"
Для решения этой задачи надо изучить основных HTML, HTML-формы и функцию htmlspecialchars() .
Сделай страницу с формой (использующей метод GET) из поля ввода textarea (с именем text) и кнопки отправки. Никакого оформления и CSS не требуется, просто черный текст на белом фоне. При вводе любого текста и нажатия кнопки внизу под textarea должен отобразиться введенные текст и ссылка.
Текст должен точно соответствовать введенному, корректно отображать все символы, включая пробелы и переводы строк (тут тебе поможет тег pre), точно так как их ввел пользователь. Проверь что сочетания вроде
Отображаются ровно в том же виде как введены.
Кроме текста, надо выводить ссылку вида script.php?text=. <=1, которая содержит в параметре text введенный текст, а в параметре lt единицу и открыв которую, мы можем увидеть его на странице.
- про то, как корректно вставить текст с любыми символами в HTML-код, написано в уроке про XSS
- по умолчанию в HTML любое число переводов строк и пробелов воспринимается как один пробел. Чтобы сохранить все пробелы и переводы строк при выводе, нужно либо использовать HTML-тег pre, либо CSS-свойство white-space
- при подстановке параметра в ссылку вроде x.php?a=. необходимо корректно экранировать спецсимволы. Как это сделать, описано в уроке про структуру URL
- при подстановке ссылки в HTML-атрибут href ее, разумеется, тоже нужно корректно экранировать
Для решения этой задачи необходимо изучить куки, переменную $_COOKIE и функцию setcookie() .
Сделай скрипт, запоминающий сколько раз пользователь заходил на страницу и показывающий ему это число: "добро пожаловать - в N-й раз". Для хранения надо использовать куки, чтобы у каждого пользователя был свой счетчик.
Проверь что при открытии окна браузера в анонимном режиме или другого браузера счетчик в нем работает независимо, а при очистке кук сбрасывается в 0.
Читайте также: