На PHP написано много хороших приложений. Даже нет,
очень много и некоторые из них очень хорошие, так почему бы не использовать эти
приложения на Windows? Особенно, если внутренний портал работает на Windows, а
на Unix машине крутиться внешний сайт компании - тогда
можно сэкономить на инфраструктуре и разместить на Windows
сервере еще и внешний сайт. Либо, если есть желание стандартизировать
инфраструктуру и размещать сайты на Windows
платформе, поскольку разработчики и пользователи работают на
Windows платформе.
На сайте www.iis.net
можно найти
список
популярных PHP приложений
с инструкциями по установке на IIS. Для их запуска
на IIS не требуется изменения
PHP кода.

Установка и настройка PHP для использования с модулем FastCGI.
Для начала, чтобы успешно использовать PHP на
Windows, неплохо было бы PHP
установить.
Шаг 1. Скачать PHP
На сайте PHP.net нужно скачать
последную версию PHP для Windows . Для использования с FastCGI рекомендуется
устанавливать версию PHP без контроля безопасности потоков, поскольку сам модуль
FastCGI гарантирует, что выполнение происходит в одном потоке и поддержка
контроля безопасности потоков в самом PHP привносит лишние проверки и
блокировки, приводящие к значительному падению производительности. Поэтому
выбираем Non-thread-safe Win32 binaries (версия 5.2.6 актуальна на момент написания
этого сообщения).
Стоит отметить, что веряим Non-thread-safe была разработана специально для
работы с FastCGI на IIS (первый релиз был в версии 5.2.1) и использовать в
других средах не рекомендуется. Кстати, начиная с версии 5.2.2 Zend серьезно
работает над оптимизацией производительности PHP под Windows, что не может не
радовать. Если сравнить версии 5.2.1 и 5.2.2, то разницу в скорости обработки
запросов можно легко увидеть с помощью простого нагрузочного теста.
Шаг 2. Установка PHP
Установка осуществляется совсем просто: поскольку мы скачали архив с
исполнимыми файлами, достаточно развернуть этот архив, например, в
директорию C:\Web\PHP.
В качестве базовой конфигурации воспользуемся рекомендованными установками:
cделаем копию файла php.ini-recommended в php.ini в этой же директории и откроем
его для редактирования, после чего пройдем файл сверху расскоментируя следующие
строки, дабы обеспечить безопасность и совместимость с большинством PHP
приложений:
  • open_basedir = директория, где размещены PHP приложения .
    Указание директории ограничит права доступа к файлам PHP приложений только
    этой директорией. Удобно переопределять эту настройку в файлах конфиграции
    непосредственно для каждого приложения, однако не помешает установить эту
    настройку и указать корневую директорию всех PHP приложений. Например, C:\inetpub\PhpSites.
  • cgi.force_redirect = 0
    По умолчанию установлено 1, но необходимо установить в 0, поскольку IIS
    контролирует безопасность выполнения PHP и в этой настройке нет
    необходимости. Более того, включение может привести к неожиданным
    результатам. При использовании с другими web-серверами на Windows эту
    настройку необходимо включить.
  • cgi.fix_pathinfo = 1
    PHP будет устанавливать имя файла в переменной SCRIPT_FILENAME, если
    установить значение 0, то имя файла будет в переменной PATH_TRANSLATED, что
    может нарушить совместимость с большинством приложений.
  • fastcgi.impersonate = 1;
    FastCGI позволяет процессу имперсонироваться используя контекст клиента,
    вызывающего процесс. Этот механизм работает только под FastCGI/IIS, например
    на Apache на Windows это работать не будет.
  • short_open_tag = On
    Большинство приложений используют короткие теги , поэтому будет не
    лишним включить их поддержку.
  • display_errors = On
    На время проверки и отладки PHP приложений на FastCGI стоит включить вывод
    сообщений об ошибках.
Шаг 3. Проверка работоспособности PHP
Пока мы не сконфигурировали IIS, проверить работоспособность интерпретатора
можно просто, например, выполнив команду c:\web\php\php.exe -info > c:\test.txtУстановка и настройка модуля FastCGI на IIS7. Если у вас у IIS7, то что-то мне подсказывает о названии вашей операционной
системы - Windows Vista? Не угадал, тогда Windows Server 2008! Либо вы хакер и
поставили IIS7 еще-куда-то, но это нестандартное решение и мы его не
поддерживаем;).
Шаг 1. Установка FastCGI
Хочу обрадовать сразу - в IIS7, идущем с Windows Server 2008 и Windows Vista
Service Pack 1 модуль FastCGI уже включен. Его необходимо лишь подключить в
настройках. Для этого на Vista нужно открыть Control Panel -> Programs и выбрать
«Turn Windows Features On or Off»:

После этого необходимо установить фичу в IIS: Internet Information Services
-> World Wide Web Services -> Application Development Features -> CGI. При этом
будет установлена поддержка и CGI и FastCGI.

На Windows Server 2008 процесс аналогичен: Server Manager -> Roles -> Add
Role Services -> Web Server -> Application Development -> CGI.
Собственно все, что требуется для включения модуля FastCGI.
Шаг 2. Конфигурация IIS7
1. Открыть IIS Manager, выбрать узел (сервер) для которого нужно настроить
поддержку PHP. И далее выбрать Handler Mappings.

2. Выбираем на странице Handler Mappings ссылку Add Module Mapping и
заполняем окно следующими значениями:
Request path: *.php (обработка всех файлов с расширением.php)
Module: FastCgiModule (модуль FastCGI)
Executable: C:\Web\PHP\php-cgi.exe (путь к PHP)
Name: PHP (имя для удобства)

После добавления этой настройки появится окно с вопросом о регистрации
FastCGI приложения для этого обработчика. Подтверждаем.
Описанные выше действия привели к созданию в директории PhpSites следующего
web.config файла:


< configuration >
< system.webServer >
< handlers >
< add name =«PHP» path ="*.php" verb ="*"
modules =«FastCgiModule» scriptProcessor ="C:\Web\PHP\php-cgi.exe "
resourceType =«Unspecified» />



Теперь можно переходить к проверке работоспособности PHP.
Шаг 3. Проверяем корректность настройки
В директории узла для которого мы сконфигурировали PHP создаем файл
index.php:

И обращаемся к этому файлу через HTTP запрос. В результате, если все хорошо и
наша карма не испорчена, запрос будет корректно обработан:

Разумеется, при использовании PHP на
IIS7 могут возникать подводные камни, с которыми нужно
бороться, чтобы достичь ожидаемого результата (замечательной работы
PHP приложений на Windows).
Молотки для разбивания часто встречающихся камней приведены ниже.Частота перезапуска процессов PHP

Поскольку при использовании PHP на
IIS7 с использованием FastCGI
модуля, сам модуль FastCGI берет на себя
управление процессами и ресурсами, необходимо убедится, что механизм перезапуска
процессов (recycling) в PHP
не будет мешать FastCGI. Это легко сделать, если
настроить FastCGI так, чтобы он всегда перезапускал
процессы раньше, чем это сделает PHP.
В настройках FastCGI существует настройка
instanceMaxRequests, определяющая после обработки какого количества запросов,
процесс будет перезапущен. В PHP аналогичный параметр
задается значением переменной PHP_FCGI_MAX_REQUESTS. Очевидно, чтобы дать
возможность FastCGI рулить процессом, достаточно
установить instanceMaxRequests
< application fullPath ="C:\inetpub\php\php-cgi.exe "
maxInstances =«4» instanceMaxRequests =«10000» >
< environmentVariables >
< environmentVariable name =«PHP_FCGI_MAX_REQUESTS» value =«10000» >


Использование нескольких версий PHP Поскольку разные версии PHP могут использоваться в
приложениях, которые размещаются на сервере, то хорошо бы было дать возможность
использовать разные версии для разных сайтов.
В файле конфигурации applicationHost.config
достаточно определить секции для разных версий PHP:
< fastCgi >
< application fullPath =«C:\inetpub\php\php-cgi.exe» >
...

< application fullPath =«C:\inetpub\php4\php4.exe» >
...

< application fullPath =«C:\inetpub\php41\php41.exe» >
...


* This source code was highlighted with . А уже для каждого из сайтов конфигурируется модуль, использующий ту или иную
версию (можно использовать интерфейс, который описан выше, а можно
отредактировать конфигурацию в тексте):
< handlers >
< add name =«PHP4» path ="*.php" verb ="*" modules =«FastCgiModule»
scriptProcessor ="C:\inetpub\php\php41.exe "
resourceType =«Unspecified» />

* This source code was highlighted with . Использование разных наборов настроек PHP Если есть желание настраивать PHP по-разному для
разных сайтов, то опять же все это можно описать через настройки конфигурации в
applicationHost.config.
< fastCgi >

< application fullPath ="C:\inetpub\php\php-cgi.exe "

arguments ="-d my.website=wordpress" >

< environmentVariables >

< environmentVariable name =«PHPRC» value =«C:\inetpub\wordpress» />





< application fullPath ="C:\inetpub\php\php-cgi.exe "

arguments ="-d my.website=phpsite" >

< environmentVariables >

< environmentVariable name =«PHPRC» value =«C:\inetpub\phpsite» />






* This source code was highlighted with .
После этого, настройки связываются с соответствующими сайтами в
web.config:
< system.webServer >

< handlers accessPolicy =«Read, Script» >
< add name =«PHP» path ="*.php" verb ="*" modules =«FastCgiModule»
scriptProcessor ="C:\inetpub\php\php-cgi.exe|-d my.website=wordpress "

resourceType =«Unspecified» requireAccess =«Script» />




* This source code was highlighted with .
В соответствии с приведенной конфигурацией, php.ini
нужно разместить в директории каждого из сайтов.
При редактировании настроек, стоит строго соблюдать совпадение путей к
соответствующей версии PHP и с
applicationHost.config и в web.config, чтобы
избежать неожиданных результатов, если пути будут перепутаны.
На первый взгляд редактирование конфигурации может показаться сложным и
неудобным процессом, но как только вы привыкните к конфигурации в
XML и распространению настроек методом
Ctrl+C, Ctrl+V, вы будете удивляться наличию других
способов конфигурации:)Настройки безопасности PHP В php.ini мноо разных настроек, многие из которых
влияют на безопасность использования PHP. Настроить
все подходящим образом, достойное дело.
Set allow_url_fopen=Off
; использование URL для операций с файлами
Set allow_url_include=Off
register_globals=Off
; отмена регистрации глобальных переменных
open_basedir=«c:\inetpub\» ;
ограничение на директорию, в которой работает PHP

Max_execution_time=30 ; ограничение
времени выполнения скриптов
max_input_time=60
memory_limit=16M ;
ограничение на размер используемой памяти
upload_max_filesize=2M
post_max_size=8M
max_input_nesting_levels=64
display_errors=Off
; отключение сообщений об ошибках
log_errors=On
error_log=«C:\error.log»
expose_php=Off
; скрыть присутствие PHP

Заключение PHP на Windows - это не
просто интересно и удобно, главное, что это работает. А команда
IIS работает над тем, чтобы PHP
работал на Windows не хуже, чем на
Unix/Linux (конечно, стараются сделать лучше).
Поскольку это новая тема для Microsoft, то мы можем
сделать какие-то ошибки, можем чего-то не замечать и не понимать, поэтому нам
очень важно получать комментарии от вас - разработчиков и администраторов.
Пишите в комментариях ваши пожелания и проблемы, которые вы видите сейчас в
PHP на Windows, а мы будем
стараться проблемы решать, а пожелания реализовывать.

Теги: Добавить метки

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

Интерпретатор php может поставляться в виде модуля для Apache, выполнять скрипты из командной строки или в виде отдельного сервиса php-fpm. Эти сервисы отличаются своими возможностями, и предназначением, но для любого вида интерпретатора нужно задать базовые настройки, например, рабочая папка, включенные расширения, отображение ошибок и так далее. Все эти настройки задаются через файл php.ini. В этой инструкции мы рассмотрим как выполняется настройка файла php.ini в операционных системах Linux, хотя все информация подойдет и для Windows.

Если у вас еще не установлен интерпретатор языка программирования php, то вы можете ознакомиться со статьей .

Для каждой версии интерпретатора конфигурационный файл php.ini находится в отдельной папке. Но все конфигурационные файлы находятся в папке /etc/php, например, /etc/php5:

Папка conf.d содержит общие настройки для различных расширений и модулей, они не будут нас сейчас интересовать. Более интересны следующие три папки - apache, cli и fpm. В них содержатся конфигурационные файлы php.ini для каждого из этих интерпретаторов.

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

Что касается синтаксиса файла, то он разделен на секции, сначала идет секция настройки php, которая разделена на подсекции в зависимости от типа настроек, дальше идут секции настройки разных модулей. Синтаксис самих настроек очень прост, он соответствует привычному синтаксису ini файлов. Строка начинается с имени настройки, затем следует знак равно, а за ним значение:

имя_настройки = значение_параметра

Символами обозначается имя секции, например, , а символ; означает комментарий, он и все символы после него не читаются интерпретатором. А теперь рассмотрим как выполняется настройка php.ini и переберем самые важные параметры.

Настройка файла php.ini

Для удобства ориентирования мы разобьем все параметры по категориях в зависимости от их назначения. Вам будет достаточно найти нужный параметр и изменить его значение. А теперь откройте файл настроек php, например, для модуля apache и перейдем к настройке. Чтобы избежать ошибок не добавляйте новые строки, а ищите уже существующие и изменяйте значения на нужные:

sudo gedit /etc/php5/apache/php.ini

Сначала идет немного информации о самом файле в виде комментариев, затем интересующие нас настройки.

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

Настройка php 7 обычно начинается с конфигурации вывода ошибок. Все настройки вывода ошибок находятся в разделе Error handling and logging. По умолчанию вывод ошибок на экран во время выполнения скрипта отключен. Это сделано для того, чтобы пользователи не смогли увидеть ничего лишнего. Вместо этого, все ошибки записываются в лог файл. Если вы используете php на домашнем компьютере, то такие меры не нужны и вы можете сразу выводить все на экран:

display_errors=off

Замените off на on. В php используются различные типы ошибок, например, критические, предупреждения, ошибки синтаксиса, с помощью строки error_reporting вы можете включить вывод только определенных типов ошибок:

error_reporting = E_ALL & ~E_DEPRECATED

Если нужно объединить несколько типов ошибок, то используйте символ &, а для отключения отображения поставьте перед типом знак ~. Приведенный выше пример отображает все ошибки (E_ALL), кроме сообщений об устаревших функциях (E_DEPRECATED). Вы можете отключить все типы использовав 0:

error_reporting = 0

Включите запись ошибок php в лог файл, если не выводите их на экран:

Чтобы не засорять лог однотипными сообщениями можно игнорировать повторяющиеся ошибки в пределах одного исполнения:

ignore_repeated_errors = On

Ограничения ресурсов

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

По умолчанию максимальное время выполнения скрипта - 30 секунд, сделаем минуту:

max_execution_time = 30

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

max_input_time=60

Максимальное количество переменных в GET и POST:

max_input_vars = 1000

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

memory_limit = 128M

Максимальный размер данных, передаваемых в POST запросе тоже ограничивается, размер по умолчанию - 8 Мегабайт:

post_max_size = 8M

Вы можете ограничить область действия php в системе с помощью опции openbase_dir, она указывает папку, выше которой скрипт не может получить доступ к файловой системе:

open_basedir = /var/www/

С помощью директив disable_functions и disable_classes вы можете отключить использование в скриптах определенных функций или классов, например, это может быть полезно для веб-хостингов. В этом примере мы отключаем использование функции ini_set, которая позволяет менять настройки php из скрипта:

disable_functions = ini_set

Директории по умолчанию

Файл настройки php.ini позволяет указать пути в файловой системе по умолчанию для различных действий. Вы можете задать папки где система будет искать скрипты, если вы попытаетесь подключить их с помощью инструкции include:

include_path = ".:/usr/share/php5:/usr/share/php5/PEAR"

Папка с модулями php:

extension_dir="./"

Папка для записи временных файлов:

sys_temp_dir = "/tmp"

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

file_uploads = On

Максимальный размер загружаемого файла:

upload_max_filesize = 2M

Максимальное количество файлов, которые может загрузить один скрипт:

max_file_uploads = 20

Настройка php.ini практически завершена, нам остались лишь расширения.

Настройка расширений

Расширения позволяют очень сильно увеличить функциональность php. Например, благодаря расширениям вы можете использовать в своих скриптах базы данных mysql, postgresql, mysqli, sqlite, графическую библиотеку gd и многое другое. Все это включается в этом разделе.

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

extension=php_mysql.so
extension=php_mbstring.so
extension=php_pgsql.so

Обратите внимание, что для windows расширение будет иметь формат dll, но для linux нужно использовать so. В следующих секциях идет настройка каждого из расширений, но мы их рассматривать не будем потому что они обычно не требуют настройки.

Выводы

В этой статье мы рассмотрели как выполняется настройка php на сервере или обычном компьютере для разработки веб-сайтов. Файл настроек php имеет довольно простую структуру и с ним довольно не сложно справиться. После завершения всех настроек и сохранения изменений не забудьте перезагрузить веб-сервер или сервис php-fpm.

Вообще говоря, php-fpm это отдельная тема, потому что там есть много дополнительных настроек, и, возможно, мы рассмотрим его в одной из следующих статей. Если у вас остались вопросы, спрашивайте в комментариях!

Если вы установили PHP как модуль Apache , перед вами открываются дополнительные возможности: вы можете задавать значения некоторых директив прямо в файлах httpd.conf или .htaccess . В силу специфики синтаксиса файлов конфигурации Apache, для отделения имени директивы и ее значения нужно использовать пробел, а не знак =. Кроме того, имена директив PHP должны быть предварены префиксом php_ . Например, директива из php.ini auto_prepend_file=top.html будет выглядеть в httpd.conf или .htaccess так: php_auto_prepend_file top.html.

Приведенного листинга с комментариями должно быть вполне достаточно для понимания роли большинства директив PHP.

Файл php.ini

;;;;;;;;;;;;;;;;;
; Об этом файле;
;;;;;;;;;;;;;;;;;

; Этот файл содержит большинство установок PHP. Чтобы PHP смог его
; обнаружить, он должен называться "php.ini". Интерпретатор ищет файл в
; текущем каталоге, в случае неудачи - в каталоге, указанном в
; переменной окружения PHPRC, и, наконец, в каталоге, заданном при
; компиляции и сборке PHP (именно в таком порядке).
; В системе Windows путь, указанный при компиляции PHP,
; соответствует каталогу Windows (в большинстве случаев это
; c:\windows). Папка, в которой будет производиться поиск файла
; "php.ini", может быть также определена с использованием ключа –c
; командной строки.
;
; Синтаксис файла крайне прост. Пробельные символы (то есть, пробелы,
; символы табуляции и т. д.), строки, начинающиеся с точки с запятой (;)
; игнорируются (как вы, наверное, уже догадались). Заголовки секций
; (например, ) также пропускаются, но, возможно, будут учитываться
; в будущих версиях PHP.
;
; Директивы задаются примерно так:
; directive=value
; Имена директив чувствительны к регистру символов - foo=bar не то же
; самое, что FOO=bar.
;
; Значение value может быть строкой, числом, константой PHP (например,
; E_ALL или M_PI), одной из INI-констант (On, Off, True, False, Yes, No
; или None), выражением (например, E_ALL & ~E_NOTICE), а также строкой
; в кавычках ("foo").
;
; В выражениях могут использоваться только побитовые и логические
; операторы, а также скобки:
; | поразрядное ИЛИ (OR)
; & поразрядное И (AND)
; ~ поразрядное НЕ (NOT)
; ! логическое отрицание (NOT)
;
; В качестве логических флагов со значением "истина" могут быть
; использованы значения 1, On, True или Yes. Значение "ложь" дают 0, Off,
; False и No.
;
; Пустая строка может быть задана, если "не указать ничего" после знака
; равенства, или же указать слово None:
; foo= ; устанавливаем foo равным пустой сторке
; foo=none ; аналогично
; foo="none" ; устанавливаем foo равным строке "none"
;
; Если вы используете константы в качестве части значения директивы и эти
; константы определяются в каком-нибудь динамически загружаемом
; расширении (модуле PHP или Zend), вы можете указывать их только после
; строки, которая загружает расширение.
;
; Все значения в файле php.ini-dist соответствуют встроенным значениям
; по умолчанию. Если php.ini не задействуется, или же вы удалите из него
; некоторые строки, будут установлены значения по умолчанию.

;;;;;;;;;;;;;;;;;;;
; Настройки языка;
;;;;;;;;;;;;;;;;;;;

; Разрешает работу PHP для сервера Apache.
engine=On
; Разрешает использовать короткие тэги , допустим и здесь.
highlight.string=#DD0000
highlight.comment=#FF8000
highlight.keyword=#007700
highlight.bg=#FFFFFF
highlight.default=#0000BB
highlight.html=#000000
; Другие директивы
; Следующая директива указывает, должен ли PHP добавлять заголовок
; X-Powered-by в заголовки, посылаемые браузеру, и, таким образом,
; обнаруживать себя. Это никак не может повлиять на безопасность
; сценария, однако позволяет пользователю определить, использовался
; ли PHP для генерации страницы, или нет.
expose_php=On

;;;;;;;;;;;;;;;;;;;;;;;;
; Ограничения ресурсов;
;;;;;;;;;;;;;;;;;;;;;;;;

; Максимальное возможное время выполнения сценария в секундах. Если
; сценарий будет выполняться дольше, PHP принудительно завершит его.
max_execution_time=30
; Максимальный объем памяти, выделяемый сценарию (8MB)
memory_limit=8M


; Обработка ошибок и подключений;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Директива error_reporting должна задаваться в виде битового
; поля. Его значение можно устанавливать с помощью следующих констант,
; объединенных оператором | (OR):
; E_ALL - Все предупреждения и ошибки.
; E_ERROR - Критические ошибки времени выполнения.
; E_WARNING - Предупреждения времени выполнения.
; E_PARSE - Ошибки трансляции.
; E_NOTICE - Замечания времени выполнения (это такие
; предупреждения, которые, скорее всего,
; свидетельствуют о логических ошибках в
; сценарии, - например, использовании
; неинициализированной переменной).
; E_CORE_ERROR - Критические ошибки в момент старта PHP.
; E_CORE_WARNING - Некритические предупреждения во время старта PHP.
; E_COMPILE_ERROR - Критические ошибки времени трансляции.
; E_COMPILE_WARNING - Предупреждения времени трансляции.
; E_USER_ERROR - Сгенерированные пользователем ошибки.
; E_USER_WARNING - Сгенерированные пользователем предупреждения.
; E_USER_NOTICE - Сгенерированные пользователем замечания.
; Пример:
; показывать все ошибки, за исключением замечаний
; error_reporting = E_ALL & ~E_NOTICE
; показывать только сообщения об ошибках
; error_reporting=E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
; отображать все ошибки, предупреждения и замечания
error_reporting= E_ALL
; Печать ошибок и предупреждений прямо в браузер.
; Для готовых сайтов рекомендуется отключать следующую директиву и
; использовать вместо нее журнализацию (см. ниже). Включенная директива
; display_errors в "рабочих" сайтах может открыть доступ пользователю к
; секретной информации: например, полному пути к документу, используемой
; базе данных и т. д.
display_errors=On
; Даже если display_errors включена, ошибки, возникающие во время старта
; PHP, не отображаются. Рекомендуется устанавливать следующую директиву
; в выключенное состояние, за исключением случая, когда вы применяете
; ее при отладке.
display_startup_errors=On
; Сохранять ли сообщения об ошибках в файле журнала. Журнал может
; определяться настройками сервера, быть связанным с потоком stderr
; или же задаваться директивой error_log, описанной ниже. Как уже было
; сказано, в коммерческих проектах желательно использовать именно
; журнализацию, а не отображать ошибки в браузер.
log_errors=Off
; Сохранять ли последнее сообщение об ошибке или предупреждение в
; переменной $php_errormsg
track_errors=On
; Строка, которая выводится перед сообщением об ошибке.
;error_prepend_string=""
; Строка, которая отображается после сообщения.
;error_append_string=""
; Раскомментируйте, чтобы вести журнал в указанном файле.
;error_log=filename;
; Раскройте, чтобы использовать системный журнал.
;error_log=syslog
; Предупреждать, когда оператор + применяется к строкам.

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

; Замечание: track_vars всегда включена, начиная с PHP 4.0.3.
; Следующая директива определяет, в каком порядке PHP будет
; регистрировать данные, полученные методами GET, POST, а также
; переменные окружения и встроенные переменные (соответственно, значение
; задается буквами G, P, C, E и S, например, EGPCS или GPC). Регистрация
; производится на основе чтения этой строки слева направо, новые значения
; переопределяют старые.
variables_order="EGPCS"
; Должен ли PHP регистрировать EGPCS-переменные как глобальные
; переменные. Возможно, вы захотите отключить эту возможность, если не
; хотите "засорять" глобальную область видимости сценария. Это имеет
; смысл, если вы используете директиву track_vars - в этом случае вы
; можете получить доступ к GPC-данным через массив $HTTP_???_VARS.
; Желательно так писать сценарии, чтобы они по возможности
; старались обходиться без директивы register_globals. Использование
; данных, поступивших из формы, как глобальных переменных, потенциально
; может породить проблемы в защите сценария, если программист не особенно
; позаботится об их устранении.
register_globals=On
; Следующая директива указывает PHP, обязан ли он создавать переменные
; $argv и $argc на основе информации, поступившей методом GET. Если вы не
; используете эти переменные, отключите директиву register_argc_argv для
; небольшого убыстрения работы PHP.
register_argc_argv=On
; Максимальный размер данных POST, который PHP сможет принять.
post_max_size=8M
; Следующая директива устарела - используйте variables_order.
gpc_order="GPC"
; Автоматическая обработка кавычек и апострофов:
; использовать ли автокавычки для входящих GET/POST/Cookie данных
magic_quotes_gpc=Off
; заключать ли данные в автокавычки во время выполнения, например,
; для данных из SQL, exec() и т. д.
magic_quotes_runtime=Off
; Нужно ли PHP оформлять автокавычки в стиле Sybase-style (заменять "
; на "", а не на \")
magic_quotes_sybase=Off
; Следующие директивы указывают PHP, содержимое каких файлов он должен
; обрабатывать до и после вывода сценария.
auto_prepend_file=
auto_append_file=
; Начиная с версии 4.0b4, PHP всегда сообщает браузеру об используемой
; кодировке в заголовке Content-type. Для того чтобы запретить это,
; просто установите следующую директиву пустой. По умолчанию
; используется text/html без указания кодировки.
default_mimetype="text/html"
;default_charset="iso-8859-1"

;;;;;;;;;;;;;;;;;;;
; Пути и каталоги;
;;;;;;;;;;;;;;;;;;;

; Для UNIX: "/path1:/path2".
; Для Windows: "\path1;\path2"
include_path=
; Корневой каталог для PHP-сценариев.
; Игнорируется, если значение равно пустому "".
doc_root=
; Каталог, который PHP использует при открытии сценария вида
; /~username. Не оказывает действия, если значение равно "".
user_dir=
; Каталог, в котором хранятся динамически загружаемые расширения.
extension_dir=C:/Program Files/PHP4/extensions
; Следующая директива разрешает или запрещает использование функции dl().
; Функция dl() работает неправильно в многопоточных Web-серверах,
; например, в IIS или Zeus, и автоматически отключается для них.
enable_dl=On

;;;;;;;;;;;;;;;;;;
; Закачка файлов;
;;;;;;;;;;;;;;;;;;

; Разрешает PHP обрабатывать закачку файлов
file_uploads=On
; Каталог для временных файлов, в который PHP помещает закачанные
; файлы (используется системный временный каталог, если в директиве
; указана пустая строка)
;upload_tmp_dir=
; Максимальный размер закачанного файла
upload_max_filesize=2M


; Динамически загружаемые расширения;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Если вы хотите, чтобы какие-то модули загружались автоматически,
; задавайте директиву extension в формате:
; extension=modulename.extension
; Например, для Windows:
; extension=msql.dll
; или для UNIX:
; extension=msql.so
; Должно быть указано только имя, без пути. Чтобы задать
; каталог, в котором расположены расширения, используйте директиву
; extension_dir, описанную выше.
; Модули для Windows
; Замечание: поддержка MySQL и ODBC теперь включена в ядро PHP, так что
; для нее уже не нужны никакие библиотеки DLL.
;extension=php_cpdf.dll
;extension=php_cybercash.dll
;extension=php_db.dll
;extension=php_dbase.dll
;extension=php_domxml.dll
;extension=php_dotnet.dll
;extension=php_exif.dll
;extension=php_fdf.dll
;extension=php_gd.dll
;extension=php_gettext.dll
;extension=php_ifx.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_java.dll
;extension=php_ldap.dll
;extension=php_mhash.dll
;extension=php_mssql65.dll
;extension=php_mssql70.dll
;extension=php_oci8.dll
;extension=php_oracle.dll
;extension=php_pdf.dll
;extension=php_pgsql.dll
;extension=php_sablot.dll
;extension=php_swf.dll
;extension=php_sybase_ct.dll
;extension=php_zlib.dll

;;;;;;;;;;;;;;;;;;;;;;;;;
; Установки для модулей;
;;;;;;;;;;;;;;;;;;;;;;;;;

; Нужно или нет определять различные переменные Syslog, такие как
; $LOG_PID, $LOG_CRON и т. д. Для ускорения работы рекомендуется
; выключать следующую директиву. Во время выполнения сценария вы
; можете включить или выключить директиву путем вызова
; функции define_syslog_variables().
define_syslog_variables=Off

; Только для Win32 - используемый SMTP-сервер.
SMTP=mail.mail.zz
; Только для Win32 - поле From: по умолчанию.
sendmail_from= [email protected]
; Только для UNIX - задает путь и аргументы программы sendmail (по
; умолчанию - "sendmail -t -i").
;sendmail_path=

;debugger.host=localhost
;debugger.port=7869
;debugger.enabled=False

; Следующие директивы используются сценарием-примером.
; При потребности в детальном описании см. examples/README.logging.
;logging.method=db
;logging.directory=/path/to/log/directory

;java.class.path=.\php_java.jar
;java.home=c:\jdk
;java.library=c:\jdk\jre\bin\hotspot\jvm.dll
;java.library.path=.\

sql.safe_mode=Off

;uodbc.default_db=Not yet implemented
;uodbc.default_user=Not yet implemented
;uodbc.default_pw=Not yet implemented
; Разрешает или запрещает устойчивые соединения
uodbc.allow_persistent=On
; Проверка доступности соединения перед его использованием.
uodbc.check_persistent=On
; Макс. число устойчивых соединений. -1 означает, что ограничений нет.
uodbc.max_persistent=-1
; Макс. число соединений (устойчивых + неустойчивых).
uodbc.max_links=-1
; Установки для LONG-полей.
uodbc.defaultlrl=4096
; Установки для бинарных данных. 0 означает режим passthru, 1 – режим
; as is, 2 – преобразование в символы.
uodbc.defaultbinmode=1
; См. документацию по odbc_binmode и odbc_longreadlen для более
; детального разъяснения смысла директив uodbc.defaultlrl и
; uodbc.defaultbinmode.

mysql.allow_persistent=On
mysql.max_persistent=-1
mysql.max_links=-1
; Порт по умолчанию для функции mysql_connect(). Если не задан, функция
; попытается использовать переменную $MYSQL_TCP_PORT или запись mysql-tcp
; в /etc/services, а также заданную во время компиляции PHP константу
; MYSQL_PORT (именно в таком порядке). К PHP для Win32 применимо только
; последнее.
mysql.default_port=
; Определяет имя сокета для локальных соединений MySQL. Если он не задан,
; использует встроенное значение по умолчанию.
mysql.default_socket=
; Хост по умолчанию для mysql_connect() (не работает в безопасном
режиме).
mysql.default_host=
; Пользователь по умолчанию (не работает в безопасном режиме).
mysql.default_user=
; Пароль по умолчанию (не работает в безопасном режиме).
; Замечание: идея хранить пароль в этом файле просто отвратительна. Любой
; пользователь, который может запускать PHP, сможет узнать пароль путем
; выполнения:
; echo cfg_get_var("mysql.default_password")
; Конечно, узнать пароль сможет также и пользователь, который имеет права
; на чтение для файла php.ini.
mysql.default_password=

msql.allow_persistent=On
msql.max_persistent=-1
msql.max_links=-1

pgsql.allow_persistent=On
pgsql.max_persistent=-1
pgsql.max_links=-1

sybase.allow_persistent=On
sybase.max_persistent=-1
sybase.max_links=-1
;sybase.interface_file="/usr/sybase/interfaces"
; Максимальный уровень серьезности отображаемых ошибок.
sybase.min_error_severity=10
; Минимальный уровень серьезности отображаемых ошибок.
sybase.min_message_severity=10

; Если следующая директива установлена в On, PHP будет автоматически
; присваивать тип результату на основе его типа в Sybase, вместо того,
; чтобы преобразовывать полученные значения в строки. Этот режим
; совместимости, возможно, в будущем не будет поддерживаться, так что
; лучше исправьте свои сценарии, если вам он нужен.
sybase.compatability_mode=Off

sybct.allow_persistent=On
sybct.max_persistent=-1
sybct.max_links=-1
sybct.min_server_severity=10
sybct.min_client_severity=10

; Число десятичных цифр для всех bcmath-функций.
bcmath.scale=0

; browscap=extra/browscap.ini

ifx.default_host=
ifx.default_user=
ifx.default_password=
ifx.allow_persistent=On
ifx.max_persistent=-1
ifx.max_links=-1
; Если следующая директива установлена в On, выражение select возвращает
; содержимое поля типа text blob вместо его идентификатора.
ifx.textasvarchar=0
; Заставляет команду select возвращать значение поля типа byte blob
; вместо его идентификатора.
ifx.byteasvarchar=0
; Принуждает PHP удалять завершающие пробелы из колонок с типом char
; фиксированного размера. Может помочь пользователям Informix SE.
ifx.charasvarchar=0
; Если установлена, содержимое полей text и byte сохраняется в файле,
; вместо того, чтобы храниться в памяти.
ifx.blobinfile=0
; Если установлена в 0, значения NULL возвращаются как пустые строки,
; иначе они возвращаются как строки "NULL".
ifx.nullformat=0

; Определяет режим хранения данных сессий.
session.save_handler=files
; Следующая директива задает аргумент, передаваемый save_handler-у.
; В случае режима сохранения в файлах здесь должен указываться каталог,
; в который будут помещены файлы сессий.
session.save_path=C:\Program Files\PHP4\sessiondata
; Должен ли PHP использовать Cookies.
session.use_cookies=1
session.name=PHPSESSID
; Инициализировать ли сессии при старте.
session.auto_start=0
; Время жизни Cookie для сессии. Если до закрытия браузера, то 0.
session.cookie_lifetime=0
; Путь для Cookie с идентификатором сессии.
session.cookie_path=/
; Домен для Cookie с идентификатором сессии.
session.cookie_domain=
; Функция, используемая для сериализации данных. Значение php задает
; стандартную функцию.
session.serialize_handler=php
; Вероятность того, что при очередном запуске сценария, работающего с
; сессиями, будет вызвана функция "сборки мусора" для очистки сессий,
; которые пользователь уже покинул.
session.gc_probability=1
; После указанного здесь промежутка времени сохраненные
; данные будут удалены автоматически сборщиком мусора.
session.gc_maxlifetime=1440
; Проверять ли HTTP Referer на предмет того, не является ли ID сессии
; "фальшивым".
session.referer_check=
; Указывает, сколько байтов читать из файла.
session.entropy_length=0
;session.entropy_length=16
; Файл, используемый для генерации идентификаторов сессии.
session.entropy_file=
;session.entropy_file=/dev/urandom
; Установите одно из значений nocache, private, public для определения
; аспектов кэширования HTTP.
session.cache_limiter=nocache
; Документ будет считаться устаревшим по истечении заданного
; здесь количества минут
session.cache_expire=180
; Использовать ли поддержку "переходящих" SID. Действует, если PHP был
; скомпилирован с включенной опцией --enable-trans-sid.
session.use_trans_sid=1

;extension=php_mssql.dll
mssql.allow_persistent=On
mssql.max_persistent=-1
mssql.max_links=-1
mssql.min_error_severity=10
mssql.min_message_severity=10
; Режим совместимости со старыми версиями PHP 3.0.
mssql.compatability_mode=Off

;assert.active=On
; Генерирует предупреждения PHP для каждых неудавшихся проверок
; выражений.
;assert.warning=On
; По умолчанию не завершать программу в случае неудачи.
;assert.bail=Off
; Пользовательская функция, которая будет вызвана при неудаче проверки.
;assert.callback=0
; Вычислять выражения в eval с использованием текущих установок
; error_reporting. Установите в true, если вы хотите, чтобы действие
; режима error_reporting(0) было сохранено и при переходе через
; границу eval().
;assert.quiet_eval=0

ingres.allow_persistent=On
ingres.max_persistent=-1
ingres.max_links=-1
; База данных по умолчанию (формат: dbname
ingres.default_database=
ingres.default_user=
ingres.default_password=

pfpro.defaulthost="test.signio.com"
pfpro.defaultport=443
pfpro.defaulttimeout=30
; IP-адрес proxy-сервера по умолчанию (если требуется).
; pfpro.proxyaddress=
; Порт proxy-сервера по умолчанию
; pfpro.proxyport=
; Логин для proxy-сервера по умолчанию
; pfpro.proxylogon=
; Пароль для proxy-сервера по умолчанию
; pfpro.proxypassword=

В htmlAcademy и я работаю на нем наставником. Студентам в рамках интенсива предстоит поднять рабочее окружение и это заметка нацелена упростить эту нелегкую для новичка задачу. Есть разные способы поднятия полноценного LAMP стека, но мы пойдем классическим путем. Настроим все компоненты по отдельности (без применения готовых комбайнов) и начнем с PHP (обязательно будет заметка с рассмотрением готовых сборок LAMP). Поскольку я планирую работать наставникам на интесивах по PHP и дальше, я собираюсь написать подобные инструкции для повторения в других ОС (Linux, macOS). Как говорится, лучше один раз попотеть, но потом всем станет проще. Итак, приступаем.

Загружаем PHP для Windows

Заходим на официальный сайт и загружаем актуальную версию PHP. На момент написания заметки это – 7.1.4 . На странице доступно несколько вариантов дистрибутивов. У меня Windows 7 x64, соответственно я выбираю zip архив с VC14 x64 Thread Safe.

Обратите внимание, для загрузки доступна два варианта дистрибутива: Thread-Safe (TS) и Non-Thread-Safe (NTS) . Выбор зависит от того как вы планируете применять интерпретатор. TS рекомендуется использовать для одного процесса веб-служб (например, настраивая через модуль mod_php для Apache). NTS рекомендуется для применения IIS (Internet Information Service) и альтернативных FastCGI веб-сервером (например, Apache с модулем FastCGI) и командной строки.

Устанавливаем PHP 7.1

Начнем готовить PHP для комфортной работе из командной строки. В предыдущем шаге вы загрузили архив с дистрибутивом PHP. В отличие от большинства программ, PHP поставляется в простом архиве, а не как инсталляционный пакет. Поэтому вам придется самостоятельно извлечь файлы в любую удобную для вас директорию. Я предпочитаю хранить подобные вещи в корне системного диска. Создайте в корне диска «C:» (или любом другом месте) директорию «php» и извлеките в нее содержимое загруженного архива.

В директории появится множество файлов, но нас больше всего интересуют:

  • go-pear.bat – сценарий для установки PEAR. Подробности о PEAR можно почитать в официальной документации .
  • php.exe – позволяет выполнять PHP сценарии из консоли;
  • php-win.exe - позволяет выполнять PHP сценарии без применения консоли;
  • php-cgi.exe – необходим для выполнения PHP кода в режиме FastCGI;
  • php7apache2_4.dll – модуль интеграции с веб-сервером Apache 2.4.X;
  • phpdbg.exe – отладчик;
  • php.ini-development – пример конфигурационного файла PHP для окружения разработчика (development)
  • php.ini-production – пример конфигурационного файла PHP для рабочего окружения (production)
Подключаем конфигурационный файл

Распакованный дистрибутив у нас есть, подключим для него конфигурационный файл. Мы собираемся ставить эксперименты, поэтому в качестве образца возьмем php.ini-development . Сделайте копию этого файла в директорию php (C:\php ) с именем php.ini . ВАЖНО! Делайте именно копию, не простое переименование. За время разработки вам может потребоваться изменять конфигурационный файл и есть все шансы совершить ошибку, которую трудно будет обнаружить.

В таких случаях нет ничего лучше, чем вернуться к эталонным настройкам. В нашем случае будет достаточно повторить копирование файла php.ini-development в php.ini . Итак, по окончанию телодвижений в директории с php должен появиться файлик php.ini. В дальнейших заметках мы обязательно поговорим о его содержимом более детально.

Тестируем PHP из командной строки

На этом шаге, так называемая «установка» завершена. Откройте консоль (cmd.exe , ярлык доступен в меню «Стандартные») и введите команду:

C:\php\php.exe --version

Результат будет примерно таким:

PHP 7.1.4 (cli) (built: Apr 11 2017 19:54:37) (ZTS MSVC14 (Visual C++ 2015) x64) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

Результат подтверждает, что PHP работает. Попробуйте для примера создать новый файл-сценарий (я создал файл “test.php” прямо в корне диска “C:”) и поместить в него текст:

Эта статья также доступна на следующих языках: Тайский

  • Next

    Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

    • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

      • Next

        В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

  • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
    https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png