PHP — Вопросы и ответы — Джино

PHP — 
 Вопросы и ответы — Джино Хостинг
Содержание
  1. Что нужно, чтобы запустить php скрипт?
  2. Что такое php и как начать с ним работать
  3. Установка
  4. Создание локальной учетной записи
  5. Конфигурация Apache-сервера
  6. Версии php и оптимизаторы
  7. Выбор версии php на vps в ispmanager
  8. Директивы для настройки использования ресурсов
  9. Как выбрать версию php
  10. Как выполнять php-скрипты в заданное время по расписанию
  11. Как изменить значение опций, имеющих статус изменяемости php_ini_perdir или php_ini_all
  12. Как изменить параметры php?
  13. Как собрать свой собственный интерпретатор php или внести изменения на уровне компиляции php (добавление модулей, изменение системных опций php_ini_system)
  14. Как увеличить лимиты: потребление оперативной памяти (memory_limit), время выполнения скрипта (max_execution_time) и т.п.
  15. Обработка данных
  16. Общие настройки
  17. Ограничения
  18. Документация и полезные ссылки
  19. Поддерживаемые на нашем хостинге функции
  20. Поиск с помощью яндекс.xml
  21. Пошаговая настройка apache с выбором версий php nginx как reverse proxy (с mod_pagespeed) на ubuntu 16.04
  22. Работа с php-скриптами в командной строке
  23. Сессии
  24. Установка и запуск php программ на локальном сервере
  25. Установка и запуск php программ на хостинге
  26. Вывод ошибок в php

Что нужно, чтобы запустить php скрипт?

Для этого нужен веб-сервер и интерпретатор PHP. Всё это можно получить на своём компьютере абсолютно бесплатно. Сервером совсем не обязательно является отдельный компьютер. Веб-сервер — это просто программа, которую можно установить на любой, в том числе и на домашний, компьютер.

При этом она не будет мешать работе других программ и не изменит поведение компьютера. О том, как настроить веб-сервер под Widnows или Linux описано в соответствующих статьях. И ещё одна статья о том, как сделать локальный сервер доступным для всех.

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

Что такое php и как начать с ним работать

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

Если Вы хотите добавить динамику и интерактив на свой сайт, но при этом не хотите изучать более сложные языки вроде Perl, можно использовать PHP. Этот язык также содержит большое количество встроенных возможностей для работы с популярной СУБД MySQL, что делает выбор PHP для веб-программирования еще более привлекательным.

Начать использовать PHP очень просто: нужно создать в веб-пространстве файл с расширением *.php и поместить в него нужные PHP-инструкции. Например, создадим файл test.php в каталоге www вашего домена и поместим в него следующий текст:

Установка

Устанавливаем MariaDB и PHP-модуль для работы с MySQL, после завершения установки перезагружаем Apache

apt install mariadb-server php-mysqlsystemctl restart apache2

Для проверки обновим тестовую страницу и в таблице с конфигурацией PHP и перейдем к разделу PDO. Наличие секции “PDO_mysql” говорит о корректной установке драйвера для работой с базой данных Mysql.

Для дальнейшей работы необходимо выполнить первоначальную настройку безопасности MariaDB, во время которой для пользователя “root” устанавливается пароль, запрещается удаленный вход и удаляются гостевые учетные записи.

mysql_secure_installation

На первом шаге необходимо ввести пароль пользователя «root» для входа в СУБД или нажать Enter, если пароль не задан. Так как после установки учетная запись «root» не имеет пароля, нажимаем “Enter”.

Обратите внимание, что в MariaDB существуют собственные учетные записи, которые не имеют отношения к учетным записям операционной системы. Речь идет о пользователе «root» в MariaDB.

Далее конфигуратор предложит задать пароль для пользователя root, нажимаем “y” для подтверждения и вводим новый пароль, в нашем случае “Qwe123”

На все последующие запросы просто нажимаем “y” до окончания настройки.

Настройка завершена.

Данные для входа в MariaDB:

Создание локальной учетной записи

Сервер vsftpd позволяет очень гибко настраивать права доступа. Для решения наших задач ftp-пользователям необходимо обеспечить следующие возможности:

  • полный доступ к содержимому директории “/var/www/sites/”;
  • невозможность выхода за пределы директории “/var/www/”;
  • подключение с использованием виртуальной учетной записи;

Создадим локальную учетную запись “virtual” без возможности входа в систему, с домашней директорией “/var/www/”. Эта учетная запись будет использоваться для подключения виртуальных ftp-пользователей.

Конфигурация Apache-сервера

Конфигурационные файлы сайтов находятся в каталоге “/etc/apache2/sites-available/”. Создадим конфигурационный файл для нового виртуального хоста взяв за основу конфигурацию по умолчанию из файла “000-default.conf”

cd /etc/apache2/sites-available/cp 000-default.conf site1.conf

Откроем файл “site1.conf” и изменим параметр “DocumentRoot”. В качестве значения нужно указать путь к новому сайту, в нашем случае это “/var/www/sites/site1”

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

a2dissite 000-defaulta2ensite site1systemctl reload apache2

Версии php и оптимизаторы

На виртуальном хостинге доступны версии PHP 5.3, 5.45.67.0 и 7.2 с различными оптимизаторами. Сменить версию можно по инструкции.

Если ни один из сконфигурированных нами оптимизаторов не подходит, на тарифных планах Зенон-420, Зенон-630 и Зенон-840 допускается использование собственного файла конфигурации php.ini, в котором можно выполнить необходимые настройки. Он должен располагаться в корневом каталоге аккаунта и иметь название вида phpXX.ini, где XX — номер версии. Например, для PHP 5.6 это будет php56.ini, для 7.0 — php70.ini и т.д.

Подключить собственный php.ini можно в Панели управления, выбрав оптимизатор «Users php.ini» и скопировав исходный ini-файл в корень Вашей площадки (подробнее смотрите инструкцию по нужной версии PHP ниже).

Выбор версии php на vps в ispmanager

Чтобы для домена появилась возможность выбора версии PHP, необходимо включить настройку PHP в режиме FastCGI (Apache). Для этого выполните следующие действия:

Откройте панель управления ISPmanager и перейдите в раздел Пользователи, кликните по имени пользователя, под которым добавлен домен, и нажмите Изменить:

В блоке «Доступ» установите галочку Может использовать PHP в режиме FastCGI (Apache):

и сохраните изменения, нажав Ok внизу страницы;

После этого, для выбора версии PHP, перейдите в раздел WWW-домены, кликните по имени необходимого домена и нажмите Изменить:

В блоке «Дополнительные возможности» выставьте режим работы PHP FastCGI (Apache) и в выпадающем списке выберите необходимую версию PHP:

Для сохранения изменений кликните Ok внизу страницы.

Войдите в панель управления под пользователем «root» и перейдите в раздел Настройки — Возможности. Убедитесь, что активирована возможность Альтернативные версии PHP:

Если вы видите синюю лампочку, кликните по данной строке и нажмите Установить.

Модуль смены версий PHP может быть установлен в 2 случаях:

  1. При переустановке ОС: Как переустановить операционную систему на VPS. При переустановке операционной системы поставьте галочки в соответствии со скриншотом:
  1. В рамках услуги «Администрирования сервера». Стоимость и возможность установки оговаривается в каждом отдельном случае.

Теперь войдите в панель управления под этим пользователем, для этого выделите пользователя и нажмите Войти в правом верхнем углу.

Перейдите в раздел WWW домены два раза кликните на необходимом домене и в параметрах домена установите галочку напротив PHP и выставьте режим работыFastCGI (Apache):

В этом же разделе ISPmanager выберите или измените версию PHP:

Директивы для настройки использования ресурсов

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

  1. Время выполнения скрипта. По умолчанию максимальное время выполнения скрипта ― 30 секунд. Чтобы установить другое, введите:

    Где 60 ― количество секунд выполнения скрипта.

    Если указать 0, скрипт будет выполняться бесконечно.

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

  3. Объём памяти для одного скрипта (в МБ). Чтобы установить максимальный размер памяти, который может использовать один скрипт, введите:

    Где 128 ― максимальный объём памяти в MБ.

  4. Максимальный объём памяти, который может использовать один скрипт во время своего выполнения. Чтобы настроить, введите:

    Где 128 ― объём памяти в МБ.

  5. Максимальное количество переменных в GET и POST. Для этого введите директиву:

    Где 1000 ― количество переменных.

  6. Максимальный размер данных, который передаётся в POST-запросе. По умолчанию выставлен параметр ― 8 МБ. Чтобы его изменить, введите:

    Где 9 ― максимальное количество МБ.

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

    Где /var/www/ ― ограничивающая папка.

Как выбрать версию php

Зайдите в cPanel, найдите на главной странице панели блок «Программное обеспечение» и перейдите в раздел «Выбор версии PHP».

Блок «Программное обеспечение» на главной странице cPanel

Сразу же вверху вы увидите текущую версию PHP. Кликните по номеру версии, выберите в выпадающем списке ту, которая подходит вам больше, затем нажмите «Установить как текущую». Новая версия применится сразу для всех сайтов в учетной записи.

Секция с версией PHP в разделе «Выбор версии PHP»

Если для одного из сайтов в хостинговом аккаунте нужно установить свою РНР версию, добавьте в файл .htaccess этого сайта одну из команд из примера ниже.

Чтобы применить для сайта версию PHP, которой нет в примере, измените номер версии в команде.

Как выполнять php-скрипты в заданное время по расписанию

Иногда у PHP-программистов возникают задачи, которые требуют запуска PHP-скриптов в указанное время. Например, загрузка прайс-листа в базу данных, создание/удаление файлов на диске сервера, загрузка на сервер документов с других серверов и так далее. Можно использовать для этого возможности программы cron, которая работает на сервере.

Подробности о работе cron и его использовании Вы найдете в отдельном документе. Здесь же мы опишем тонкости запуска таким образом именно PHP-скриптов.

На наших серверах установлен бинарный файл интерпретатора PHP, который можно вызывать из cron. Полный путь к нему — /usr/local/bin/php. В качестве параметра нужно передать полный путь до запускаемого PHP-скрипта. Пример задания для cron:

в случае с PHP 5 

0 1 * * * /usr/local/bin/php /home/uXXXXX/script.php

или в случае с PHP 4

0 1 * * * /usr/local/bin/php /home/uXXXXX/script.php

В данном примере скрипт, который находится на диске сервера и имеет полный путь /home/uXXXXX/script.php, запускается в 1 час ночи каждый день. Не забывайте нажимать Enter после каждой строки в cron — все строки в сценариях cron должны заканчиваться переводом строки или задание работать не будет.

Как изменить значение опций, имеющих статус изменяемости php_ini_perdir или php_ini_all

Вы можете изменить некоторые директивы PHP непосредственно в личном кабинете. Для этого перейдите в раздел «Услуги», выберите виртуальную площадку и нажмите на Вашем сайте, для которого нужно изменить настройки PHP. На странице с параметрами размещенного сайта найдите строку Конфигурация PHP и нажмите изменить, как показано на рисунке:

На открывшейся странице Вам будет доступен интерфейс управления некоторыми настройками PHP-интерпретатора:

Если нужной директивы со статусом изменяемости PHP_INI_PERDIR или PHP_INI_ALL нет в списке, Вы можете изменить ее с помощью управляющего файла .htaccess

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

php_value mail.log "/home/u12345/phpmail.log"

Теперь все вызовы функции mail() скриптами этого сайта будут записываться в файл phpmail.log в корне площадки u12345. Аналогичным образом можно менять и другие директивы, если их статус изменяемости соответствует PHP_INI_PERDIR или PHP_INI_ALL.

Напомним значение и расшифровку констант PHP_INI_*:

Список, описание и статус изменяемости директив можно найти в приложении G документации PHP.

Как изменить параметры php?

Для каждой версии PHP можно установить свои параметры. Чтобы внести изменения в хостинг-панели:

Перейдите в «Менеджер файлов», затем в каталог php-bin-php(версия_php)/ и измените права для файла php.ini на 600 или 644 (rw-r—r—):

Откройте «Диспетчер файлов» и перейдите в каталог php-bin/ваш-домен. Измените права файла php.ini на 600 или 644 (rw-r—r—):

Перейдите в раздел «Файлы», затем в каталог etc и измените права для файла php.ini на 600 или 644 (rw-r—r—). Нажмите Применить:

Откройте файл php.ini и внесите необходимые изменения:

Готово. Изменения вступят в силу в течение минуты.

Директива max_execution_time задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, анализатор завершает его работу.

источник

Как собрать свой собственный интерпретатор php или внести изменения на уровне компиляции php (добавление модулей, изменение системных опций php_ini_system)

На серверах виртуального хостинга недоступен Си-компилятор, поэтому сборка из исходных кодов собственного PHP-интерпретатора невозможна. Если для работы Вашего проекта требуется нестандартная конфигурация PHP или наличие библиотек, которые отсутствуют в нашей сборке, мы рекомендуем рассмотреть наши услуги по аренде виртуального (VPS) или физического (dedicated) сервера без нашего администрирования.

Также о возможности установки нестандартного ПО на Вашей площадке Вы можете уточнить у наших инженеров службы технической поддержки, отправив письменную заявку «на свободную тему» из Личного кабинета. Возможно, предоставление этого ПО на площадках виртуального хостинга уже находится в наших ближайших планах, или мы сможем установить его для Вас на dedicated сервер с нашим администрированием.

Как увеличить лимиты: потребление оперативной памяти (memory_limit), время выполнения скрипта (max_execution_time) и т.п.

Лимиты потребления PHP-интерпретатором ресурсов сервера (memory_limit, max_execution_time и т.п.) регулируются тарифным планом площадки виртуального хостинга. Чтобы увеличить такие лимиты, необходимо перейти на следующий по старшинству тарифный план.

Ознакомиться с техническими параметрами Вашего тарифного плана можно в Приложении №1.1 к Публичной оферте (Договору), а также на странице с выводом функции phpinfo(), ссылка на которую доступна на странице с характеристиками тарифного плана.

Обработка данных

variables_order = «EGPCS» ; Устанавливает порядок, в котором PHP будет регистрировать перменные (E — встроенные переменные, G — GET переменные, P — POST переменные, C — Cookies, S — сессии). Если убрать любую из букв, то работа соответствующих переменных будет блокироваться.

register_globals = On ; Включает возможность для обращения к переменным, которые поступают через GET/POST/Cookie/сессии, как к обычным переменным (например «$имяпеременной»).

register_argc_argv = On ; Разрешено создавать переменные $argv и $argc на основе информации из GET-метода.

post_max_size = 8M ; Устанавливает максимальный объём данных, который может быть принят.

magic_quotes_gpc = On ; Включает автоматическую обработку кавычек, которые поступают через POST/GET/Cookie.

auto_prepend_file = ; Содержимое файлов, указанных в этих директивах, PHP должен обрабатывать соответственно ДО выполнения сценария
auto_append_file = ; Содержимое файлов, указанных в этих директивах, PHP должен обрабатывать соответственно ПОСЛЕ выполнения сценария.

default_mimetype = «text/html» ; Задает кодировку для Content-type. По умолчанию будет использовано text/html без указания кодировки

doc_root = ; Задается корневая папка для PHP-сценариев.

extension_dir = «./» ; Задается папка, в которой будут хранится динамически загружаемые расширения.

Общие настройки

PHPengine = On ; Работа PHP-скриптов включена.

short_open_tag = On  ; Разрешает упрощенно обрамлять PHP-код тагами <?. Если будет значение Off, то PHP-код обрамлять в традиционные <?php.

asp_tags = On ; Включает возможность выделять PHP-код, как это делается в ASP — <% %>

Precision = 12 ; Указывает сколько цифр будет после запятой, у чисел с плавающей точкой.

output_buffering = 4096 ; Автоматически будет включена буферизация вывода, с размером буфера указанным после «равно».

safe_mode = On ; Безопасный режим.

safe_mode_allowed_env_vars = PHP_ ; Разрешает пользователю работать только с переменными окружения, которые начинаются с PHP_. Если эта директива будет пустой (не будет иметь значения), то пользователи смогут изменять любые переменные окружения. Это может очень плохо сказаться на защите сценариев.

safe_mode_protected_env_vars = LD_LIBRARY_PATH ; Запрещает изменять переменные, которые перечисляются через запятую.

disable_functions = ; После знака «равно» нужно через запятую записать функции, которые вы хотите отключить (обычно это делается для безопасности)

disable_classes = ; После знака «равно» нужно через запятую записать классы, вызов которых вы хотите запретить (обычно это делается для безопасности)

Ограничения

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

  • dl
  • shell_exec
  • exec
  • system
  • passthru
  • popen
  • proc_open
  • proc_nice
  • proc_get_status
  • proc_close
  • proc_terminate
  • posix_mkfifo
  • set_time_limit
  • chown
  • chgrp
  • accelerator_reset
  • opcache_reset
  • accelerator_get_status
  • opcache_get_status
  • pcntl_alarm
  • pcntl_fork
  • pcntl_waitpid
  • pcntl_wait
  • pcntl_wifexited
  • pcntl_wifstopped
  • pcntl_wifsignaled
  • pcntl_wexitstatus
  • pcntl_wtermsig
  • pcntl_wstopsig
  • pcntl_signal
  • pcntl_signal_dispatch
  • pcntl_get_last_error
  • pcntl_strerror
  • pcntl_sigprocmask
  • pcntl_sigwaitinfo
  • pcntl_sigtimedwait
  • pcntl_exec
  • pcntl_getpriority
  • pcntl_setpriority


Если на самом деле Вы хотите использовать функции вроде exec для выполнения периодических заданий вроде бэкапа баз MySQL, пожалуйста, используйте для этого

. Если же нужно разово выполнить какую-то команду, можно использовать для этого

В помощь вам мы приводим ссылки на полезные ресурсы по тематике PHP:

Поддерживаемые на нашем хостинге функции

Мы используем одну из последних версий PHP в виде модуля для веб-сервера Apache, которая собрана с поддержкой следующих модулей (функций):

  • bcmath
  • calendar
  • ctype
  • curl
  • date
  • dba
  • dom
  • ereg
  • filter
  • ftp
  • gd
  • gettext
  • hash
  • iconv
  • imap
  • json
  • libxml
  • mbstring
  • mcrypt
  • mhash
  • mysql
  • mysqli
  • mysqlnd
  • openssl
  • pcre
  • PDO
  • pdo_mysql
  • Reflection
  • session
  • SimpleXML
  • SPL
  • standard
  • tokenizer
  • xml
  • xmlreader
  • xmlwriter
  • xsl
  • zip
  • zlib

Поиск с помощью яндекс.xml

Если Вы решили воспользоваться сервисом Яндекс.XML, то прежде всего вам потребуется выделенный IP-адрес, который Вы можете добавить для любого домена в личном кабинете: в меню Услуги > Виртуальная площадка >

Далее для организации запроса именно с выделенного IP-адреса существует несколько вариантов:

Использовать функцию socket_bind:

Пошаговая настройка apache с выбором версий php nginx как reverse proxy (с mod_pagespeed) на ubuntu 16.04

В интернете кучу статей по настройке сервера, настройки Apache, Nginx и т.п. В данной статье будет пошагово настроен простой shared хостинг. Все операции производятся через консоль.

В посте будут решены и описаны следующий задачи:

1. Установка Apache PHP
2. Возможность выбора версий PHP
3. Возможность работы сайтов от разных пользователей, с ограничением на чтение директорий других сайтов.
4. Установка Nginx с модулем pagespeed от google
5. Настройка Nginx как reverse proxy

Все этапы будут содержать описание и пояснения. Сам пост писался больше для себя, чтобы не потерять порядок настройки, но будет очень полезным для новичков, которые начинают разбираться в администрировании сервера. В качестве сервера установлен Ubuntu 16.0.4 только с SSH.

ЭТАП 1 (Установка Apache PHP)

Запускаем оболочку с root правами:

sudo -i

Устанавливаем apache:

apt install -y apache2

Ключ

 -y 

нужен для того чтобы в процессе установки, автоматически на все вопросы отвечал положительно. К примеру если выполнить:

 apt install apache2 

то в процессе установки нас спросят, действительно ли мы хотим установить.

Устанавливаем php (как mod_php)

 apt install -y php libapache2-mod-php 

На данном этапе у нас установиться php версии 7 как модуль apache.

ЭТАП 2 (Возможность выбора версий PHP)

На первом этапе мы установили сервер Apache PHP при чем PHP у нас работает как модуль Apache. Существует несколько режимов работы PHP подробную информацию можно прочитать по ссылке «Коротко о CGI, FastCGI, PHP-FPM и mod_php».

Если вам лень читать, то объясню проще:

1. mod_php — сам Apache выполняет php скрипт.

Плюсы: работает быстро, требует минимум настроек и знаний
Минусы: скрипты выполняются от пользователя apache (как правило www-data)

2. CGI/FastCGI — Сервер Apache запускает прикладной скрипт интерпретатора php-cgi, который в свою очередь выполняет php скрипт

Плюсы: скрипты выполняются от произвольного пользователя, можно использовать в связке с другими приложениями (Nginx PHP), конфигурацию PHP можно сделать индивидуальной
Минусы: скорость работы, дополнительная настройка

3.PHP-FPM — это модернизированный fast-cgi сервер который постоянно держит готовые для работы пул-процессов.

Плюсы: скорость работы, скрипты выполняются от произвольного пользователя, можно использовать в связке с другими приложениями (Nginx PHP-FPM — самая распространная реализация)
Минусы: дополнительная настройка, занимает порт, на каждого пользователя открывается свой порт.

Мы остановимся на CGI/FastCGI. На самом деле многие может испугать, что он самый медленный, но на большинстве shared хостингов, именно этот режим работы (ispmanager использует именно этот режим работы). Нам потребуется собрать из исходников версии php которые нам необходимы.

2.1 Сборка php из исходников

Обновляем репозиторий:

apt update

Устанавливаем необходимые для сборки пакеты:

apt install -y make 
git autoconf 
lynx 
wget 
build-essential 
libxml2-dev 
libssl-dev 
libbz2-dev 
libcurl4-openssl-dev 
libpng12-dev 
libfreetype6-dev 
libxpm-dev 
libmcrypt-dev 
libmhash-dev 
libmysqlclient-dev 
libjpeg62-dev 
freetds-dev 
libjson-c-dev 
re2c 
zlib1g-dev 
libpcre3 
libpcre3-dev 
unzip 
libxslt1-dev

Символ

используется как перенос строки, для удобства чтения.

Создаем папки для php:

mkdir -p /opt/source/php
mkdir -p /opt/php/

Переходим в директорию в которой будут храниться исходники php

cd /opt/source/php

Скачиваем необходимую версию php и распаковываем ёё:

wget -c http://php.net/get/php-5.6.18.tar.bz2/from/this/mirror -O php-5.6.18.tar.bz2
tar xvjf php-5.6.18.tar.bz2

В последней команде мы скачали по ссылке

php-5.6.18

и сохранили как php-5.6.18.tar.bz2

После чего распаковали архив.

Переходим в директория скаченного и распакованного php

cd /opt/source/php/php-5.6.18

Конфигурируем php

./configure --enable-cli 
 --prefix=/opt/php/php-5.6.18		
 --disable-rpath		
 --enable-calendar		
 --enable-discard-path 		
 --enable-fastcgi		
 --enable-force-cgi-redirect		
 --enable-fpm		
 --enable-ftp		
 --enable-gd-native-ttf		
 --enable-inline-optimization		
 --enable-mbregex		
 --enable-mbstring		
 --enable-pcntl		
 --enable-soap		
 --enable-sockets		
 --enable-sysvsem		
 --enable-sysvshm		
 --enable-zip		
 --with-bz2		
 --with-curl		
 --with-curl 		
 --with-freetype-dir		
 --with-gd		
 --with-gd 		
 --with-gettext		
 --with-jpeg-dir 		
 --with-jpeg-dir=/usr/lib/		
 --with-libdir=/lib/x86_64-linux-gnu		
 --with-libxml-dir=/usr		
 --with-mcrypt		
 --with-mhash		
 --with-mysql		
 --with-mysql 		
 --with-mysqli		
 --with-mysqli 		
 --with-openssl		
 --with-pcre-regex		
 --with-pdo-mysql		
 --with-png-dir=/usr		
 --with-zlib		
 --with-zlib-dir

Стоить обратить внимание на строку

—prefix=/opt/php/php-5.6.18

. Именно в эту директорию будет собран проект. Также вы самостоятельно можете добавлять или удалять необходимые модуль и компоненты php. Но при конфигурации обязательно должны быть —

enable-fastcgi

и

—enable-force-cgi-redirect

. После конфигурации собираем php

make
make install

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

/opt/php/php-5.6.18/bin/php -v

В результате будет что то вроде:

PHP 5.6.18 (cli) (built: Jun 8 2022 15:59:20)
Copyright © 1997-2022 The PHP Group
Zend Engine v2.6.0, Copyright © 1998-2022 Zend Technologies

2.2 Настройка Apache

Далее нам потребуется чтобы Apache вызывал php скрипт через режим fastcgi. Устанавливаем и активируем mod_fcgi

apt install libapache2-mod-fcgid
a2enmod cgi fcgid actions

перезапустим сервис Apache

service apache2 restart

2.3 Создание CGI скрипта

Создадим обертку для запуска PHP-FastCGI

mkdir -p /opt/php/php-5.6.18/fcgi-bin

В данной папке создадим скрипт с именем

php

со следующим содержимом

#!/opt/php/php-5.6.18/bin/php-cgi

. Лично я использую редактор nano.

nano /opt/php/php-5.6.18/fcgi-bin/php

Вставляем код, выходим CTRL X и подтверждаем изменения.

Делаем файл испольняемым:

chmod  x /opt/php/php-5.6.18/fcgi-bin/php

В той же директории создаем файл php.ini () можно скопировать

/opt/source/php/php-5.6.18/php.ini-production

.

2.4 Настройка хоста для Apache

В примере будет показана настройка виртуального хоста по умолчанию:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        <IfModule mod_fcgid.c>
            IPCCommTimeout 7200
            FcgidConnectTimeout 320
            MaxRequestLen 25728640
            FcgidMaxRequestsPerProcess 0
            FcgidBusyTimeout 3600
            FcgidOutputBufferSize 0
        </IfModule>

        <FilesMatch ".ph(p[3-5]?|tml)$">
                SetHandler fcgid-script
                FCGIWrapper /opt/php/php-5.6.18/fcgi-bin/php
        </FilesMatch>
        ErrorLog /var/www/html/error.log
        CustomLog /var/www/html/access.log combined
</VirtualHost>
<Directory /var/www/html>
        Options  Includes  ExecCGI
</Directory>

Перезапускаем настройки Apache:

service apache2 reload

ЭТАП 3 ( Возможность работы сайтов от разных пользователей, с ограничением на чтение директорий других сайтов.)

Для разграничения прав по пользователям у Apache есть 2 разных модуля suEXEC и ITK.

Рассмотрим как работает каждый из них:

ITK — При поступлении запроса, apache создает процесс-обработчик, который наследует права корневого процесса, но после проверки контекста меняет свои права на указанного пользователя.

suEXEC -При поступлении запроса apache запускает CGI и аналогичные собственные или сторонних разработчиков скрипты/программы внутри веб-папки домена от имени указанного пользователя.

suEXEC в нашем варианте предпочтительней из-за особенности архитектуры работы. Устанавливаем suEXEC

apt install apache2-suexec-custom
a2enmod suexec

Важно, для правильной работы suexec необходимы правильно выставить права на директории.
Как располагать директории вы должны определиться сами, в примере приведется пример, и он не является оптимальным.

Иерархия папок следующая:

|--/var/www/ - Корневая папка, права 751 владелец root
|----/php-bin - Папка храннения дефолтных настроек для php
|------/php-5.6.18 - Папка храннения дефолтных настроек для php-5.6.18
|--------php - Исполняемый файл для php-5.6.18
|--------php.ini - Дефольный файл настроке
|--------php.ini - Дефольный файл настроке
|----/apache-cert - папка хранения сертификатов для apache

Создаем папки для пользователя:

mkdir -p /var/www/users/admin
mkdir -p /var/www/users/admin/domain.ru
mkdir -p /var/www/users/admin/apache-log
mkdir -p /var/www/users/admin/php-bin
mkdir -p /var/www/users/admin/temp
mkdir -p /var/www/users/admin/temp/php-session

Копируем файлы настроек для php:

cp /opt/php/php-5.6.18/fcgi-bin/php /var/www/users/admin/php-bin/php
cp /opt/php/php-5.6.18/fcgi-bin/php.ini /var/www/users/admin/php-bin/php.ini

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

useradd -m -s /bin/bash admin
passwd admin

Выставляем владельца папки:

chown admin:admin -R /var/www/users/admin

Выставляем корневую директорию для пользователя:

usermod -d /var/www/users/admin admin

Настраиваем виртуальные хосты в apache:

<VirtualHost *:8080>
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/users/admin/domain.ru

	SuexecUserGroup admin admin	

	<IfModule mod_remoteip.c>
	      RemoteIPHeader X-Forwarded-For
	      RemoteIPHeader X-Real-IP
	      RemoteIPInternalProxy 127.0.0.1
	</IfModule>

	<ifmodule mod_rewrite.c>
		RewriteEngine On
		RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
	</ifmodule>


	<IfModule mod_fcgid.c>
	    IPCCommTimeout 7200
	    FcgidConnectTimeout 320
	    MaxRequestLen 25728640
	    FcgidMaxRequestsPerProcess 0
	    FcgidBusyTimeout 3600
	    FcgidOutputBufferSize 0
	</IfModule>

	<FilesMatch ".ph(p[3-5]?|tml)$">
		SetHandler fcgid-script
		FCGIWrapper /var/www/users/admin/php-bin/php
	</FilesMatch>

	ErrorLog /var/www/users/admin/apache-log/error.log
	CustomLog /var/www/users/admin/apache-log/access.log combined
</VirtualHost>
<Directory /var/www/users/admin/www>
	AllowOverride All
	Options  Includes  ExecCGI
</Directory>

В настройках php.ini пользователя меняем session.save_path

session.save_path = /var/www/users/admin/temp/php-session

Перезапускаем apache:

service apache2 restart

ЭТАП 4 (Установка Nginx с модулем pagespeed от google)

Забегая вперед, для поддержки pagespeed в Nginx требуется пересобрать сам Nginx с этим модулем, но чтобы потом не лазить дополнительно в настройках, проще сначало установить его.
Изменяем порты для Apache:

/etc/apache2/ports.conf
  Ваши созданные виртуальные хосты

Перезапускаем Apache:

service apache2 restart

Устанавливаем ngnix:

apt-get install nginx

Собираем Nginx с pagespeed

Вначале необходимо установить все необходимы для сборки пакеты:

apt install -y build-essential zlib1g-dev libpcre3 libpcre3-dev unzip libxslt1-dev libgd-dev libgeoip-dev

Создаем папки для исходников nginx:

mkdir -p /opt/source/nginx
cd /opt/source/nginx

Скачиваем и распаковываем pagespeed и psol. Yt cnjbn g

wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.11.33.4-beta.zip
unzip v1.11.33.4-beta.zip
cd ngx_pagespeed-1.11.33.4-beta
wget https://dl.google.com/dl/page-speed/psol/1.11.33.4.tar.gz
tar -xzvf 1.11.33.4.tar.gz

Сам psol скачивается и распаковывается в директории с ngx_pagespeed. Переходим в папку с Ngnix

cd /opt/source/nginx

Проверяем версию ngnix (по умолчанию в ubuntu 16.0.4 устанавливается 1.10.0):

nginx -V

Загружаем т версию NGINX:

wget https://nginx.ru/download/nginx-1.10.0.tar.gz
tar -xvzf nginx-1.10.0.tar.gz

Собираем nginx с теми же параметрами что и установленный, но в конце добавляем дополнительные модули:

cd /opt/source/nginx/nginx-1.10.0
./configure 
--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads 
--add-module=/opt/source/nginx/ngx_pagespeed-1.11.33.4-beta 
--with-http_mp4_module

Собираем Nginx:

make
make install

Собранный бинарный файл Nginx располагается в директории /opt/source/nginx/nginx-1.10.0/objs/nginx. Для того чтобы установить, требуется просто заменить текущий испоняемый файл Nginx на собранный.

Остановим Nginx, заменим файл, и перезапустим его.

service nginx stop

#Переименовываем (на всякий случай) текущий nginx в nginx_backup:

mv /usr/sbin/nginx /usr/sbin/nginx_backup

# Перемещаем на его место новый собранный бинарник:

mv /opt/source/nginx/nginx-1.10.0/objs/nginx /usr/sbin/nginx

перезапускаем Nginx:

service nginx start

Создаем папку хранения кэша для pagespeed:

/var/www/temp/
/var/www/temp/page-speed/

Добавим /etc/nginx/nginx.conf в секцию http:

pagespeed on;
pagespeed FileCachePath "/var/www/temp/page-speed/";
pagespeed EnableFilters combine_css,combine_javascript,rewrite_images,rewrite_css,rewrite_javascript,inline_images,recompress_jpeg,recompress_png,resize_images;
pagespeed JpegRecompressionQuality 85;
pagespeed ImageRecompressionQuality 85;
pagespeed ImageInlineMaxBytes 2048;
pagespeed LowercaseHtmlNames on;

ЭТАП 5 (Настройка Nginx как reverse proxy )

Скажу скажу что в интернете кучу статей для настройки Nginx как reverse proxy. Я лиш приведу ознакомительный вариант настройки.

server { 

	listen 80; 
	server_name domain.ru; 
	access_log /var/log/nginx.access_log;


	location ~* .(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ { 
		root /var/www/users/admin/domain.ru; 
		index index.html index.php; 
		access_log off; 
		expires 30d; 
		error_page 404 = @prox;
	} 

	location @prox{
		proxy_pass 127.0.0.1:8880; 
		proxy_set_header X-Real-IP $remote_addr; 
		proxy_set_header X-Forwarded-for $remote_addr; 
		proxy_set_header Host $host; 
		proxy_connect_timeout 60; 
		proxy_send_timeout 90; 
		proxy_read_timeout 90; 
		proxy_redirect off; 
		proxy_set_header Connection close; 
		proxy_pass_header Content-Type; 
		proxy_pass_header Content-Disposition; 
		proxy_pass_header Content-Length;
	}


	location ~ /.ht { 
		deny all; 
	} 


	location / { 
		proxy_pass 127.0.0.1:8880; 
		proxy_set_header X-Real-IP $remote_addr; 
		proxy_set_header X-Forwarded-for $remote_addr; 
		proxy_set_header Host $host; 
		proxy_connect_timeout 60; 
		proxy_send_timeout 90; 
		proxy_read_timeout 90; 
		proxy_redirect off; 
		proxy_set_header Connection close; 
		proxy_pass_header Content-Type; 
		proxy_pass_header Content-Disposition; 
		proxy_pass_header Content-Length; 
	} 
} 

Работа с php-скриптами в командной строке

Прежде чем начать работу, подключитесь к серверу по SSH.

По умолчанию php скрипты запускаются под «системной» сборкой php (5.3), например:

Соответственно, команда php -v покажет информацию о «системной» сборке php, а не той, что активирована в панели управления хостингом:

Сборки php, которые вам доступны в панели управления хостингом, расположены в /opt/php:

Обратите внимание: скрипты можно запускать и через php, и через php-cgi. Например:

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

Для запуска скрипта под версией «php 5.5» необходимо выполнить команду:

/opt/php/5.5/bin/php www/mysite.ru/info.php

где:

видно, что скрипт запустился под «php 5.5».

Аналогичным образом можно запустить скрипт под любой другой доступной сборкой php:

Узнать подробную информацию о сборке php можно при помощи команды:

Сессии

session.save_handler = files ; Уазывает, что информацию о сессиях нужно хранить в файлах

session.save_path = /tmp ; После знака «равно» нужно указать путь к папке в которой будет храниться информация о сессиях (важно чтобы она папка уже существовала)

session.use_cookies = 1 ; Разрешает использование cookie в сессиях

session.name = PHPSESSID ; Указывает на исользование в качестве имени сессии и сессионной cookie — ID сессии

session.auto_start = 0 ; Запрещает инициализировать сессии при начале соединения

session.cookie_lifetime = 0 ; Время жизни сессии («0» — значит, что сессия живет, пока окно браузера не будет закрыто)

session.use_trans_sid = 1 ; Если пользователь отключил cookie, то во всех ссылках будет добавлен ID сессии

Установка и запуск php программ на локальном сервере

После окончания установки и настройки сервера, перейдите в корневую папку веб-сайтов. Этой папкой, например, может быть C:Serverdatahtdocs (такой каталог у тех, кто устанавливал по моей инструкции). В этот каталог можно скопировать файл или файлы с расширением .php.

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

Установка и запуск php программ на хостинге

Для начала, нам нужен хостинг. Самый лучший хостинг, на котором работает, в том числе и shhost.ruздесь. Обратите внимание, чтобы был введён промокод: c79d4aad

Тогда вы получите все бонусы: бесплатный месяц, бесплатный домен, скидку при оплате на год и т. д.

Итак, хостинг у нас уже есть. Теперь нам нужно закачать файлы на него. Это можно сделать, например, через FTP. Я долго пользовался FTP и, честно говоря, я не в восторге от этой давно устаревшей технологии. Соединение FTP можно настроить, например, в файловом менеджере вроде Double Commander (или Total Commander).

/shhost.ru/blogs/htdocs/www/

Т.е. корневой каталог сайтов размещён по адресу:

ваш_домен/htdocs/www/

Если вы скопируете PHP файл progaramm.php в этот каталог, то она будет доступна по адресу

Вывод ошибок в php

Иногда возникает необходимость получить информацию о том, какие ошибки возникают при выполнении PHP-скриптов. При использовании PHP как модуля Apache (по умолчанию именно так) вывод ошибок доступен в личном кабинете в меню Услуги, выбрав виртуальную площадку, где размещен сайт, затем Домен в списке сайтов, далее в параметрах Журнал регистрации ошибок: > error_log.

Иногда имеет смысл включить вывод ошибок PHP-скриптов на экран. Возможно 2 случая:

Если Вы используйте PHP-интерпретатор как модуль Apache, создайте в той директории, где находятся скрипты, файл .htaccess (если он не существует) и добавьте 2 строки, одна из которых включает вывод ошибок в браузер, а вторая определяет уровень отображаемых ошибок:

php_flag display_errors on
php_value error_reporting 2047

Число 2047 является значением константы E_ALL и включает вывод всех типов ошибок. Значение константы E_ALL зависит от версии PHP. Точное значение можно узнать на сайте разработчика.

Если Вы используете PHP-интерпретатор как CGI, то для вывода ошибок следует в файле настроек для PHP, изменить значение параметра

display_errors = Off
display_errors = On

Кроме этого, надо изменить значение параметра error_reporting со значения E_ALL & E_NOTICE на простое E_ALL (по желанию).

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

Оцените статью
Хостинги