Программирование сервера на php

Примеры

Этот пример показывает работу простого сервера. Измените переменные address и port в соответствии с вашими настройками и выполните. Затем вы можете соединиться с сервером с командой, похожей на: telnet 192.168.1.53 10000 (где адрес и порт должны соответствовать вашим настройкам). Всё, что вы наберёте на клавиатуре, будет затем выведено на сервере и отправлено вам обратно. Для отключения наберите ‘выход’.

#!/usr/local/bin/php -q
error_reporting ( E_ALL );

/* Позволяет скрипту ожидать соединения бесконечно. */
set_time_limit ( 0 );

/* Включает скрытое очищение вывода так, что мы видим данные
* как только они появляются. */
ob_implicit_flush ();

$address = ‘192.168.1.53’ ;
$port = 10000 ;

if (( $sock = socket_create ( AF_INET , SOCK_STREAM , SOL_TCP )) === false ) echo «Не удалось выполнить socket_create(): причина: » . socket_strerror ( socket_last_error ()) . «\n» ;
>

if ( socket_bind ( $sock , $address , $port ) === false ) echo «Не удалось выполнить socket_bind(): причина: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
>

if ( socket_listen ( $sock , 5 ) === false ) echo «Не удалось выполнить socket_listen(): причина: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
>

do if (( $msgsock = socket_accept ( $sock )) === false ) echo «Не удалось выполнить socket_accept(): причина: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
break;
>
/* Отправляем инструкции. */
$msg = «\nДобро пожаловать на тестовый сервер PHP. \n» .
«Чтобы отключиться, наберите ‘выход’. Чтобы выключить сервер, наберите ‘выключение’.\n» ;
socket_write ( $msgsock , $msg , strlen ( $msg ));

do if ( false === ( $buf = socket_read ( $msgsock , 2048 , PHP_NORMAL_READ ))) echo «Не удалось выполнить socket_read(): причина: » . socket_strerror ( socket_last_error ( $msgsock )) . «\n» ;
break 2 ;
>
if (! $buf = trim ( $buf )) continue;
>
if ( $buf == ‘выход’ ) break;
>
if ( $buf == ‘выключение’ ) socket_close ( $msgsock );
break 2 ;
>
$talkback = «PHP: Вы сказали ‘ $buf ‘.\n» ;
socket_write ( $msgsock , $talkback , strlen ( $talkback ));
echo » $buf \n» ;
> while ( true );
socket_close ( $msgsock );
> while ( true );

Пример #2 Пример использования сокетов: Простой клиент TCP/IP

Этот пример показывает использование простого одноразового HTTP-клиента. Он просто соединяется со страницей, отправляет запрос HEAD, выводит ответ и завершает работу.

echo «

Соединение TCP/IP

\n» ;

/* Получаем порт сервиса WWW. */
$service_port = getservbyname ( ‘www’ , ‘tcp’ );

/* Получаем IP-адрес целевого хоста. */
$address = gethostbyname ( ‘www.example.com’ );

/* Создаём сокет TCP/IP. */
$socket = socket_create ( AF_INET , SOCK_STREAM , SOL_TCP );
if ( $socket === false ) echo «Не удалось выполнить socket_create(): причина: » . socket_strerror ( socket_last_error ()) . «\n» ;
> else echo «OK.\n» ;
>

Читайте также:  Css title style example

echo «Пытаемся соединиться с ‘ $address ‘ на порту ‘ $service_port ‘. » ;
$result = socket_connect ( $socket , $address , $service_port );
if ( $result === false ) echo «Не удалось выполнить socket_connect().\nПричина: ( $result ) » . socket_strerror ( socket_last_error ( $socket )) . «\n» ;
> else echo «OK.\n» ;
>

$in = «HEAD / HTTP/1.1\r\n» ;
$in .= «Host: www.example.com\r\n» ;
$in .= «Connection: Close\r\n\r\n» ;
$out = » ;

echo «Отправляем HTTP-запрос HEAD. » ;
socket_write ( $socket , $in , strlen ( $in ));
echo «OK.\n» ;

echo «Читаем ответ:\n\n» ;
while ( $out = socket_read ( $socket , 2048 )) echo $out ;
>

echo «Закрываем сокет. » ;
socket_close ( $socket );
echo «OK.\n\n» ;
?>

User Contributed Notes 3 notes

You can easily extend the first example to handle any number of connections instead of jsut one

#!/usr/bin/env php
error_reporting ( E_ALL );

/* Permitir al script esperar para conexiones. */
set_time_limit ( 0 );

/* Activar el volcado de salida implícito, así veremos lo que estamo obteniendo
* mientras llega. */
ob_implicit_flush ();

$address = ‘127.0.0.1’ ;
$port = 10000 ;

if (( $sock = socket_create ( AF_INET , SOCK_STREAM , SOL_TCP )) === false ) echo «socket_create() falló: razón: » . socket_strerror ( socket_last_error ()) . «\n» ;
>

if ( socket_bind ( $sock , $address , $port ) === false ) echo «socket_bind() falló: razón: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
>

if ( socket_listen ( $sock , 5 ) === false ) echo «socket_listen() falló: razón: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
>

//clients array
$clients = array();

do $read = array();
$read [] = $sock ;

$read = array_merge ( $read , $clients );

// Set up a blocking call to socket_select
if( socket_select ( $read , $write = NULL , $except = NULL , $tv_sec = 5 ) < 1 )
// SocketServer::debug(«Problem blocking socket_select?»);
continue;
>

// Handle new Connections
if ( in_array ( $sock , $read ))

if (( $msgsock = socket_accept ( $sock )) === false ) echo «socket_accept() falló: razón: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
break;
>
$clients [] = $msgsock ;
$key = array_keys ( $clients , $msgsock );
/* Enviar instrucciones. */
$msg = «\nBienvenido al Servidor De Prueba de PHP. \n» .
«Usted es el cliente numero: < $key [ 0 ]>\n» .
«Para salir, escriba ‘quit’. Para cerrar el servidor escriba ‘shutdown’.\n» ;
socket_write ( $msgsock , $msg , strlen ( $msg ));

// Handle Input
foreach ( $clients as $key => $client ) < // for each client
if ( in_array ( $client , $read )) if ( false === ( $buf = socket_read ( $client , 2048 , PHP_NORMAL_READ ))) echo «socket_read() falló: razón: » . socket_strerror ( socket_last_error ( $client )) . «\n» ;
break 2 ;
>
if (! $buf = trim ( $buf )) continue;
>
if ( $buf == ‘quit’ ) unset( $clients [ $key ]);
socket_close ( $client );
break;
>
if ( $buf == ‘shutdown’ ) socket_close ( $client );
break 2 ;
>
$talkback = «Cliente < $key >: Usted dijo ‘ $buf ‘.\n» ;
socket_write ( $client , $talkback , strlen ( $talkback ));
echo » $buf \n» ;
>

Источник

Hello, world: как сделать сайт на PHP с нуля

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

Читайте также:  Hotels

Наталья Березовская

Автор в сфере IT, digital, экономики и финансов. Ведёт некоммерческий проект для начинающих писателей «ЛитЦех».

Создаем сайт шаг за шагом

1 шаг. Выбираем веб-сервер

В первую очередь вам нужен веб-сервер. Он будет обрабатывать запросы — маршрутизировать их. Веб-сервер связывает сайт (клиента) с внешним миром. Когда мы наберем в адресной строке index.php, сервер получит запрос и поймет, куда обращаться.

В пятерку популярных сегодня входят Nginx, Apache, Microsoft IIS, CERN httpd, Cherokee HTTP Server. Первые два борются за звание лучшего и самого востребованного. Apache лидирует, но, пока вы читаете эту статью, все может измениться.

2 шаг. Устанавливаем PHP

Затем вам нужен PHP на сервере. Язык программирования бесплатный, разрабатывается на open source-платформе и выложен в свободном доступе. Скачиваете сам PHP и его интерпретатор с официального сайта и переходите к третьему шагу.

3 шаг. Создаем директорию

Теперь создайте на диске компьютера директорию. Название не принципиально, главное — латинскими символами.

4 шаг. Все настраиваем

Прописываем в настройках выбранного вами сервера, куда смотреть при обращении к нему. Рекомендуем Apache или Nginx как лучшие в своем сегменте. Но выбор зависит от целей, с которыми создается сайт.

Чтобы настроить сервер, создайте папку на диске С: с названием Server. В ней еще две — bin и data. В последней создайте подпапки DB (для баз данных) и htdocs (для сайтов). Содержимое архива с Apache распакуйте в C:\Server\bin.

Откройте папку С:\Server\bin\Apache24\conf\, а затем в ней файл httpd.conf с помощью любого редактора. Измените в нем следующие настройки:

Если вы хотите обратиться к серверу по index.php, нужно создать в прикорневой папке файл с таким названием. Дальше написать открывающий PHP-тег. Это будет выглядеть так:

Готовые пакеты для создания сайта

На самом деле сегодня мало кто использует «чистые» Apache и PHP. Существуют удобные готовые решения со всеми компонентами. Вы скачиваете установочный файл, и он сам распаковывает PHP, Apache, MySQL и другие дистрибутивы. Создает нужную папку на диске, автоматически прописывает все настройки. Готовые сборки позволяют сразу размещать сайты в папке и работать с ними. Все автоматически настроится за вас.

Самые известные среди готовых пакетов для создания сайта:

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

Читайте также:

Источник

Встроенный в PHP веб-сервер — Веб-разработка на PHP

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

Разработка сайтов, с точки зрения организации кодовой базы, мало отличается от разработки обычных программ. Первым делом необходимо создать директорию внутри которой будет вестись разработка сайта, а затем её следует добавить в git-репозиторий. Назовём эту директорию корнем проекта. Если проект учебный, то лучше сразу создать репозиторий на GitHub и выкладывать все эксперименты туда.

Читайте также:  Python log to elasticsearch

Затем нужно создать файл index.php и поместить его в корень проекта. По соглашению это главный входной файл в PHP, который автоматически ищется веб-серверами. Создайте такой файл в директории проекта со следующим содержимым:

 // Печатает год в STDOUT echo date('Y'); echo "\n"; 

Затем запустите веб-сервер, например, на порту 8080 .

-S localhost:8080 [Wed May 27 11:55:19 2020] PHP 7.4.3 Development Server (http://localhost:8080) started 

После того как сервер будет запущен, он полностью забирает управление. Вкладка терминала больше не доступна для ввода команд. В отличие от обычных скриптов, которые выполняют свою задачу и заканчиваются, веб-сервера должны слушать порт непрерывно и сразу реагировать на входящие соединения. Поэтому однажды запустив сервер продолжит работать до тех пор, пока его не остановят. Остановить сервер можно, набрав Ctrl-C .

Такой способ запуска удобен в разработке, но в реальном окружении сервера запускают в виде демонов. Демон — процесс операционной системы, работающий в фоне.

Если в это время попытаться запустить ещё один веб-сервер в соседней вкладке на том же порту, то запуск завершится с такой ошибкой:

Failed to listen on localhost:8080 (reason: Address already in use)

В своей программистской жизни вы встретитесь с этой ошибкой не раз. Она означает, что какой-то процесс занял соответствующий порт (в данном случае 8080). В такой ситуации нужно либо остановить процесс который вам мешает, либо стартовать на другом порту.

Посмотреть какой процесс занял порт 8080 можно командой sudo lsof -i :8080

После этого откройте браузер и введите http://localhost:8080 . На экран выведется текущий год. В терминале, где запущен веб-сервер, появятся записи (лог), показывающие входящие запросы.

[Wed May 27 14:53:31 2020] [::1]:52988 [200]: GET / [Wed May 27 14:53:31 2020] [::1]:52990 [404]: GET /favicon.ico - No such file or directory 

Теперь снова откройте файл index.php и добавьте ниже вывод echo ‘Hello, world!’; . Выполните f5 в браузере, и вы увидите, что изменения применились автоматически. Так происходит, потому что веб-сервер запускает файл на выполнение заново при каждом http запросе.

Тело HTTP-ответа

При запуске скриптов на PHP, любая функция, печатающая на экран, предсказуемо печатает на экран:

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Источник

Оцените статью