среда, 9 декабря 2020 г.

Описание функции: mysqli_stmt_bind_param

 

mysqli_stmt::bind_param

mysqli_stmt_bind_param

(PHP 5, PHP 7)

mysqli_stmt::bind_param -- mysqli_stmt_bind_param Привязка переменных к параметрам подготавливаемого запроса

Описание

Объектно-ориентированный стиль

public mysqli_stmt::bind_param ( string $types , mixed &$var , mixed &...$vars ) : bool


Процедурный стиль

mysqli_stmt_bind_param ( mysqli_stmt $stmt , string $types , mixed &$var , mixed &...$vars ) : bool

Привязывает переменные к меткам параметров в SQL-выражении, которое было подготовлено фукнцией mysqli_prepare().

Замечание:

Если размер данных переменной превышает максимально допустимый размер пакета (max_allowed_packet), необходимо задать значение b параметру types и использовать функцию mysqli_stmt_send_long_data(), которая будет передавать данные пакетами.

Замечание:

При использовании mysqli_stmt_bind_param() совместно с call_user_func_array() необходимо соблюдать особую осторожность. Нужно принимать во внимание, что mysqli_stmt_bind_param() принимает в качестве параметров только ссылки на значения, в то время как call_user_func_array() принимает список параметров, которые могут передаваться как по ссылке, так и по значению.

Список параметров

stmt

Только для процедурного стиля: Идентификатор выражения, полученный с помощью mysqli_stmt_init().

types

Строка, содержащая один или более символов, каждый из которых задает тип значения привязываемой переменной:

Символы задающие тип
Символ Описание
i соответствующая переменная имеет тип integer
d соответствующая переменная имеет тип double
s соответствующая переменная имеет тип string
b соответствующая переменная является большим двоичным объектом (blob) и будет пересылаться пакетами
var
vars

Количество переменных и длина строки types должны в точности соответствовать количеству параметров в запросе.

Возвращаемые значения

Возвращает true в случае успешного завершения или false в случае возникновения ошибки.

Примеры

Пример #1 Объектно-ориентированный стиль

<?php
$mysqli 
= new mysqli('localhost''my_user''my_password''world');

/* проверка подключения */
if (mysqli_connect_errno()) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}

$stmt $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd'$code$language$official$percent);

$code 'DEU';
$language 'Bavarian';
$official "F";
$percent 11.2;

/* выполнение подготовленного запроса */
$stmt->execute();

printf("%d строк вставлено.\n"$stmt->affected_rows);

/* закрываем запрос */
$stmt->close();

/* очищаем таблицу CountryLanguage */
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d строк удалено.\n"$mysqli->affected_rows);

/* закрываем подключение */
$mysqli->close();
?>

Пример #2 Процедурный стиль

<?php
$link 
mysqli_connect('localhost''my_user''my_password''world');

/* проверка подключения */
if (!$link) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}


$stmt mysqli_prepare($link"INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt'sssd'$code$language$official$percent);

$code 'DEU';
$language 'Bavarian';
$official "F";
$percent 11.2;

/* выполнение подготовленного запроса */
mysqli_stmt_execute($stmt);

printf("%d строк вставлено.\n"mysqli_stmt_affected_rows($stmt));

/* закрываем запрос */
mysqli_stmt_close($stmt);

/* очищаем таблицу CountryLanguage */
mysqli_query($link"DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d строк удалено.\n"mysqli_affected_rows($link));

/* закрываем подключение */
mysqli_close($link);
?>

Результат выполнения данных примеров:

1 строк вставлено.
1 строк удалено.

Смотрите также

  • mysqli_stmt_bind_result() - Привязка переменных к подготовленному запросу для размещения результата
  • mysqli_stmt_execute() - Выполняет подготовленный запрос
  • mysqli_stmt_fetch() - Связывает результаты подготовленного выражения с переменными
  • mysqli_prepare() - Подготавливает SQL выражение к выполнению
  • mysqli_stmt_send_long_data() - Отправка данных блоками
  • mysqli_stmt_errno() - Возвращает код ошибки выполнения последнего запроса
  • mysqli_stmt_error() - Возвращает строку с пояснением последней ошибки при выполнении запроса

Описание функции: mysqli_prepare.

 

mysqli::prepare

mysqli_prepare

(PHP 5, PHP 7)

mysqli::prepare -- mysqli_prepare Подготавливает SQL выражение к выполнению

Описание

Объектно-ориентированный стиль

public mysqli::prepare ( string $query ) : mysqli_stmt

Процедурный стиль

mysqli_prepare ( mysqli $link , string $query ) : mysqli_stmt

Подготавливает SQL-запрос и возвращает указатель на это выражение, который может использоваться для дальнейших операций с этим выражением. Запрос должен состоять из одного SQL выражения.

Метки параметров должны быть связаны с переменными приложения функциями mysqli_stmt_bind_param() и/или mysqli_stmt_bind_result() до запуска запроса или выборки строк.

Список параметров

link

Только для процедурного стиля: Идентификатор соединения, полученный с помощью mysqli_connect() или mysqli_init()

query

Текст запроса в виде строки.

Замечание:

Нет необходимости в завершающей точке с запятой или символе \g в конце выражения.

Этот параметр может содержать одну или несколько меток параметров SQL-запроса. Эти метки можно добавить путем встраивания знаков вопроса (?) в места выражения, где требуется подставлять параметры.

Замечание:

Эти метки можно встраивать только в определенные места в выражении. Например, они допустимы в списке VALUES() выражения INSERT (чтобы задать значения столбцов для строки), или в операциях сравнения предложения WHERE для задания сравниваемого значения.

Тем не менее, эти метки недопустимы в качестве идентификаторов (таких как имена столбцов или таблиц), а также в списке псевдонимов столбцов предложения SELECT. Нельзя также использовать параметры для задания обоих операндов бинарного оператора (например, знак равенства =). Последнее ограничение необходимо, так как в противном случае невозможно будет определить тип операндов. Еще недопустимо сравнивать метку параметра с NULL выражением ? IS NULL. В основном, параметры допустимы в выражениях языка манипулирования данными (DML), и недопустимы в выражениях языка определения данных (DDL).

Возвращаемые значения

mysqli_prepare() возвращает объект запроса или false в случае ошибки.

Примеры

Пример #1 Пример использования mysqli::prepare()

Объектно-ориентированный стиль

<?php
$mysqli 
= new mysqli("localhost""my_user""my_password""world");

/* проверка соединения */
if (mysqli_connect_errno()) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}

$city "Amersfoort";

/* создаем подготавливаемый запрос */
if ($stmt $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

    
/* связываем параметры с метками */
    
$stmt->bind_param("s"$city);

    
/* запускаем запрос */
    
$stmt->execute();

    
/* связываем переменные с результатами запроса */
    
$stmt->bind_result($district);

    
/* получаем значения */
    
$stmt->fetch();

    
printf("%s находится в округе %s\n"$city$district);

    
/* закрываем запрос */
    
$stmt->close();
}

/* закрываем соединение */
$mysqli->close();
?>

Процедурный стиль

<?php
$link 
mysqli_connect("localhost""my_user""my_password""world");

/* проверка соединения */
if (mysqli_connect_errno()) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}

$city "Amersfoort";

/* создаем подготавливаемый запрос */
if ($stmt mysqli_prepare($link"SELECT District FROM City WHERE Name=?")) {

    
/* связываем параметры с метками */
    
mysqli_stmt_bind_param($stmt"s"$city);

    
/* запускаем запрос */
    
mysqli_stmt_execute($stmt);

    
/* связываем переменные с результатами запроса */
    
mysqli_stmt_bind_result($stmt$district);

    
/* получаем значения */
    
mysqli_stmt_fetch($stmt);

    
printf("%s находится в округе %s\n"$city$district);

    
/* закрываем запрос */
    
mysqli_stmt_close($stmt);
}

/* закрываем соединение */
mysqli_close($link);
?>

Результат выполнения данных примеров:

Amersfoort is in district Utrecht

Смотрите также

  • mysqli_stmt_execute() - Выполняет подготовленный запрос
  • mysqli_stmt_fetch() - Связывает результаты подготовленного выражения с переменными
  • mysqli_stmt_bind_param() - Привязка переменных к параметрам подготавливаемого запроса
  • mysqli_stmt_bind_result() - Привязка переменных к подготовленному запросу для размещения результата
  • mysqli_stmt_close() - Закрывает подготовленный запрос

вторник, 6 октября 2020 г.

Монтирование сетевой папки в Linux | Ubuntu

 
 

Сегодня в статье рассмотрим пример монтирования сетевой папки в операционную систему Linux, на примере Elementary OS/

Для работы c сетевыми дисками SMB/CIFS (Windows или Samba) нам понадобиться утилита cifs-utils. Для её установки открываем терминал и набираем следующую команду:

sudo apt-get install cifs-utils

Далее потребуется создать директорию, куда мы хотим примонтировать нашу расшаренную сетевую папку. Для этого давайте наберем вот такую команду:

sudo mkdir /home/user/share

где

  • user — имя вашего пользователя
  • share — название директория куда будем монтировать нашу сетевую папку

Ручное монтирование сетевой папки

Далее набираем команду для монтирования нашей сетевой папке.


sudo mount -t cifs //myserver/share-name /home/user/share -o username=user2,
password=parol,domain=mydomen

или

mount -t cifs //192.168.0.1/share-name /home/user/share -o username=user2,
password=parol,domain=mydomen

Если используются русские буквы или пробел в имени сетевой папки, надо весь путь заключить в кавычки «//192.168.0.1/Документы»

Так же сразу можно задать права доступа и кодировку, тогда надо вписать следующие параметры

mount -t cifs //192.168.0.1/share-name /home/user/share -o username=user2,
password=parol,domain=mydomen,iocharset=utf8,file_mode=0777,dir_mode=0777
  • mount -t cifs — тип устройства/директории
  • //ip — IP адрес сервера
  • /home/user/share — в эту директорию будет примонтирована сетевая папка
  • -o — задаем дополнительные опции монтирования
  • username=user2 — это имя пользователя на удаленном хосте (сервере)
  • password=parol — это пароль пользователя user2
  • domain — название домена (рабочей группы)
  • iocharset=utf8 — указываем кодировку (cp1251, koi8-r)
  • file_mode=0777 — права доступа к файлам
  • dir_mode=0777 — права доступа к директориям

Автоматическое монтирование сетевой папки при загрузки системы

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

sudo nano /root/.smbuser
username=user2
password=parol
domain=mydomen

Для безопасности ограничим доступ к файлу с нашими данными:

sudo chmod 400 /root/.smbuser

Редактируем файл /etc/fstab

sudo nano /etc/fstab
//192.168.0.1/share-name /home/user/share cifs 
credentials=/root/.smbuser 0 0

Проверяем, работоспособность

mount -a

Также если при попытки создать или удалить какие либо файлы у Вас не хватает прав, то необходимо добавить uid и gid параметры.

//192.168.0.1/share-name /home/user/share cifs 
credentials=/root/.smbuser,uid=1000,
gid=1000 0 0

Если не было ошибок, проверяем

df -h

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

Если есть вопросы, то пишем в комментариях.

Также можете помочь проекту, заранее всем СПАСИБО!!!

воскресенье, 26 апреля 2020 г.

RDP-клиенты для Linux

lumpics.ru


RDP-клиенты для Linux
Технология RDP (Remote Desktop Protocol) позволяет пользователям одинаковых или разных версий операционных систем совершать удаленное управление компьютером. Существуют специальные клиенты, отличимые от консольных утилит, где эта опция реализована через графический интерфейс, а это значит, что юзеру предоставляется полный вид рабочего стола, возможность взаимодействовать с клавиатурой и указателем мыши. В рамках сегодняшней статьи мы хотим рассказать об использовании популярных RDP-клиентов в Linux.

Используем RDP-клиенты в Linux

Сейчас существует не так много RDP-клиентов, поскольку имеются сложности в реализации технологии, которые связаны и с ее проприетарностью. Однако обычному юзеру на выбор предлагается не менее трех различных вариантов. Далее мы хотим рассказать лишь о самых популярных и надежных из них, а вы, отталкиваясь от инструкций, уже сможете инсталлировать подходящий клиент и производить подключение к серверу.

Вариант 1: Remmina

Remmina — самый популярный клиент удаленного рабочего стола, который по умолчанию предустановлен во многих дистрибутивах Linux. Однако зачастую его версия является устаревшей. Эта программа имеет простой и понятный GUI с огромным количеством вспомогательных инструментов. Освоить ее сможет даже начинающий пользователь, поэтому мы и поместили этот софт на первое место. Давайте пошагово разберем процедуру установки, настройки и подключения в Remmina.
Шаг 1: Установка
Начать следует с установки данного RDP-клиента в операционную систему. Как было сказано ранее, по умолчанию во многих дистрибутивах Remmina уже присутствует, но не помешает обновить ее версию, что не займет много времени.
  1. Если в вашей системе Remmina попросту отсутствует и вы хотите инсталлировать стабильную, но не самую последнюю сборку, для начала запустите «Терминал» удобным способом, например, через меню приложений или зажав комбинацию Ctrl + Alt + T.
  2. Запуск терминала для дальнейшей установки программы Remmina
  3. В открывшейся консоли введите sudo apt install remmina и нажмите на Enter. Замените пакетный менеджер apt на другой, если используете дистрибутив, основанный на RedHat или Fedora.
  4. Ввод команды для установки программы Remmina с официальных хранилищ
  5. Всегда действия инсталляции запускаются от имени суперпользователя, поэтому приходится подтверждать их, вводя пароль в новой строке. Эта ситуация не стала исключением.
  6. Подтверждение паролем для установки Remmina в Linux через официальные хранилища
Далее может потребоваться дополнительное подтверждение расширения занятого дискового пространства. После успешного завершения инсталляции можно переходить к использованию клиента. Если же вы желаете обновить версию, придется задействовать пользовательские хранилища, поскольку на официальные новые сборки не поступают. Реализация будет немного сложнее, а выглядит так:
  1. В консоли введите sudo apt-add-repository ppa:remmina-ppa-team/remmina-next, чтобы получить файлы из хранилища.
  2. Команда для получения последней версии Remmina в Linux через пользовательское хранилище
  3. Подтвердите это действие, написав пароль учетной записи суперпользователя.
  4. Подтверждение команды для получения последней версии Remmina в Linux через пользовательское хранилище
  5. Вы будете уведомлены о получаемых пакетах. Примите их, нажав на Enter.
  6. Продолжение получения последней версии Remmina в Linux через пользовательское хранилище
  7. Ожидайте завершения скачивания файлов. Во время этой операции не закрывайте консоль и не прерывайте соединение с интернетом.
  8. Скачивание файлов для дальнейшей установки программы Remmina в Linux
  9. После этого следует обновить список системных хранилищ через команду sudo apt-get update.
  10. Команда для обновления репозиториев при установке Remmina в Linux
  11. Остается только произвести инсталляцию RDP-клиента и сопутствующих ему плагинов, введя sudo apt-get install remmina remmina-plugin-rdp libfreerdp-plugins-standard.
  12. Команда для установки последней версии Remmina в Linux через пользовательское хранилище
  13. Подтвердите информацию о занимаемом дисковом пространстве, выбрав ответ Д, и дожидайтесь окончания процедуры.
  14. Подтверждение инсталляции Remmina в Linux через пользовательское хранилище
На этом инсталляция Remmina завершена. Старая версия будет автоматически замещена новой, следовательно, можно закрывать консоль и переходить к первому запуску программного обеспечения.
Шаг 2: Запуск и настройка
С запуском и конфигурацией Remmina разберется даже самый начинающий пользователь, а с последним поможет официальная документация. Однако мы все же хотим остановиться на основных моментах, чтобы при реализации этой задачи не возникло каких-либо трудностей.
  1. По умолчанию значок Remmina сразу же после установки будет добавлен в меню приложений. Отыщите его там, прокрутив список или воспользовавшись строкой поиска.
  2. Запуск Remmina в Linux через значок в меню приложений
  3. Для перехода к настройкам кликните по кнопке в виде трех горизонтальных линий и выберите пункт «Параметры».
  4. Переход к параметрам Remmina в Linux для глобальной настройки
  5. Теперь на экране отобразится окно «Настройки Remmina». В нем присутствует огромное количество вкладок, отвечающих за внесения глобальных и пользовательских изменений. Например, здесь можно задать стандартное разрешение экрана, изменить комбинации клавиш, редактировать пункты протокола SSH и безопасности.
  6. Глобальные и пользовательские настройки программы Remmina в Linux
Мы не будем останавливаться на каждом присутствующем пункте детально, поскольку разработчики предоставляют официальную информацию по каждой опции, а также интерфейс Remmina имеет русский язык, что поможет самостоятельно во всем разобраться.
Шаг 3: Создание профиля и подключение
После установки оптимальной конфигурации Remmina остается только создать профиль для подключения, используя рассматриваемый протокол, чтобы успешно соединиться с удаленным рабочим столом. Мы предлагаем разобрать основной принцип этой процедуры.
  1. Найдите на верхней панели соответствующий значок и кликните по нему левой кнопкой мыши, чтобы отобразилась форма создания подключения.
  2. Создание нового подключения удаленного рабочего стола в Remmina в Linux
  3. Заполните все строки в соответствии со своими требованиями. Обязательно перепроверяйте данные учетных записей и адреса серверов. После этого вы можете выбрать действие. Если нажать на «Подключить», указанные настройки сохранены не будут, ведь для этого следует кликнуть на «Сохранить и подключить».
  4. Ввод данных для подключения к удаленному рабочему столу Remmina в Linux
  5. В будущем сохраненные профили можно запускать прямо через главное меню Remmina. Все доступные подключения отобразятся в виде таблицы с детальной информацией.
  6. Сохранение профилей для быстрого подключения через Remmina в Linux
  7. После запуска откроется отдельное окно с виртуальным рабочим столом. Ожидайте начала загрузки и используйте инструменты на левой панели, чтобы управлять сеансом.
  8. Успешный запуск удаленного рабочего стола через Remmina в Linux
Теперь остается только приступить к взаимодействию с удаленным рабочим столом, выполняя там необходимые действия. Если у вас возникли какие-то вопросы по управлению Remmina, обратите особое внимание на документацию: там в максимально развернутом виде описаны ответы абсолютно на все вопросы пользователей.

Вариант 2: rdesktop

Следующий инструмент под названием rdesktop не является таким популярным среди начинающих пользователей, поскольку все настройки производятся через консоль путем ввода соответствующих команд. Однако это решение стало востребованным среди профессионалов и любителей консольных утилит.
Шаг 1: Установка rdesktop
Вкратце остановимся на самой процедуре инсталляции rdesktop. Данная программа доступа в официальных хранилищах дистрибутивов, благодаря чему юзеру не потребуется скачивать дополнительные файлы или пакеты.
  1. Откройте «Терминал» любым удобным образом.
  2. Запуск терминала для установки программы rdesktop в Linux
  3. Введите команду sudo apt-get install rdesktop и нажмите на Enter.
  4. Команда для установки консольной утилиты rdesktop в Linux
  5. Подтвердите это действие, введя пароль суперпользователя в новой строке.
  6. Подтверждение установки консольной утилиты rdesktop в Linux
  7. Установка будет продолжена сразу же после выбора положительного ответа «Д».
  8. Подтверждение получения файлов при установке консольной утилиты rdesktop в Linux
  9. Запуск данной утилиты тоже осуществляется через «Терминал» через команду rdesktop.
  10. Запуск консольной утилиты rdesktop в Linux после ее установки
Если используемый дистрибутив основан не на Debian, аргумент apt-get в команде инсталляции придется заменить на yum или pacman. В остальном же никаких различий со сборками Linux не имеется.
Шаг 2: Запуск и подключение
Если в консоли просто вписать команду rdesktop, следующими строками отобразится краткая сводка о синтаксисе и доступных опциях. Мы рекомендуем изучить появившиеся сведения, чтобы понять, как именно осуществляется соединение с удаленным рабочим столом через эту утилиту.
Информация об опциях и синтаксисе команды rdesktop в Linux
После этого можно осуществлять непосредственное подключение к другому компьютеру. Давайте разберем этот процесс на примере строки rdesktop -z -P -g 1280x900 -u USERNAME -p PASSWORD SERVER_IP.
Ввод команды для подключения к удаленному рабочему столу через rdesktop в Linux
Здесь следует детально рассмотреть абсолютно каждый аргумент и вписываемую информацию.
  • -z. Эта опция отвечает за активацию сжатия потока. Используйте ее для оптимизации соединения. Особенно актуально для систем с низкой скоростью интернета.
  • -P. Создает кэширование. Это помогает сохранять некоторую информацию на локальном хранилище, в будущем не обращаясь каждый раз на сервер для ее загрузки.
  • -g. Устанавливает пользовательское разрешение окна рабочего стола. После этой опции введите необходимый параметр, чтобы он был применен.
  • -u. После этой опции укажите имя пользователя, которое будет отображаться на сервере.
  • -p. Данный аргумент необходим в случае присутствия пароля.
  • SERVER_IP. Всегда указывается в конце строки. Вместо этой надписи введите доменное имя сервера, к которому хотите осуществить подключение.
Шаг 3: Обмен файлами между Windows и Linux в текущей сессии
В завершение разбора утилиты rdesktop хотим рассказать об основных действия, выполняемых через ввод команд в консоли. Для начала поговорим о самых востребованных задачах, которые связаны с обменом файлов. Сетевая папка подключается через rdesktop -r disk:share=/home/documents -z -P -g 1280x900 -u USERNAME -p PASSWORD SERVER_IP, где все указанные опции и адреса замените на требуемые.
Команда для открытия общей сетевой папки через rdesktop в Linux
После ввода этой команды папка станет доступна для чтения и записи, что позволит всячески управлять находящимися там файлами. Однако если возникли проблемы с доступом, придется закрыть сессию, активировать команду chown -R /home/documents USERNAME:USERGROUP, а уже потом подключить директорию повторно.
Команда для предоставления доступа к сетевой папке для rdesktop в Linux
Шаг 4: Создание значка быстрого доступа
При изучении первого RDP-клиента вы могли заметить, что все профили сохраняются в таблице графического меню, что позволяет быстро соединяться и переключаться между ними. К сожалению, в rdesktop такая функция попросту отсутствует, поэтому остается только один альтернативный метод — ручное создание кнопки быстрого доступа для каждого сервера.
  1. В консоли создайте пустой текстовый файл с произвольным названием через удобный текстовый редактор. Сама команда обретет примерно такой вид: sudo nano rdesktop, где nano — используемый текстовый редактор, а rdesktop — название самого файла.
  2. Создание текстового файла для значка запуска rdesktop в Linux
  3. При появлении окна вставьте две строки, указанные ниже, заменив опции и сведения о сервере на имеющиеся.
  4. #!/bin/bash
    rdesktop -z -P -g 1280x900 -u USERNAME -p PASSWORD SERVER_IP

    Создание скрипта для значка запуска rdesktop в Linux
  5. Сохраните все изменения и завершите работу в текстовом редакторе.
  6. Сохранение изменений текстового файла значка запуска rdesktop в Linux
  7. Введите команду chmod +x rdesktop, чтобы создать значок быстрого запуска на рабочем столе.
  8. Преобразование текстового файла в программу для запуска rdesktop в Linux
Все остальные опции и нюансы взаимодействия с rdesktop, о которых мы не поговорили выше, детально описаны в официальной документации или используются довольно редко, поэтому и не нуждаются в объяснениях.

Вариант 3: freerdp

freerdp — самый новый из всех известных RDP-клиентов, который только начинает набирать обороты. Управление им тоже осуществляется в консоли, а функций сейчас мало, поэтому мы и поставили этот вариант на последнее место.
  1. Инсталлируется freerdp со всеми необходимыми компонентами через команду sudo apt-get install freerdp libfreerdp-plugins-standard.
  2. Команда для установки программы freerdp в Linux
  3. Инсталляция начнется сразу же после подтверждения паролем.
  4. Подтверждение установки программы freerdp в Linux
  5. Выберите ответ Д, чтобы загрузить все архивы.
  6. Продолжение инсталляции программы freerdp в Linux
  7. Используйте строку xfreerdp -u black -d WORK -n "Lumpics" -a 15 -k US -g 1440x830 --plugin cliprdr --plugin rdpdr --data disk:DiskP:/home/black -- my.rdp.server.net, чтобы запустить соединение с сервером.
  8. Подключение к удаленному рабочему столу через программу freerdp в Linux
Теперь предлагаем изучить все опции, которые вы увидели в предыдущей строке. Они немного схожи с теми, что применялись во втором варианте при взаимодействии с клиентом rdesktop, но и имеют свои особенности.
  1. -u. Отвечает за имя пользователя на сервере. Сразу же после этой опции должен быть вписан соответствующий логин.
  2. -d. То же самое, но только с доменом рабочей группы, который определяется заранее и должен быть одинаковым у все участников локальной сети.
  3. -n. Определяет имя хоста.
  4. -a. После этого аргумента указывается глубина цвета окна. По умолчанию выбирается значение 15.
  5. -k. Устанавливает стандартную раскладку клавиатуры, где в качестве параметра указывается код государства.
  6. -g. Определяет размер отображаемого окна в пикселях.
  7. --plugin cliprdr. Активирует общий буфер обмена с будущим удаленным рабочим столом.
  8. --plugin rdpdr --data disk:DiskP:/home/black --. Подключает домашнюю папку как общую сетевую и позволяет обмениваться данными.
  9. my.rdp.server.net. Заменяется на имя используемого RDP-сервера.
Выше вы получили общую сводку о трех различных RDP-клиентах для Linux. Как видите, все они имеют свои особенности и подойдут разным пользователям. Каждый из них может соединяться с Windows, поэтому вся сложность выбора заключается лишь в различиях управления и реализации графического интерфейса окна показа удаленного рабочего стола.

воскресенье, 9 февраля 2020 г.

Установка веб-сервера (Apache 2.4, MySQL 8.0, PHP 7, phpMyAdmin) на Windows 10



Локальный сервер очень полезный инструмент. Он точно пригодиться веб-мастерам, программистам на PHP, тестерам на проникновение. Все программы, входящие в типичную установку веб-сервера, являются бесплатными, у всех у них открыт исходный код. Локальный веб-сервер потребляет минимум ресурсов и, на самом деле, его совсем нетрудно установить и настроить.
Эта инструкция расскажет о том, как установить локальный веб-сервер без использования готовых сборок. Этот способ имеет свои преимущества. Самыми важными из них являются: полный контроль на тем, что вы устанавливаете; возможность использовать самые последние версии программного обеспечения.
Если вы будете в точности следовать инструкции, то у вас обязательно всё заработает! Кроме тех, у кого Windows XP - если лу вас эта операционная система, то для вас сделана специальная инструкция.
Я покажу пример установки на Windows 10, но если у вас другая версия Windows, то пусть вас это не смущает - процедура везде идентичная. Я буду скачивать последние (самые свежие) на момент написания версии программ. Если к тому времени, когда вы читаете, выйдут новые версии, то скачивайте именно их.
Этапы установки:
  1. Подготовка (скачивание программ, входящих в сервер, создание структуры сервера)
  2. Создание структуры веб-сервера
  3. Установка Apache 2.4
  4. Установка и настройка MySQL 8.0
  5. Установка и настройка PHP 7
  6. Установка и настройка phpMyAdmin
  7. Использование сервера и бэкап данных
  8. Дополнительная настройка PHP
  9. Дополнительная настройка phpMyAdmin
  10. Установка почтовой заглушки
  11. Добавление PHP директории в PATH на Windows
  12. Зависание, замедление трафика и/или ошибка сервера Asynchronous AcceptEx failed
  13. Настройка cURL в веб-сервере Apache на Windows
Вам также может пригодиться:
  1. Резервное копирование данных (сайты и базы данных) Apache в Windows
  2. Обновление сервера
  3. Дополнительный материал по настройке веб-сервера в Windows
  4. У меня ничего не работает
  5. Удаление сервера
  6. Как защитить веб-сервер Apache от взлома в Windows

1. Подготовка (скачивание программ, входящих в сервер, создание структуры сервера)

Нам нужны:
  • Apache (непосредственно веб-сервер)
  • PHP - среда для работы PHP программ (требуется практически всеми веб-сайтами)
  • MySQL - система управления базами данных (требуется большинством веб-сайтов)
  • phpMyAdmin - очень удобный инструмент для управления базами данных
Официальный сайт разработчиков Apache это httpd.apache.org. Можно скачать Apache с этого сайта. Но официальная версия собирается с использованием старого компилятора, по этой причине она не работает с новыми версиями PHP. Авторы PHP рекомендуют Apache с сайта apachelounge.com/download. Поэтому для этой инструкции скачиваем Apache именно с сайта apachelounge.com/download.
01
Если у вас 64-битная версия Windows, то вы можете выбрать как 64-битную, так и 32-битную версию компонентов. Главное правило - все компоненты должны быть одной битности. Если у вас 32-битная версия Windows, то все компоненты должны быть 32-битными. Это не относится к phpMyAdmin, который написан на языке PHP. Для PHP программ понятие битности неприменимо.
PHP 7 скачайте со страницы https://windows.php.net/download/. Выберите версию Thread Safe, обратите внимание на битность. Если вы затрудняетесь, какой именно файл скачать, то посмотрите эту заметку.
Бесплатная версия MySQL называется MySQL Community Server. Её можно скачать на странице https://dev.mysql.com/downloads/mysql/. На этой же странице есть установщик в виде исполнимого файла, но я рекомендую скачать ZIP-архив. На странице скачивания нам предлагают зарегистрироваться или войти в существующую учётную запись - но это делать необязательно. Достаточно нажать на ссылку «No thanks, just start my download». Обратите внимание на битность.
Сайт для скачивания phpMyAdmin phpmyadmin.net.
Ещё нам нужен файл Visual C++ Redistributable for Visual Studio 2015-2019, т.е. Распространяемый компонент Visual C++ для Visual Studio 2015-2019 (или любой другой более поздний), скачать его можно на официальном сайте Microsoft по ссылке (прямая ссылка на скачивание 64-битной версии; прямая ссылка на скачивание 32-битной версии).
Итак, у меня скачались следующие файлы:
  • httpd-2.4.29-Win64-VC15.zip
  • php-7.2.0-Win32-VC15-x64.zip
  • mysql-8.0.11-winx64.zip
  • phpMyAdmin-4.7.6-all-languages.zip
  • vc_redist.x64.exe
Установите файл vc_redist.x64.exe.

2. Создание структуры веб-сервера

Создадим структуру каталогов нашего сервера. Главная идея - разделить исполнимые файлы и файлы сайтов с базами данных. Это удобно для обслуживания сервера, в том числе для резервного копирования.
В корне диска C:\ создайте каталог Server. В этом каталоге создайте 2 подкаталога: bin (для исполнимых файлов) и data.
Перейдите в каталог data и там создайте подпапки DB (для баз данных) и htdocs (для сайтов).
Перейдите в каталог C:\Server\data\DB\ и создайте там пустую папку data.
Карта важных папок, которые упоминаются в данной инструкции:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:.
├───bin
│   ├───-Apache24
│   │   └───conf
│   ├───-mysql-8.0
│   ├───-PHP
│   └───-Sendmail
├───certs
├───data
│   ├───DB
│   │   └───data
│   └───htdocs
│       └───-phpmyadmin
└───manage

3. Установка Apache 2.4

Содержимое скаченного архива (точнее говоря, только каталог Apache24), распакуйте в C:\Server\bin\.
Перейдите в каталог c:\Server\bin\Apache24\conf\ и откройте файл httpd.conf любым текстовым редактором.
В нём нам нужно заменить ряд строк.
Меняем
1
Define SRVROOT "c:/Apache24"
на
1
Define SRVROOT "c:/Server/bin/Apache24"
меняем
1
#ServerName www.example.com:80
на
1
ServerName localhost
меняем
1
DocumentRoot "${SRVROOT}/htdocs"
на
1
DocumentRoot "c:/Server/data/htdocs/"
меняем
1
<Directory "${SRVROOT}/htdocs">
на
1
<Directory "c:/Server/data/htdocs/">
меняем
1
DirectoryIndex index.html
на
1
DirectoryIndex index.php index.html index.htm
меняем
1
2
3
4
5
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride None
на
1
2
3
4
5
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride All
и меняем
1
#LoadModule rewrite_module modules/mod_rewrite.so
на
1
LoadModule rewrite_module modules/mod_rewrite.so
Сохраняем и закрываем файл. Всё, настройка Apache завершена! Описание каждой изменённой директивы вы найдёте на этой странице.
Откройте командную строку (это можно сделать нажав одновременно клавиши Win+X). Выберите там Windows PowerShell (администратор) и скопируйте туда:
1
c:\Server\bin\Apache24\bin\httpd.exe -k install
Если поступит запрос от файервола в отношение Apache, то нажмите Разрешить.
Теперь вводим в командную строку:
1
c:\Server\bin\Apache24\bin\httpd.exe -k start
И нажмите Enter.
02
Теперь в браузере набираем http://localhost/ и видим следующее:
03
Это означает две вещи:
  • Apache работает
  • в каталоге c:\Server\data\htdocs\ нет ни одного файла.
Можете поиграться — добавить в каталог любые html-файлы — полноценный веб-сервер работает.

4. Установка и настройка MySQL 8.0

В каталог bin распаковываем файлы MySQL (из архива mysql-8.0.11-winx64.zip). Переименовываем папку mysql-8.0.11-winx64 в mysql-8.0 (для краткости). Кстати, распакованная папка mysql-8.0 занимает около гигабайта!
Заходим в эту папку и создаём там файл my.ini Теперь открываем этот файл любым текстовым редактором.
Добавьте туда следующие строки:
1
2
3
4
5
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir="c:/Server/data/DB/data/"
default_authentication_plugin=mysql_native_password
Сохраните и закройте его.
Настройка завершена, но нужно ещё выполнить инициализацию и установку, для этого открываем командную строку от имени администратора и последовательно вводим туда:
1
2
3
C:\Server\bin\mysql-8.0\bin\mysqld --initialize-insecure --user=root
C:\Server\bin\mysql-8.0\bin\mysqld --install
net start mysql
04
По окончанию этого процесса в каталоге C:\Server\data\DB\data\ должны появиться автоматически сгенерированные файлы:
05
Теперь служба MySQL будет запускаться при каждом запуске Windows.

5. Установка и настройка PHP 7

В папке c:\Server\bin\ создаём каталог PHP и копируем в него содержимое архива php-7.0.0RC6-Win32-VC14-x64.zip.
В файле c:\Server\bin\Apache24\conf\httpd.conf в самый конец добавляем строчки
1
2
3
PHPIniDir "C:/Server/bin/PHP"
AddHandler application/x-httpd-php .php
LoadModule php7_module "C:/Server/bin/PHP/php7apache2_4.dll"
06
И перезапускаем Apache
1
c:\Server\bin\Apache24\bin\httpd.exe -k restart
В каталоге c:\Server\data\htdocs\ создаём файл с названием i.php
Копируем в этот файл:
1
2
<?php
phpinfo ();
В браузере откройте ссылку http://localhost/i.php. Если вы видите тоже самое, что на картинке, значит PHP работает:

Настройка PHP 7

Настройка PHP происходит в файле php.ini. В zip-архивах, предназначенных для ручной установки и для обновлений, php.ini нет (это сделано специально, чтобы случайно не затереть ваш файл, с вашими уникальными настройками). Зато есть два других, которые называются php.ini-development и php.ini-production. Любой из них, при ручной установке, можно переименовать в php.ini и настраивать дальше. На локалхосте мы будет использовать php.ini-development.
Открываем файл php.ini любым текстовым редактором, ищем строчку
1
; extension_dir = "ext"
и заменяем её на
1
extension_dir = "C:\Server\bin\PHP\ext\"
Теперь найдите группу строк:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
;extension=bz2
;extension=curl
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
;extension=pdo_pgsql
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop
и замените её на:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
extension=gmp
extension=intl
extension=imap
;extension=interbase
extension=ldap
extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite
extension=pgsql
extension=shmop
теперь раскомментируйте эту группу строк:
1
2
3
4
5
6
;extension=soap
;extension=sockets
;extension=sqlite3
;extension=tidy
;extension=xmlrpc
;extension=xsl
должно получиться:
1
2
3
4
5
6
extension=soap
extension=sockets
extension=sqlite3
extension=tidy
extension=xmlrpc
extension=xsl
Этими действиями мы включили расширения. Они могут понадобиться в разных ситуациях для разных скриптов. Сохраняем файл и перезапускаем Apache.

6. Установка и настройка phpMyAdmin

В каталог c:\Server\data\htdocs\ копируем содержимое архива phpMyAdmin-4.5.1-all-languages.zip. Переименовываем phpMyAdmin-4.5.1-all-languages в phpmyadmin (для лаконичности)
В каталоге c:\Server\data\htdocs\phpmyadmin\ создаём файл config.inc.php и копируем туда:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
/* Servers configuration */
$i = 0;
/* Server: localhost [1] */
$i++;
$cfg['Servers'][$i]['verbose'] = '';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['nopassword'] = true;
$cfg['Servers'][$i]['AllowNoPassword'] = true;
/* End of servers configuration */
$cfg['blowfish_secret'] = 'kjLGJ8g;Hj3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V';
$cfg['DefaultLang'] = 'ru';
$cfg['ServerDefault'] = 1;
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
?>
В браузере набираем http://localhost/phpmyadmin/
В качестве имя пользователя вводим root. Поле пароля оставляем пустым. Если всё сделано правильно, то всё должно выглядеть так:
08

7. Использование сервера и бэкап данных

В каталоге c:\Server\data\htdocs\ создавайте папки и файлы, например:
c:\Server\data\htdocs\test\ajax.php – этот файл, соответственно, будет доступен по адресу http://localhost/test/ajax.php и т.д.
Для создания полного бэкапа всех сайтов и баз данных достаточно скопировать каталог C:\Server\data\.
Перед обновлением модулей, делайте бэкап папки bin – в случае возникновения проблем, можно будет легко откатиться к предыдущим версиям.
При повторной установке сервера или при его обновлении, необходимо заново настраивать конфигурационные файлы. Если у вас есть копии этих файлов, то процесс можно значительно ускорить. Желательно забэкапить следующие файлы:
  • c:\Server\bin\Apache24\conf\httpd.conf
  • c:\Server\bin\mysql-8.0\my.ini
  • c:\Server\bin\PHP\php.ini
  • c:\Server\data\htdocs\phpMyAdmin\config.inc.php
В них и хранятся все настройки.

8. Дополнительная настройка PHP

PHP в настоящее время очень мощный, гибкий, удобный инструмент. На локальном компьютере с помощью него можно решать разнообразные задачи, совсем не обязательно связанные с генерацией Web-страниц. При решении неординарных задач можно упереться в ограничения, установленные в настройках. Эти настройки содержаться в файле php.ini (c:\Server\bin\PHP\php.ini) Рассмотрим некоторые из них:
1
memory_limit = 128M
устанавливает максимальное количество памяти, которое может использовать скрипт
1
post_max_size = 8M
устанавливает максимальное количество данных, которые будут приняты при отправке методом POST
1
;default_charset = "UTF-8"
устанавливает кодировку (по умолчанию, строка закомментирована)
1
upload_max_filesize = 2M
максимальный размер загружаемого на сервер файла. Изначально установлен очень маленький размер – только два мегабайта. Например, при загрузке базы данных в phpMyAdmin, не получится загрузить файл больше 2 мегабайт до тех пор, пока не будет изменён этот пункт настройки.
1
max_file_uploads = 20
максимальное количество файлов для загрузки за один раз
1
max_execution_time = 30
максимальное время выполнения одного скрипта
Менять эти настройки совершенно необязательно, но полезно о них знать.

9. Дополнительная настройка phpMyAdmin

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

  • показ связей между (связанными) таблицами;
  • добавление информации о таблицах (начиная с версии 2.3.0 вы можете описывать в специальной таблице ‘table_info’ какая колонка будет показана во всплывающей подсказке при движении курсором над связанным ключом);
  • создание PDF-схемы (начиная с версии 2.3.0 вы можете в phpMyAdmin создавать PDF страницы, показывающие связи между вашими таблицами);
  • отображать комментарии столбцов (начиная с версии 2.3.0 вы можете делать комментарий с описанием каждого столбца для каждой таблицы. И они будут видны в «предварительном просмотре для печати». Начиная с версии 2.5.0, комментарии используются на собственных страницах таблиц и в режиме просмотра, показываясь как всплывающие подсказки над колонками (таблицы свойств) или встроены в заголовок таблицы в режиме просмотра. Они также могут быть показаны в дампе таблицы);
  • создавать закладки (начиная с версии 2.2.0, phpMyAdmin позволяет пользователям делать закладки на запросы. Это может быть полезно для часто используемых запросов);
  • история SQL-запросов (начиная с версии 2.5.0 вы можете сохранять вашу историю всех SQL запросов, которые были сделаны через интерфейс phpMyAdmin);
  • дизайнер (начиная с версии 2.10.0, доступен инструмент Дизайнер; он позволяет визуально управлять связями между таблицами);
  • информация о недавно использованных таблицах;
  • настройка интерфейса часто используемых таблиц;
  • слежение (начиная с версии 3.3.x доступен механизм слежения. Он помогает вам проследить каждую SQL команду, которая была выполнена phpMyAdmin’ом. Поддерживается запись работы с данными и запись команд. После включения, вы сможете делать версии таблиц);
  • пользовательские настройки (начиная с версии 3.4.x, phpMyAdmin позволяет пользователям задавать большинство настроек и сохранять их в базе данных);
  • настраиваемые меню (начиная с версии 4.1.0 вы можете создавать группы пользователей, которым будут доступны только назначенные пункты меню. Пользователь может быть определён в группу и будет видеть только пункты меню, доступные для его группы);
  • спрятать/показать пункты навигации (начиная с версии 4.1.0 вы можете спрятать/показать пункты в навигационном дереве).
  • и другие
Сейчас мы настроим эти дополнительные возможности в полной мере. Перейдите по ссылке http://localhost/phpmyadmin/chk_rel.php и кликните "Создать базу данных". После этого все новые функции будут активированы.
Несколько скриншотов новых функций:
1) Дизайнер
12
2) Слежение
11

10. Установка почтовой заглушки

В каталоге C:\Server\bin\ создайте новый каталог с названием Sendmail. Теперь в этом каталоге создайте файл sendmail.php со следующим содержимым:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/env php
  
<?php
/*  PHP.INI
 *  [mail function]
 *  ;SMTP = localhost
 *  ;smtp_port = 25
 *  ;sendmail_from = me@example.com
 *  sendmail_path = php.exe sendmail.php --dir C:\mail --open
 */
  
$is_windows = stristr(PHP_OS, 'WIN');
$options = getopt("", ['open', 'prepend', 'file:', 'dir:']);
$is_open = isset($options['open']);
$is_prepend = isset($options['prepend']);
$is_onefile = isset($options['file']);
$mail_dir = isset($options['dir']) ? $options['dir'] : sys_get_temp_dir() . '/mail';
$file_name = isset($options['file']) ? $options['file'] : mkname();
$file_path = $mail_dir . '/' . $file_name;
  
if (!is_dir($mail_dir)) {
    mkdir($mail_dir, 0777, TRUE);
    if (!is_dir($mail_dir)) {
        die('Mail folder [' . $mail_dir . '] not created');
    }
}
  
$stream = $is_onefile ? PHP_EOL . str_repeat("-=", 10) . date('Y-m-d H:i:s') . str_repeat("-=", 10) . PHP_EOL : '';
while (false !== ($line = fgets(STDIN))) {
    //$stream .= ($is_windows ? str_replace("\n", PHP_EOL, $line) : $line);
    $stream .= $line;
}
  
if ($is_prepend && file_exists($file_path)) {
    $file_contents = file_get_contents($file_path);
    $stream .= $file_contents;
}
  
file_put_contents($file_path, $stream, $is_prepend ? 0 : FILE_APPEND);
  
if ($is_open && $is_windows) {
    pclose(popen("start /B notepad " . $file_path, "r"));
}
  
function mkname($i = 0) {
    global $mail_dir;
    $fn = 'mail_' . date('Y-m-d_H-i-s_') . $i . '.eml';
    return file_exists($mail_dir . '/' . $fn) ? mkname( ++$i) : $fn;
}
Откройте конфигурационный файл PHP, он размещён здесь C:\Server\bin\PHP\php.ini. И добавьте туда одну строчку:
1
sendmail_path = "C:\Server\bin\PHP\php.exe C:\Server\bin\Sendmail\sendmail.php --dir C:\Server\bin\Sendmail\emails"
Сохраните файл и перезапустите сервер. Отлично, теперь все отправленные письма будут сохраняться в каталоге C:\Server\bin\Sendmail\emails\
054
Письма будут иметь расширение .eml и их можно открывать, например, программой Thunderbird. Либо обычным текстовым редактором.

11. Добавление PHP директории в PATH на Windows

Если этого не сделать, то могут быть проблемы с некоторыми модулями PHP, в том числе с php_curl.dll, php_intl.dll, php_ldap.dll, php_pdo_pgsql.dll и php_pgsql.dll. По крайней мере, при запуске сервера каждый раз в логах появляется следующее:
1
2
3
4
5
PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\\Server\\bin\\PHP\\ext\\php_curl.dll' - \xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.\r\n in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\\Server\\bin\\PHP\\ext\\php_intl.dll' - \xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.\r\n in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\\Server\\bin\\PHP\\ext\\php_ldap.dll' - \xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.\r\n in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\\Server\\bin\\PHP\\ext\\php_pdo_pgsql.dll' - \xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.\r\n in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\\Server\\bin\\PHP\\ext\\php_pgsql.dll' - \xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.\r\n in Unknown on line 0
Чтобы избежать этих предупреждений, нужно добавить в системные переменные среды путь до PHP.
Нажмите кнопку Пуск (или как там она называется на Windows 10?), начните набирать «Изменение системных переменных среды» и откройте соответствующее окно настроек.
02
Там нажмите «Переменные среды»:
03
В окне «Системные переменные» найдите и кликните на Path, потом нажмите «Изменить»:
04
Далее «Создать» и впишите туда «C:\Server\bin\PHP\»:
05
Поднимите запись в самый вверх:
Закройте все окна с сохранением сделанных изменений.
Перезапустите сервер.

12. Зависание, замедление трафика и/или ошибка сервера Asynchronous AcceptEx failed

Если ваш сервер даже без нагрузки «зависает» - не показывает веб-страницы до перезапуска, а в логах сервера ошибки Asynchronous AcceptEx failed:
1
2
3
4
5
6
7
8
9
10
11
[Thu Jun 05 07:24:55.747090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00455: Apache/2.4.9 (Win64) PHP/5.5.13 configured -- resuming normal operations
[Thu Jun 05 07:24:55.747090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00456: Apache Lounge VC11 Server built: Mar 16 2014 12:42:59
[Thu Jun 05 07:24:55.747090 2014] [core:notice] [pid 1784:tid 444] AH00094: Command line: 'c:\\Server\\bin\\Apache24\\bin\\httpd.exe -d C:/Server/bin/Apache24'
[Thu Jun 05 07:24:55.748090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00418: Parent: Created child process 4952
[Thu Jun 05 07:24:55.957978 2014] [mpm_winnt:notice] [pid 4952:tid 388] AH00354: Child: Starting 64 worker threads.
[Thu Jun 05 07:26:16.695036 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:26:16.695036 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:26:48.250710 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:26:48.250710 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:29:27.137784 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:29:27.137784 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
То в конфигурационный файл Apache добавьте:
1
2
3
4
AcceptFilter http none
AcceptFilter https none
EnableSendfile off
EnableMMAP off

13. Настройка cURL в веб-сервере Apache на Windows

Если вы не знаете, что такое cURL, значит это вам не нужно. Т.е. смело пропускайте этот шаг.
cURL – это консольная утилита, которая позволяет обмениваться данными с удалёнными серверами, используя очень большое количество протоколов. cURL может использовать кукиз и поддерживает аутентификацию. Если для веб-приложения требуется cURL, то это должно быть указано в зависимостях. Для многих популярных приложений cURL не требуется, например, для phpMyAdmin и WordPress нет необходимости настраивать cURL.
Если cURL настроена неправильно, то вы будете получать ошибки:
1
Fatal error: Call to undefined function curl_multi_init() in …
Или:
1
Ошибка curl: SSL certificate problem: unable to get local issuer certificate
Чтобы cURL работала в Apache на Windows вам нужно:
1) Обязательно добавить PHP директорию в PATH (системные переменные среды). Как это сделать сказано чуть выше: https://hackware.ru/?p=21#11
2) В файле C:\Server\bin\PHP\php.ini должна быть раскомментирована строка extension=curl
3) Необходимо скачать файл https://curl.haxx.se/ca/cacert.pem, затем в папке C:\Server\ создать новую папку с именем certs и в эту новую папку (C:\Server\certs\) переместите скаченный файл.
4) В файле C:\Server\bin\PHP\php.ini найдите строку
1
;curl.cainfo =
И замените её на
1
curl.cainfo = C:\Server\certs\cacert.pem
5) Перезапустите сервер.

14. Резервное копирование данных (сайты и базы данных) Apache в Windows

Вся значимая информация, т.е. файлы сайтов и их базы данных хранятся в папке C:\Server\data\. Резервную копию на тот случай, если первоначальные данные испортились, можно делать двумя способами.
Первый способ заключается в том, что мы просто делаем копию всех файлов (сайты+базы данных) в безопасное место. Это простой метод и для большинства он будет самым удобным.
Нужно начать с того, что остановить MySQL, поскольку пока она не остановлена, некоторые файлы баз данных открыты и не могут быть правильно скопированы:
1
net stop mysql
Теперь просто скопируйте в любое надёжное место папку C:\Server\data\. Она уже содержит и базы данных (подпапка C:\Server\data\DB\) и все сайты (подпапка C:\Server\data\htdocs\). Когда копирование будет завершено, вновь запустите службу MySQL:
1
net start mysql
Если вам понадобиться восстановить все сайты, либо отдельные сайты, либо только отдельные файлы сайта, то это можно делать без остановки веб-сервера.
Если нужно будет восстановить базы данных, то вновь нужно будет остановить MySQL и вернуть исходные файлы C:\Server\data\DB\.
Обратите внимание, что если вы полностью возвращаете исходную папку C:\Server\data\, то происходит полный откат всех данных, т.е. все изменения, сделанные после создания резервной копии, исчезнут!
Второй метод резервного копирования заключается в экспорте баз данных (это делается при запущенной службе MySQL) и создании бэкапа только папки сайтов C:\Server\data\htdocs\. Этот способ чуть сложнее, но вы можете контролировать, какие именно базы данных вы желаете экспортировать. Также в таком виде (базы данных в виде файлов .SQL и файлы сайтов) удобно переносить сайты на другой веб-сервер или хостинг. Подробности о том, как выполнять экспорт баз данных здесь.
Обычно это не требуется, но при желании вы можете сделать резервную копию бинарных (исполнимых) файлов сервера. Все эти файлы находятся в папке C:\Server\bin\. Это Apache, MySQL и PHP – т.е. программы, которые отвечают за работу сервера, но которые мы в любой момент можем скачать с официальных сайтов и вновь настроить.
Если вы хотите сделать их резервную копию (например, перед обновлением сервера), то остановите службы:
1
2
c:\Server\bin\Apache24\bin\httpd.exe -k stop
net stop mysql
И скопируйте в безопасное место папку C:\Server\bin\.
Кстати, вы можете скопировать весь сервер целиком, т.е. папку C:\Server\ - в этом случае одновременно получиться резервная копия и исполняемых файлов, и данных (базы данных, сайты).
Когда копирование завершено, вновь запустите службы:
1
2
c:\Server\bin\Apache24\bin\httpd.exe -k start
net start mysql

15. Обновление сервера

Все компоненты, составляющие веб-сервер, активно развиваются и регулярно выходят новые версии. При выходе новой версии вы можете обновить один какой-то компонент (например, PHP), или сразу несколько.
Обновление Apache
Скачайте архив с новой версией Apache.
Скопируйте в безопасное место файл c:\Server\bin\Apache24\conf\httpd.conf.
Остановите и удалите службу Apache:
1
2
c:\Server\bin\Apache24\bin\httpd.exe -k stop
c:\Server\bin\Apache24\bin\httpd.exe -k uninstall
Удалите папку C:\Server\bin\Apache24\ (это не затронет ваши сайты и базы данных).
Распакуйте новый архив в C:\Server\bin\. Скопируйте сохранённый ранее файл httpd.conf в c:\Server\bin\Apache24\conf\httpd.conf.
Запустите службу Apache:
1
2
c:\Server\bin\Apache24\bin\httpd.exe -k install
c:\Server\bin\Apache24\bin\httpd.exe -k start
Обновление PHP
Скачайте архив с новой версией PHP.
Скопируйте в безопасное место файл c:\Server\bin\PHP\php.ini.
Удалите папку C:\Server\bin\PHP\.
Распакуйте новый архив в C:\Server\bin\PHP.
Скопируйте сохранённый ранее файл php.ini в c:\Server\bin\PHP\php.ini.
Перезапустите службу Apache:
1
c:\Server\bin\Apache24\bin\httpd.exe -k restart
Обновление MySQL
Внимание: при обновлении с MySQL 5 до MySQL 8 требуются дополнительные действия. Смотрите подробности в статье: «Как обновиться с MySQL 5 до MySQL 8».
Скачайте архив с новой версией MySQL.
Скопируйте в безопасное место файл c:\Server\bin\mysql-8.0\my.ini.
Остановите и удалите службу MySQL:
1
2
net stop mysql
c:\Server\bin\mysql-8.0\bin\mysqld --remove
Удалите папку C:\Server\bin\mysql-8.0\ (это не затронет ваши сайты и базы данных).
Распакуйте новый архив в C:\Server\bin\. Переименуйте папку в mysql-8.0.
Скопируйте сохранённый ранее файл my.ini в c:\Server\bin\mysql-8.0\my.ini.
Запустите службу MySQL:
1
2
C:\Server\bin\mysql-8.0\bin\mysqld --install
net start mysql
Обновление phpMyAdmin
Скачайте архив с новой версией phpMyAdmin.
Скопируйте в безопасное место файл c:\Server\data\htdocs\phpMyAdmin\config.inc.php.
Удалите папку C:\Server\bin\phpMyAdmin\ (это не затронет ваши сайты и базы данных).
Распакуйте новый архив в C:\Server\data\htdocs\. Переименуйте папку в phpMyAdmin.
Скопируйте сохранённый ранее файл config.inc.php в c:\Server\data\htdocs\phpMyAdmin\config.inc.php.

16. Дополнительный материал по настройке веб-сервера в Windows:

Разнообразная информация об Apache в Windows, о настройках и использовании на apache-windows.ru

17. У меня ничего не работает

Данная инструкция регулярно проверяется и тестируется с самыми новыми компонентами. Поскольку инструкция объёмная, то возникновение ошибок может быть связано с тем, что вы что-то пропустили или сделали неправильно. Для начала попробуйте всё удалить и сделать всё заново.
За годы существования этой инструкции было собрано много типичных ошибок, возникающих в веб-сервере, все они вместе с решением проблем описаны на отдельной странице «Ошибки при настройке и установке Apache, PHP, MySQL/MariaDB, phpMyAdmin». Там же написано, как правильно описать свою проблему, чтобы вам помогли с ней разобраться.
Если у вас что-то не работает, то просьба перед тем, как задать вопрос в комментариях, выполнить поиск по данной странице ошибок. Для этого вы можете использовать Ctrl+F в вашем браузере и искать по части строки ошибки.
Бывает редкая ошибка, связанная с тем, что какая-то другая программа уже прослушивает 80й порт. Чтобы определить, занят ли уже порт 80 сделайте так:
1) нажмите сочетание клавиш WIN + x
2) из открывшегося списка выберете «Windows PowerShell (администратор)»
3) выполните там:
1
2
cmd
for /f "tokens=1,2,3,4,5*" %i in ('netstat -aon ^| findstr ":80" ^| findstr /i listening') do echo %j %l & @tasklist | findstr %m
Если какая-то программа уже висит на 80м порту, то вы её увидите.
Я собрал архив, который включает в себя все описанные здесь компоненты веб-сервера для Windows, которые уже правильно настроены. Т.е. вам достаточно просто распаковать этот архив, и вы получите готовый Apache. Подробности здесь: apache-windows.ru

Удаление сервера

Если сервер вам больше не нужен, либо вы хотите установить его заново, остановите службы и удалите их из автозапуска последовательно выполнив в командной строке:
1
2
3
4
c:\Server\bin\Apache24\bin\httpd.exe -k stop
c:\Server\bin\Apache24\bin\httpd.exe -k uninstall
net stop mysql
c:\Server\bin\mysql-8.0\bin\mysqld --remove
Удалите файлы сервера, для этого удалите папку C:\Server\Внимание, это удалит все базы данных и ваши сайты.