Время на прочтение
6 мин
Количество просмотров 21K
Эта статья будет полезна тем людям, у которых уже есть свой сайт, или которые планируют его открыть. Особенно интересна статья будет амбициозно настроенным вебмастерам, которые чувствуют, что звездный час их проекта не за горами и хотят подготовиться к наплыву посетителей страницы.
Даже те, кто пока только мечтают о тысячах пользователей на своём сайте, наверняка задавались вопросом: “А сколько же пользователей мой сайт выдержит, если они зайдут одновременно?” Сразу вспоминается известное выражение “Хабраэффект” – явление отказа сайта, который оказался не готов к многочисленным переходам на него после появления в интернете ссылки.
Предположим, что сайт уже есть (или скоро будет): где же его разместить? Это должен быть классический хостинг или vps-сервер? Если vps, то какой и как его лучше настроить? А может быть вообще нет никакой разницы и проще выбрать то, что подешевле? В этой статье мы рассмотрим несколько вариантов и на практике убедимся, какой из них подойдёт лучше для нашего сайта.
Будем экспериментировать: ставить разные режимы работы сервера и замерять производительность. Нагрузку на сайт будем имитировать с помощью сервиса Loaddy.com. Там можно задать количество пользователей, нарастающий тип нагрузки и по графику будет видно, как сервер реагирует на них. Считается, что один пользователь генерирует примерно один запрос к сайту в течение 10 секунд. В качестве испытуемого сайта возьмем демонстрационный интернет-магазин на cms moguta. Он будет заполнен тестовыми «товарами», которые выводятся на главную страницу по нескольким критериям (то есть при формировании страницы идет работа с базой данных и т.п.). Так или иначе, это позволит сравнивать режимы между собой.
В качестве тестовой площадки создадим впс-сервер на ос Ubuntu. Конфигурация его будет [1 ядро, 1Gb RAM]. Будем считать, что именно такие серверы начального уровня создают в большинстве случаев для новых проектов. Тестовая версия интернет-магазина будет доступна по ip адресу http://130.193.44.219/
Еще пригодится классический хостинг, на который мы также зальем тот же самый интернет магазин, чтобы провести испытания. Вы можете пройти наш путь сами и провести такие же тесты на своем проекте!
Так как в большинстве случаев вместе с vps предлагается панель управления, основные изменения настроек будем производить в ней. На vps сервере нам доступно 3 режима его работы:
- Apache;
- Apache в режиме CGI;
- Nginx + php-fpm (без Апача).
Но сначала проведем испытания на хостинге:
Классический недорогой хостинг

Результат доступен по ссылке.
Ошибки появляются, когда количество посетителей превышает 50 чел. Хостинг перестаёт отдавать контент, при этом, если зайти в панель управления хостингом, то мы можем увидеть примерно следующее:
Ваш сайт подвергался ограничениям в течение последних 24 часов. Ресурсы процессора ограничивались для Вашего сайта. Вы достигали пределов по входным процессам (количеству одновременно запущенных PHP и CGI скриптов, заданий по расписанию и консольных сессий) 126 раз.
Что ж, понятно, хостинг есть хостинг, тем более недорогой. Можно, конечно, найти такой тариф, который будет предоставлять больше возможностей, но это всё нужно учитывать, каким-то образом узнавать точные данные ограничений, причем у каждого хостинг-провайдера.
VPS: Apache
Следующий на очереди – наш тестовый впс с режимом апач, который кстати предлагается по умолчанию, при установке панели управления ISP.

Результат доступен по ссылке.
Проблемы начинаются, когда число пользователей переваливает за 90. Если мы зайдем на наш сервер по ssh и посмотрим в этот момент на список процессов по команде top, отсортированный с помощью Shift+M (по количеству потребляемой памяти), то увидим примерно такую картину:

Мы видим, что процесс apache2 разросся на много дочерних и они съели всю оперативку нашего vps сервера.
Здесь нужно сделать небольшую ремарку. Дело в том, что для сервера апач теоретически существует режим, который позволяет вместо этого большого числа дочерних процессов для каждого соединения создать несколько так называемых мультитредовых, каждый из которых обслуживал бы по нескольку соединений. Называется этот режим worker, в отличие от дефолтного prefork. Но установить его непросто, в панелях типа ISP это сделать невозможно, а если озадачиться и попытаться это осуществить через ssh, то выяснится, что для этого мало выключить prefork и включить worker, еще нужна тредобезопасная версия php. А если используются модули типа Zend или IonCube, то они тоже должны быть тредобезопасными. Да и вообще, официальный сайт PHP не рекомендует устанавливать этот режим.
VPS: CGI
Давайте посмотрим, что будет при использовании режима CGI. Для этого нужно в панели управления ISP разрешить использовать PHP в режиме CGI, это делается в разделе «Учетные записи – пользователи – настройки для пользователя».

Результат доступен по ссылке.
Безрадостная картина получилась. Сервер отказывается выдавать контент уже при 55+ посетителях, оперативная память вся съедена процессами “php”. Далее идёт попытка восстановления работоспособности, но всё равно всё оканчивается практически 100% отказами.
VPS: Nginx + PHP-FPM
Настало время режима, в котором сервер Apache не используется вовсе, вместо него работает Nginx, а php обрабатывается модулем php-fpm. Если вы используете панель управления ISP, то необходимо разрешить этот режим для пользователя. Это также делается в разделе «Учетные записи – пользователи – настройки для пользователя». Также этот режим должен быть доступен в разделе «Настройки – Возможности – Веб-сервер(www)».

Результат доступен по ссылке.
То, что нужно! 100% доступности, при этом скорость загрузки и время ответа сервера находятся на приемлемых уровнях, хоть и возрастают с ростом нагрузки. Тем не менее сервер справляется!
Посмотрим на таблицу процессов в момент максимальной нагрузки на сервер:

Мы видим, что у нас есть еще запас по доступной оперативной памяти. А дочерние процессы php-fpm7.0 не разрастаются в больших количествах, а ограничены 5-ю экземплярами, каждый из которых обслуживает несколько потоков.
Что ж, похоже «режим-победитель» определен. Давайте выясним, сколько же одновременных посетителей сможет обслужить наш сервер в таком режиме. Но перед этим сделаем небольшой «тюнинг». Во-первых, так как apache не используется при такой работе сервера, его можно вовсе отключить. Это сделаем в панели управления ISP в разделе «Система – Службы». Во-вторых, изменим немного принцип запуска процессов php-fpm. По умолчанию он динамический. Это значит, что дочерние процессы будут висеть в памяти даже когда они не нужны. При этом память не освобождается и со временем эти процессы могут разрастись больше чем нам бы хотелось. Поэтому предлагается установить режим “ondemand” – по требованию. И задать количество дочерних процессов и время таймаута для них.
Для этого нужно будет зайти на сервер по ssh и прописать эти настройки в конфигурационный файл php. Это удобно сделать в файле для пользователя, для которого был создан домен в ISP.
Обычно он находится в /etc/php/7.0/fpm/pool.d
Итак:
sudo nano /etc/php/7.0/fpm/pool.d/www-root.conf Видим там по умолчанию такие настройки:
[www-root]
pm = dynamic
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_children = 5
pm.max_spare_servers = 5 Чтобы заработал режим ondemand, нужно заменить это на:
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 10s И перезапустить php-fpm командой
sudo service php7.0-fpm restart После этого процессы php-fpm7.0 будут создаваться по требованию (при наличии нагрузки), максимальное их количество будет =5, а после 10 секунд простоя процесс будет убиваться, освобождая оперативную память.
На всякий случай, запустим наш тест еще раз, чтобы убедиться, что вся эта самодеятельность не повлияла в худшую сторону на производительность сайта:

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

Результат доступен по ссылке.
Радует то, что все запросы были обработаны, пусть и с большой задержкой, при большом их количестве в секунду. Время ответа сервера приближается к 10 секундам при количестве обращений 190+ Но давайте вспомним график режима apache, где 4 секунды ответа сервера мы получили уже при 80+ пользователях, тогда как в режиме php-fpm аналогичные лаги наблюдаются при 130 запросах, которые мы специально выделили курсором на графике выше.
А ведь это тот же самый VPS.
Таблица процессов top в конце испытания (при 200 пользователях):

Заметим, что после окончания тестирования, память, используемая pfp-fpm освободилась:

А значит наш сервер готов к новым нагрузкам.
Необходимо помнить, что сайт работает в режиме nginx+php-fpm, это означает что в работе не используется apache2 и как следствие – не используется .htaccess. Это может казаться не удобным, но это самый быстрый из возможных вариантов, а поисковики лучше ранжируют сайты, которые работают быстро.
Заключение
В завершении еще один небольшой момент: Если вы настроили на сервере всё что хотели и решили отключить панель управления ISP, или у вас кончилась на неё лицензия, учтите, что процесс “core” от неё так и останется висеть у вас на сервере. По прошествии месяцев он может разрастись, так что лучше его “убить” и удалить из автозапуска и crona.
Если хотите самостоятельно протестировать сайт с помощью Loaddy или же другими методами, он доступен по адресу http://130.193.44.219/
Веб-сервер может запускать ваши скрипты в различных режимах. Работают они совершенно по разному и если подобрать подходящий вариант, это может сказаться положительно на работе сайта.
У нас поддерживаются следующие режимы работы PHP:
- PHP как модуль Apache (версия не меняется)
- PHP-FPM Nginx (версия не меняется)
- CGI
- FastCGI Apache
- LSAPI (включается по запросу)
Ниже будет описание всех режимов работы.
Для определения какой режим у вас включен, перейдите в раздел «Сайты» в панели хостинга.

Если там не нужный режим, смените его. Нажмите на строку с доменом и кнопку «Редактировать» > «Изменить«, найдите подраздел «Обработчики PHP» выберите режим (например FastCGI Apache) и сохраните.

В подразделе «Обработчики PHP«, выберите режим работы и нажмите «Сохранить«

Как менять версию PHP смотрите по этой ссылке.
Описание режимов работы PHP
PHP как модуль Apache
Плюсы:
- Быстро работает, за счет того, что обработчик постоянно в памяти.
- Можно указывать переменные через .htaccess
- Поддерживает кэширование
- Низкое потребление памяти
Минусы:
- Проблема с правами пользователя, и безопасностью файлов, так как файлы записываются и редактируются не от владельца файлов, а от имени сервера. Поэтому надо ставить права 666 или 777 на файлы куда ведется запись.
- Нельзя изменить версию PHP
PHP-FPM Nginx
Альтернатива PHP FastCGI, работает похоже. На сервере постоянно запускается процесс-обработчик для обработки скриптов и удаляется только через определённый промежуток времени. При увеличении нагрузки на сайт, количество процессов может расти для ускорения обработки скриптов.
Плюсы:
- Быстро работает, за счет того, что обработчик постоянно в памяти;
- Поддерживает кэширование;
- Запуск скриптов от имени их владельца.
- Потребляет мало памяти
Минусы:
- Нельзя изменить версию PHP
PHP CGI
На каждый запрос происходит загрузка интерпретатора в память, из-за чего возможно замедление работы выполнения скриптов. Однако, из-за того, что после выполнения скрипта процесс закрывается, очень низкий расход памяти. Отлично подходит для тарифов с небольшой ОЗУ и небольших сайтов.
Плюсы:
- Запуск скриптов от имени их владельца;
- Потребляет мало памяти, обычно даже меньше чем FastCGI.
- Можно выбрать версию PHP;
- Поддерживает обработку переменных в файле .user.ini
Минусы:
- Самый медленный из всех обработчиков;
FastCGI Apache
На сервере постоянно запускается процесс-обработчик интерпретатор для обработки скриптов и удаляется только через определённый промежуток времени. При увеличении нагрузки на сайт, количество процессов может расти для ускорения обработки скриптов.
Сейчас используется по умолчанию на новых сайтах.
Плюсы:
- Быстро работает, за счет того, что обработчик обычно уже в памяти;
- Поддерживает кэширование;
- Запуск скриптов от имени их владельца;
- Можно выбрать версию PHP;
- Поддерживает обработку переменных в файле .user.ini
Минусы:
- Может переполнять память, если большая посещаемость или скрипты тяжелые и долго выполняются. Так как начинает плодить интерпретаторы. (Лечится сменой тарифа на больший.)
LSAPI LiteSpeed PHP (включается по запросу)
Похож по принципу работы на FastCGI, но создан совершенно на другой технологии, отличной от CGI. Более экономично расходует память, чем FastCGI. Считается, что и работает чуть быстрее (но это не точно).
В будущем планируется использовать по умолчанию. В данный момент разработчики панели ISPManager не могут допилить, чтобы можно было, сразу включить в тариф. Поэтому включается клиенту сейчас вручную по запросу в поддержку.
Плюсы:
- Быстро работает, за счет того, что обработчик обычно уже в памяти;
- Поддерживает кэширование;
- Запуск скриптов от имени их владельца;
- Можно выбрать версию PHP;
- Поддерживает обработку переменных в файле .user.ini и .htaccess одновременно.
Минусы:
- Может переполнять память, если большая посещаемость или скрипты тяжелые и долго выполняются. Так как начинает плодить интерпретаторы. (Лечится сменой тарифа на больший.)
Веб-серверы могут обрабатывать php-скрипты в разных режимах. Если выбрать подходящий вариант взаимодействия PHP и веб-сервера на сайте, например, PHP как CGI или Apache-модуль, это положительно отразится на его производительности.
Выбрать режим работы PHP можно на VPS с панелью управления ISPmanager и Plesk. На виртуальном хостинге REG.RU по умолчанию используется режим FastCGI.
Подробнее о том, какие режимы PHP поддерживаются на хостинге REG.RU, читайте в статье.
В этой статье мы рассмотрим основные режимы работы PHP.
PHP как модуль Apache (mod_php)
Модуль для веб-сервера Apache, который позволяет ему обрабатывать все запросы PHP, не используя сторонние модули.
Преимущества:
- Высокая производительность;
- Можно вводить переменные PHP в .htaccess.
Недостатки:
- отдельные пользователи на сервере с mod_php не могут вносить изменения, если у них нет прав доступа на все процессы, с которыми он работает. Иными словами, права веб-сервера должны выдаваться всем пользователям на сервере;
- Низкий уровень безопасности, так как нельзя определить пользователя, который запустил конкретный процесс (все процессы выполняются анонимно под пользователем apache);
- Ошибки в скриптах могут парализовать работу всего сервера;
- Веб-серверы с mod_php медленно обрабатывают статические данные.
PHP в режиме CGI и FastCGI
PHP CGI — один из первых сценариев обработки php-скриптов сервером с помощью модуля mod_cgi. Сейчас он используется редко и считается устаревшим.
В этом режиме каждый php-запрос выполняется отдельным процессом. Из-за этого производительность сайта снижается, и на обработку скриптов требуется больше времени.
Развитием технологии CGI (Common Gateway Interface) стал интерфейс FastCGI.
При создании сценария FastCGI учли медленную скорость обработки скриптов в CGI, поэтому в этом режиме используется циклическая обработка нескольких запросов одним процессом. FastCGI — это экономия оперативной памяти за счет сокращения количества запущенных процессов.
Преимущества:
- Пользователь обладает правами на выполнение всех скриптов на своем www-домене;
- Безопасность (каждый запрос выполняется под отдельным пользователем, запуск небезопасного php-скрипта не повлияет на файлы других пользователей, которые находятся на одном с ним сервере);
- Каждый пользователь на сервере может выбрать персональную версию PHP;
- Отсутствие сбоев сервера при наличии ошибок в скриптах;
- Обработка правил конфигурационного файла .htaccess, который поддерживается популярными CMS (WordPress, Joomla, 1C-Битрикс и пр.).
Недостатки:
- Чуть меньшая производительность по сравнению с модулем Apache;
- Медленная обработка статических данных без связки с веб-сервером Nginx.
PHP в режиме FPM
FPM (FastCGI Process Manager) — альтернативная реализация PHP FastCGI. PHP FPM — это единственный модуль, который подходит для чистого веб-сервера Nginx.
Как работает PHP FPM:
- Быстрая обработка статических данных;
- Отсутствует необходимость в веб-сервере Apache;
- Меньшее потребление оперативной памяти.
Недостатки:
- Отсутствует поддержка конфигурационного файла .htaccess. Это требует самостоятельной настройки аналогичных правил на стороне веб-сервера Nginx.
О выборе режима PHP
Выбор режима PHP зависит от требований ваших сайтов и доступных ресурсов сервера. В большинстве случаев мы рекомендуем использовать клиентам режим FastCGI, так как он подходит для корректной работы большинства CMS и требует меньше действий со стороны пользователя.
VPS с установленной CentOS
Закажите сервер с чистой CentOS или панелью управления ISPmanager всего за пару минут.
Заказать VPS c Centos
В панели ISP вам доступны несколько режимов работы PHP:
- Модуль Apache (mod_php)
- CGI
- FastCGI
- PHP-FPM (Nginx + PHP-FPM)
Модуль Apache (mod_php)
При работе PHP в этом режиме PHP-код обрабатывается самим веб-сервером Apache (его модулем PHP), а не сторонними модулями.
Особенности
- Наиболее быстрый из режимов Apache (но уступает по скорости Nginx + PHP-FPM).
- Есть возможность редактировать параметры через .htaccess.
- Основные настройки PHP указываются глобально для всех доменов пользователей и могут быть изменены только администратором.
- Можно выбрать только одну версию PHP, которая будет применена для всех пользователей.
- Все процессы запускаются под пользователем apache, из-за чего невозможно определить конкретного пользователя, который запустил тот или иной процесс.
- Медленная обработка статических файлов.
Как включить режим
- В разделе Настройки — Конфигурация ПО выберите Веб-сервер и нажмите Изменить.
- Выберите вариант Apache-MPM-ITK или Apache MPM-Prefork. Пункт Модуль PHP должен быть включен.
- Дайте доступ пользователю. В разделе Пользователи выберите нужного пользователя и нажмите Изменить.
- На вкладке Доступ отметьте пункт Может использовать PHP как модуль apache.
- При создании или изменении сайта выберите этот режим на вкладке «Дополнительные возможности» в пункте Режим работы PHP.
CGI
При использовании этого режима веб-сервер запускает php-cgi для каждого скрипта и после получает результат обработки.
Особенности
- CGI — самый медленный режим работы. Имеет низкую производительность и считается устаревшим.
- Настройки PHP можно задать индивидуально для каждого пользователя, и пользователь может менять их самостоятельно.
- Для каждого домена можно выбрать версию PHP.
Как включить режим
- В разделе Настройки — Конфигурация ПО выберите Веб-сервер и нажмите Изменить.
- Выберите вариант Apache-MPM-ITK или Apache MPM-Prefork.
- Дайте доступ пользователю. В разделе Пользователи выберите нужного пользователя и нажмите Изменить.
- На вкладке Доступ отметьте пункт Может использовать PHP в режиме CGI.
- При создании или изменении сайта выберите этот режим на вкладке «Дополнительные возможности» в пункте Режим работы PHP.
FastCGI
FastCGI — развитие технологии CGI, ее более производительная и современная версия. В отличие от CGI, в данном режиме для каждого скрипта не запускается отдельный процесс, благодаря чему меньше расходуются ресурсы.
Особенности
- Работает несколько медленнее, чем модуль Apache и PHP-FPM, но быстрее CGI.
- Настройки PHP можно задать индивидуально для каждого пользователя, и пользователь может менять их самостоятельно.
- Для каждого домена можно выбрать версию PHP.
- Каждый запрос выполняется от конкретного пользователя; ошибки в скриптах не приведут к сбоям в работе доменов других пользователей.
- Есть возможность редактировать параметры через .htaccess.
Как включить режим
Используйте инструкцию PHP в режиме FastCGI.
PHP-FPM (Nginx + PHP-FPM)
Это режим работы PHP, при котором содержимое обрабатывается модулем веб-сервера Nginx вместо Apache.
Особенности режима
- В разы производительнее других режимов работы.
- Настройки PHP можно задать индивидуально для каждого пользователя, и пользователь может менять их самостоятельно.
- Для каждого домена можно выбрать версию PHP.
- Быстрая обработка статики.
- Не поддерживается .htaccess. Правила необходимо настраивать в конфигурационном файле Nginx.
Как включить режим
Используйте инструкцию: PHP в режиме Nginx + PHP-FPM.
Для удобства пользования Вашим интернет-ресурсом можно разместить режим работы, например, на странице контактов. Чтобы пользователь быстро сориентировался можно выделить текущий день со временем работы. В данной статье мы разберём как сделать блок “Режим работы” с указанием сегодняшнего дня. Будем использовать технологии HTML+JS+CSS
- HTML
- JS
- CSS
Пн8:00–17:00
Вт8:00–17:00
Ср8:00–17:00
Чт8:00–17:00
Пт8:00–17:00
Сбвыходной
Всвыходной
HTML режима работы
Создадим HTML тело документа и подключим библиотеку jQuery.
В блоках “День-время работы” создадим атрибут data-day, который будет отвечать за порядковый номер дня недели
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<!--Подключаем библиотеку-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
</head>
<body>
<div class="grafik-test">
<div data-day="1"><div class="grafik-test">
<div data-day="1">Пн<span>8:00–17:00</span></div>
<div data-day="2">Вт<span>8:00–17:00</span></div>
<div data-day="3">Ср<span>8:00–17:00</span></div>
<div data-day="4">Чт<span>8:00–17:00</span></div>
<div data-day="5">Пт<span>8:00–17:00</span></div>
<div class="halfs" data-day="6">Сб<span>выходной</span></div>
<div class="halfs" data-day="7">Вс<span>выходной</span></div>
</div></div>
</div>
</body>
</html>
JS скрипт определения текущего дня
Добавим скрипт, который будет определять текущий день недели. JS можно добавить в тело HTML документа перед закрывающим тегом </body> или в отдельный подключаемый файл с расширением .js
<script>
jQuery(document).ready(function(){
var date = new Date(); // Создаём переменную типа Date()
var weekdays = ["7", "1", "2", "3", "4", "5", "6"]; // Создаём массив дней
var weekday = weekdays[date.getDay()]; //Получаем номер текущего день
jQuery('.grafik-test div[data-day="'+weekday+'"]').addClass('today'); //Добавляем класс
});
</script>
Стили CSS режима работы
Стилизуем наши блоки режима работы с помощью CSS кода. Класс today будет добавляться к блоку, чьё значение атрибута data-day будет совпадать с порядковым номером дня недели.
.grafik-test{
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.grafik-test div{
display: flex;
flex-direction: column;
align-items: center;
width: 100px;
background: #fff;
border-radius: 5px;
margin: 10px !important;
box-shadow: 0px 0px 10px #bebebe;
}
.grafik-test div span{
}
.grafik-test div.today{
background: #ef7f11;
color: #fff;
}
Хотите так же? Мы поможем!
Думаю практически все, кто пользуется Gmail, успели ознакомиться с автоматическим изменением темы интерфейса, в зависимости от времени суток. Представляю вашему вниманию скрипт автора McBonio, который реализует данную опцию.
Он позволяет подгружать соответствующий CSS-файл в зависимости от времени суток. Для этих целей используются 4 CSS-файла и их смена происходит в 6 утра, 12 часов дня, а также 7 и 11 часов вечера. Демо-версию работы скрипта можно посмотреть по ссылке в конце статьи, там же доступен полный комплект файлов.
Но давайте подумаем, как еще может использоваться этот скрипт, кроме достаточно банального изменения цветовой схемы сайта?
Например, одним из интересующих любого покупателя моментов, является график работы вашего магазина и его службы доставки. Давайте рассмотрим — каким образом мы можем использовать этот скрипт для того, чтобы в легкой и дружественной визуальной форме продемонстрировать посетителю эту информацию.
Предположим, график выглядит так:
- Работа офиса: 9:00 — 19:00
- Доставка: 9:00 — 21:00
- Прием заказов через сайт: круглосуточно
Для этого нам необходимо нарисовать 3 изображения:
- Мы уже на работе! Менеджеры — на месте, а курьеры — в пути! // выводится с 9:00 до 19:00
- Менеджеры уже отдыхают, но курьеры — работают! // Выводится с 19:00 до 21:00
- Офис — пуст. Телефон — стал факсом. Курьеры — спят. Но мы с радостью примем Ваш заказ через сайт! // выводится с 21:00 до 9:00
Данные фразы — просто примеры, а в реальной ситуации их количество можно увеличивать до бесконечности. Главное — не запутаться во времени.
После этого все, что нам нужно — изменить в теле скрипта диапазон вывода и нарисовать 3 картинки. И, вуаля — посетителю больше не нужно заходить в раздел «Контакты» и смотреть на часы, для того, чтобы определить — есть смысл вам звонить или оптимальнее отправить заказ через сайт.
Где и как выводить эти изображения — зависит от дизайна вашего магазина. Например, можно отобразить график в виде таблички рядом с логотипом, или оформить как всплывающий блок в правом-верхнем/нижнем углу сайта. Все зависит исключительно от вашей фантазии.
Поскольку пример содержит большее количество вариаций вывода временных промежутков, чем рассматривалось в нашей ситуации — я привожу код так, как он написан McBonio. А изображения вы уже нарисуете сами.
00 AND $thetime < 06) { echo "nighttime.css";} // между полночью и 6 утра elseif($thetime > 05 AND $thetime < 12) { echo "morning.css";} // между 6 утра и 12 дня elseif($thetime > 11 AND $thetime < 19) { echo "midday.css";} // между 12 дня and 7 вечера elseif($thetime > 18 AND $thetime < 23) { echo "gettingdark.css";} // между 7 вечера and 11 вечера elseif($thetime = 23) { echo "nighttime.css";} // 11 вечера elseif($thetime = 00) { echo "nighttime.css";} // полночь ?>" type="text/css" media="screen" />
Настраиваем часовой пояс
В этой части мы настраиваем часовой пояс, в зависимости от вашего местоположения (в примере настроен GMT). Эта часть важна, поскольку если вы ее не настроите, то будет использован часовой пояс сервера, который может располагаться в другой стране и потому смена цветовой схемы будет некорректна.
date_default_timezone_set("GMT"); // настройте ваш часовой поясe Вы можете посмотреть настройки для вашего часового пояса здесь и здесь.
Время
Эта часть проста и ее не нужно менять — она означает, что время будет выводиться в 24-часовом формате. Например, 23:00.
$thetime = date("H"); // H означает, что расчет идет в 24-часовом формате Основная часть кода
Эта секция выполняет основную функцию, подгружая соответствующий по времени CSS-файл. Править ее нет необходимости, но вы можете поменять названия CSS-файлов.
if($thetime > 00 AND $thetime < 06) { echo "nighttime.css";} // между полночью и 6 утра elseif($thetime > 05 AND $thetime < 12) { echo "morning.css";} // между 6 утра и 12 дня elseif($thetime > 11 AND $thetime < 19) { echo "midday.css";} // между 12 дня and 7 вечера elseif($thetime > 18 AND $thetime < 23) { echo "gettingdark.css";} // между 7 вечера and 11 вечера
elseif($thetime = 23) { echo "nighttime.css";} // 11 вечера
elseif($thetime = 00) { echo "nighttime.css";} // полночь
Полный пакет файлов содержит CSS-файлы, изображения и PHP код — скачать архив.

А какие варианты использования такого скрипта видите вы?
