Php ini где лежит windows 10

The configuration file (php.ini) is read when PHP starts up. For the server module versions of PHP, this happens only once when the web server is started. For the CGI and CLI versions, it happens on every invocation.

The configuration file (php.ini)
is read when PHP starts up. For the server module versions of PHP,
this happens only once when the web server is started. For the
CGI and CLI versions, it happens on
every invocation.

php.ini is searched for in these locations (in order):


  • SAPI module specific location (PHPIniDir directive
    in Apache 2, -c command line option in CGI and CLI)

  • The PHPRC environment variable.

  • The location of the php.ini file
    can be set for different versions of PHP. The root of the registry keys depends on 32- or 64-bitness of the installed OS and PHP.
    For 32-bit PHP on a 32-bit OS or a 64-bit PHP on a 64-bit OS use [(HKEY_LOCAL_MACHINESOFTWAREPHP] for 32-bit version of PHP on a 64-bit OS use [HKEY_LOCAL_MACHINESOFTWAREWOW6432NodePHP]] instead.
    For same bitness installation the following registry keys
    are examined in order:
    [HKEY_LOCAL_MACHINESOFTWAREPHPx.y.z],
    [HKEY_LOCAL_MACHINESOFTWAREPHPx.y] and
    [HKEY_LOCAL_MACHINESOFTWAREPHPx], where
    x, y and z mean the PHP major, minor and release versions.
    For 32 bit versions of PHP on a 64 bit OS the following registry keys are examined in order:
    [HKEY_LOCAL_MACHINESOFTWAREWOW6421NodePHPx.y.z],
    [HKEY_LOCAL_MACHINESOFTWAREWOW6421NodePHPx.y] and
    [HKEY_LOCAL_MACHINESOFTWAREWOW6421NodePHPx], where
    x, y and z mean the PHP major, minor and release versions.
    If there is a
    value for IniFilePath in any of these keys, the first
    one found will be used as the location of the php.ini
    (Windows only).

  • [HKEY_LOCAL_MACHINESOFTWAREPHP] or
    [HKEY_LOCAL_MACHINESOFTWAREWOW6432NodePHP], value of
    IniFilePath (Windows only).

  • Current working directory (except CLI).

  • The web server’s directory (for SAPI modules), or directory of PHP
    (otherwise in Windows).

  • Windows directory (C:windows
    or C:winnt) (for Windows), or
    --with-config-file-path compile time option.

If php-SAPI.ini exists (where SAPI is the SAPI in use,
so, for example, php-cli.ini or
php-apache.ini), it is used instead of php.ini.
The SAPI name can be determined with php_sapi_name().

Note:

The Apache web server changes the directory to root at startup, causing
PHP to attempt to read php.ini from the root filesystem if it exists.

Using environment variables can be used in php.ini as shown below.

Example #1 php.ini Environment Variables

; PHP_MEMORY_LIMIT is taken from environment
memory_limit = ${PHP_MEMORY_LIMIT}

The php.ini directives handled by extensions are documented
on the respective pages of the extensions themselves. A list of
the core directives is available in the appendix. Not all
PHP directives are necessarily documented in this manual: for a complete list
of directives available in your PHP version, please read your well commented
php.ini file. Alternatively, you may find
» the latest php.ini from Git
helpful too.

Example #2 php.ini example

; any text on a line after an unquoted semicolon (;) is ignored
[php] ; section markers (text within square brackets) are also ignored
; Boolean values can be set to either:
;    true, on, yes
; or false, off, no, none
register_globals = off
track_errors = yes

; you can enclose strings in double-quotes
include_path = ".:/usr/local/lib/php"

; backslashes are treated the same as any other character
include_path = ".;c:phplib"

It is possible to refer to existing .ini variables from
within .ini files. Example: open_basedir = ${open_basedir}
":/new/dir"
.

Scan directories

It is possible to configure PHP to scan for .ini files in a directory
after reading php.ini. This can be done at compile time by setting the
—with-config-file-scan-dir option.
The scan directory can then be overridden at run time
by setting the PHP_INI_SCAN_DIR environment variable.

It is possible to scan multiple directories by separating them with the
platform-specific path separator (; on Windows, NetWare
and RISC OS; : on all other platforms; the value PHP is
using is available as the PATH_SEPARATOR constant).
If a blank directory is given in PHP_INI_SCAN_DIR, PHP
will also scan the directory given at compile time via
—with-config-file-scan-dir.

Within each directory, PHP will scan all files ending in
.ini in alphabetical order. A list of the files that
were loaded, and in what order, is available by calling
php_ini_scanned_files(), or by running PHP with the
—ini option.

Assuming PHP is configured with --with-config-file-scan-dir=/etc/php.d,
and that the path separator is :...

$ php
  PHP will load all files in /etc/php.d/*.ini as configuration files.

$ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php
  PHP will load all files in /usr/local/etc/php.d/*.ini as
  configuration files.

$ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php
  PHP will load all files in /etc/php.d/*.ini, then
  /usr/local/etc/php.d/*.ini as configuration files.

$ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php
  PHP will load all files in /usr/local/etc/php.d/*.ini, then
  /etc/php.d/*.ini as configuration files.

weili

1 year ago


For someone who's also wondering.

PHP can work even if there is no configuration file(php.ini) loaded,
it will simply applies the default values to directives.


ohcc at 163 dot com

6 years ago


in php.ini you can reference to an existing directive or an environment variable using the syntax ${varname}.

Here are some examples.

sys_temp_dir = "${WINDIR}"

--- ${WINDIR} will be replaced by $_ENV['WINDIR'] at runtime

--- you can set environment variables by Apache and use them in php.ini
--- FcgidInitialEnv AUTHOR "WUXIANCHENG"
--- error_log = "${AUTHOR}.log"

error_log = "${sys_temp_dir}"

--- ${sys_temp_dir} will be replace by the value of sys_temp_dir

Also you can use PHP constants in php.ini, but DONT'T wrap them in ${} or "".

error_log = "/data/"PHP_VERSION"/"

---  it works like this php code:

$error_log =  "/data/" . PHP_VERSION . "/";


Установка

Этот раздел содержит общие вопросы о том, как производится установка
PHP. Дистрибутивы PHP доступны почти для всех операционных систем и веб-серверов.

Для установки PHP, следуйте инструкциям: Установка и настройка.

  1. Почему лучше не пользоваться Apache2 с многопоточным «MPM» (event, worker) в
    промышленной эксплуатации?

  2. ОС «Unix»/»Windows»: Где искать файл php.ini?

  3. Unix: Я установил PHP, но при каждом открытии какого-либо документа
    вижу ‘Document Contains No Data’, что это значит?

  4. Unix: Я установил PHP используя RPMS, но Apache не обрабатывает
    PHP-страницы, в чём дело?

  5. Unix: Я пропатчил Apache модулем FrontPage, и теперь PHP не работает. Т.е.
    PHP несовместим с модулями Apache FrontPage?

  6. Unix/Windows: Я установил PHP, но при попытке открыть PHP-файл
    браузером вижу просто пустой экран.

  7. Unix/Windows: Я установил PHP, но когда пытаюсь посмотреть созданную PHP-страницу
    через браузер, то получаю ошибку 500.

  8. Некоторые операционные системы: Я установил PHP без каких-либо ошибок, но
    когда пытаюсь запустить Apache, мне выводится ошибка:

    [mybox:user /src/php5] root# apachectl configtest
    apachectl: /usr/local/apache/bin/httpd Undefined symbols:
    _compress
    _uncompress

  9. Windows: Я установил PHP, но когда пытаюсь открыть страницу скрипта через
    браузер, получаю ошибку:

    cgi error:
    The specified CGI application misbehaved by not
    returning a complete set of HTTP headers.
    The headers it did return are:

  10. Windows: Я все сделал по инструкции, но PHP и IIS не хотят работать вместе!

  11. Когда я запускаю PHP как CGI на IIS, PWS, OmniHTTPD или Xitami,
    я получаю такую ошибку: Security Alert! PHP CGI
    cannot be accessed directly..

  12. Как я могу понять, что мой php.ini найден и используется? Такое впечатление, что
    вносимые мною изменения игнорируются.

  13. Как я могу добавить директорию с PHP в PATH
    в Windows?

  14. Как я могу сделать файл php.ini доступным для PHP в windows?

  15. Можно ли использовать согласование контента Apache (опция MultiViews)
    с PHP?

  16. PHP ограничен работой только с методами GET и POST?

Почему лучше не пользоваться Apache2 с многопоточным «MPM» (event, worker) в
промышленной эксплуатации?

PHP подобен связующему звену. Это связующее звено для создания хороших веб-приложений
путём объединения разрозненных сторонних библиотек в единое целое, через
использование интуитивно понятного и простого для изучения языкового интерфейса.
Гибкость и сила PHP основана на стабильности и устойчивости, лежащей в основе платформы.
Чтобы всё работало, нужна рабочая операционная система, рабочий
веб-сервер и рабочие сторонние библиотеки. Но когда хоть что-либо из них перестаёт
работать — PHP нуждается в способах быстрого определения причины неполадки и её
устранения. И когда вы усложняете базовый фреймворк тем, что не изолируете
исполняемые потоки и сегменты памяти, и не предоставляете потокам отдельных
изолированных «песочниц» — ослабляется вся PHP-система.

Если вы желаете использовать многопоточный «MPM» — ознакомьтесь
с конфигурацией «FastCGI», согласно которой PHP работает в собственном
пространстве памяти.

ОС «Unix»/»Windows»: Где искать файл php.ini?

По умолчанию в Unix он должен быть в /usr/local/lib, который соответствует
<установочный-путь>/lib.
Многие захотят изменить этот путь в момент компиляции, используя опцию
—with-config-file-path
Например, можно написать так:

--with-config-file-path=/etc

И затем скопировать php.ini-development из дистрибутива в
/etc/php.ini и внести в него все необходимые изменения.

--with-config-file-scan-dir=PATH

В ОС «Windows», по умолчанию, путь к файлу php.ini это путь
к директории «Windows». Если вы пользуетесь веб-сервером «Apache», php.ini
находится по пути: ?program filesapache groupapache.
Таким образом, на одном компьютере можно пользоваться несколькими файлами php.ini,
соответственно версиям «Apache».

Смотрите также: файл настроек.

Unix: Я установил PHP, но при каждом открытии какого-либо документа
вижу ‘Document Contains No Data’, что это значит?

Это значит, что, возможно, PHP столкнулся с какой-то проблемой и падает в core-dump.
Просмотрите логи ошибок сервера, чтобы проверить это, а затем попытайтесь воспроизвести
цепочку шагов, приведших к ошибке; например, создав отдельную тестовую программу.
И если вы умеете пользоваться ‘gdb’, то это поможет вам получить стек вызовов функций (backtrace) для
включения его в отчёт об ошибке, чтобы облегчить выявление причин проблемы
разработчикам. Если вы пользуетесь PHP как модулем для Apache, вам может оказаться
полезным следующее:

  • Остановите httpd-процессы

  • gdb httpd

  • Вновь остановите httpd-процессы

  • > run -X -f путь_к_httpd.conf

  • Затем скопируйте URL,вызвавший проблему в браузере

  • > run -X -f путь_к_httpd.conf

  • Если будет происходить core dump, gdb сообщит вам об этом

  • Введите bt

  • Включите backtrace в ваш отчёт об ошибке. И отправьте по адресу:
    » https://github.com/php/php-src/issues

Если ваш скрипт использует регулярные выражения
(preg_match() и подобные), проверьте, с одинаковыми ли пакетами
обработки RegEx скомпилированы PHP и Apache?
В случае PHP и Apache 1.3.x это происходит автоматически.

Unix: Я установил PHP используя RPMS, но Apache не обрабатывает
PHP-страницы, в чём дело?

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

# Extra Modules
AddModule mod_php.c
AddModule mod_perl.c

# Extra Modules
LoadModule php_module         modules/mod_php.so
LoadModule php5_module        modules/libphp5.so
LoadModule perl_module        modules/libperl.so

И добавьте:

AddType application/x-httpd-php .php

… в область глобальных свойств, или в свойства того VirtualDomain,
для которого вы хотите включить поддержку PHP.

Unix: Я пропатчил Apache модулем FrontPage, и теперь PHP не работает. Т.е.
PHP несовместим с модулями Apache FrontPage?

Нет, совместим, но патч FrontPage влияет на структуры Apache, нужные для PHP.
Перекомпиляция PHP (команда ‘make clean ; make’) после установки патча может решить
проблему.

Unix/Windows: Я установил PHP, но при попытке открыть PHP-файл
браузером вижу просто пустой экран.

Выберите в браузере опцию «посмотреть код» и вы, возможно, увидите, ваш PHP-код.
Это значит, что Apache не передал ваш скрипт интерпретатору PHP. Значит что-то
неправильно с конфигурацией сервера. В этом случае перепроверьте конфигурацию
веб-сервера в соответствии с инструкциями по установке PHP.

Unix/Windows: Я установил PHP, но когда пытаюсь посмотреть созданную PHP-страницу
через браузер, то получаю ошибку 500.

Что-то пошло не так, когда сервер попытался запустить PHP. Чтобы увидеть
возникающую исходную ошибку, в командной строке перейдите в директорию,
содержащую исполняемый файл PHP (php.exe в Windows) и
запустите php -i. Если существуют какие-либо проблемы с
запуском PHP, вам выведется соответствующая ошибка, которая подскажет вам, что
надо исправить. Если вы увидите множество кода HTML (вывод функции
phpinfo()), значит PHP работает нормально, и ваша проблема
связана с настройками веб-сервера.

Некоторые операционные системы: Я установил PHP без каких-либо ошибок, но
когда пытаюсь запустить Apache, мне выводится ошибка:

[mybox:user /src/php5] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress
  _uncompress

Это означает, что проблема не в PHP, а в клиентских библиотеках MySQL. Некоторые
из них требуют сборки PHP с опцией —with-zlib.
Этот нюанс описан в MySQL FAQ.

Windows: Я установил PHP, но когда пытаюсь открыть страницу скрипта через
браузер, получаю ошибку:

cgi error:
 The specified CGI application misbehaved by not
 returning a complete set of HTTP headers.
 The headers it did return are:

Это означает, что PHP не смог ничего вывести в стандартный поток ввода-вывода.
Чтобы увидеть
возникающую исходную ошибку, в командной строке перейдите в директорию,
содержащую исполняемый файл PHP (php.exe в Windows) и
запустите php -i. Если существуют какие-либо проблемы с
запуском PHP, вам выведется соответствующая ошибка, которая подскажет вам, что
надо исправить. Если вы увидите множество кода HTML (вывод функции
phpinfo()), значит PHP работает нормально.

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


  • Права на файл вашего скрипта, php.exe,
    php5ts.dll, php.ini или какого-либо модуля PHP
    не позволяют анонимному пользователю интернета
    ISUR_<machinename> к ним обратиться.

  • Файл скрипта отсутствует (или, возможно, он находится не там, где вы думаете,
    относительно корневого каталога веб-сервера). Обратите внимание, что в IIS, вы
    можете отловить эту ошибку, отметив опцию ‘check file exists’ в настройках
    «script mappings» в Internet Services Manager. Если файл отсутствует, сервер вместо
    этого вернёт ошибку 404. При этом, также есть дополнительное преимущество. IIS будет
    производить проверки аутентификации для файла скрипта, необходимые вам,
    основываясь на разрешениях NTLanMan.

Windows: Я все сделал по инструкции, но PHP и IIS не хотят работать вместе!

Убедитесь, что все пользователи, которым может понадобиться запустить ваш PHP-скрипт,
имеют право запускать php.exe! IIS использует анонимного
пользователя, создаваемого во время инсталляции. Этот пользователь должен иметь
права на запуск php.exe. Так же, каждый авторизованный
пользователь должен иметь права на запуск php.exe.
Для IIS4 вы сказать ему, что PHP — это интерпретатор скриптов.
Также прочтите этот FAQ.

Когда я запускаю PHP как CGI на IIS, PWS, OmniHTTPD или Xitami,
я получаю такую ошибку: Security Alert! PHP CGI
cannot be accessed directly.
.

Вы должны установить опцию
cgi.force_redirect равную 0.
По умолчанию она равна 1. Убедитесь, что она не закомментирована
(с помощью ;). Как и все опции PHP, она настраивается в php.ini

Так как она по умолчанию равна 1, критически важно убедиться,
что используется именно тот php.ini, который нужен.
Читайте этот FAQ для подробностей.

Как я могу понять, что мой php.ini найден и используется? Такое впечатление, что
вносимые мною изменения игнорируются.

Для проверки, какой именно php.ini используется, запустите функцию
phpinfo(). Где-то вверху будет список с названием
Configuration File (php.ini). Из него вы сможете понять, какой
именно php.ini используется. Если указана только директория в PATH,
а файл конфигурации не прочитан, то просто скопируйте его в эту директорию.
Если php.ini включён PATH — это значит, что он прочитан.

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

Также смотрите описание php_ini_loaded_file().

Как я могу добавить директорию с PHP в PATH
в Windows?

В Windows:

  • Старт → Панель Управления → Система

  • Перейдите на вкладку ‘Дополнительно’

  • Нажмите кнопку ‘Переменные Окружения’

  • Посмотрите раздел ‘Системные Переменные’

  • Найдите строку, содержащую переменную PATH

  • Совершите на ней двойной щелчок мышью

  • Допишите в конец строки путь к PHP, не забыв добавить перед ним ‘;’
    (например ;C:php)

  • Нажмите OK

Замечание:

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

Как я могу сделать файл php.ini доступным для PHP в windows?

Есть несколько способов сделать это. Если вы используете Apache, обратитесь к документации Apache,
в противном случае вы должны установить переменную среды PHPRC.

Можно ли использовать согласование контента Apache (опция MultiViews)
с PHP?

Если ссылки на файлы PHP содержат расширения, то все будет работать отлично.
Это FAQ применимо только для случаев, когда ссылки не содержат расширения и
вы хотите использовать согласование контента для файлов PHP из URL.
В этом случае замените строку AddType application/x-httpd-php
.php
на:

AddHandler php5-script php
AddType text/html php

Это решение не сработает с Apache 1, так как модуль PHP не отлавливает
php-script.

PHP ограничен работой только с методами GET и POST?

Нет, возможно работать с любыми запросами, например CONNECT.
Правильный статус ответа должен будет посылаться функцией
header(). Если вам надо, чтобы PHP работать только с
методами GET и POST, необходимо сконфигурировать Apache следующим образом:

<LimitExcept GET POST>
Deny from all
</LimitExcept>

per dot fikse at ipj dot no

17 years ago


Installing PHP 4 or 5 on Windows Server 2003 x64 results in http error 505. This is not a PHP bug. It is due to running a 32-bit ISAPI DLL under the 64-bit version of IIS 6, as documented here: http://support.microsoft.com/?id=895976

Solution: Flip the Metabase flag for Enable32bitAppOnWin64 as described in http://support.microsoft.com/?id=894435 ,
like this: CSCRIPT ADSUTIL.VBS SET W3SVC/AppPools/Enable32bitAppOnWin64 1

(Alternatively with full path: cscript %SYSTEMDRIVE%inetpubadminscriptsadsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1)


emzeperx at emzeper dot hu

17 years ago


You do not have to restart the whole system make effect of changing the PATH env var. For me (sbs2003) worked automatically.
on older systems you can use

set $Path=%path%;c:php

command to extend immediately the path var.


nigel dot salt at hotmail dot com

19 years ago


Finally got IIS 5 and PHP 5 to talk. 

What worked for me was:

1) Set
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices
W3SVCParametersScript Map]
".php"="your path to php\php.exe"

2) ensure there is not a php.ini in the windows system folder and that there is one wherever you've put PHP

3) edit php.ini and set cgi force redirect to 0 and cgi.rfc2616_headers = 1

4) Put the PHP scripts in their own folder underneath the inetpub root

5) Open the IIS console, right click your new php folder
In the Directory tab
set application name to the name of the folder
set executable and script as permission
set application protection to low
Click configuration and check that .php is mapped to wherever you put
PHP

Restart IIS

Try a very simple PHP page and it should work

Nigel


john dot calder at manukau dot ac dot nz

14 years ago


WINDOWS 2003 and IIS.  BIG LESSON FOR ME was "don't mess with the optional components".
I had lots of trouble until I tried installing without asking for extras and then it was very smooth.
I have found no need to set up paths. 
I have found no need to configure IIS. 
I have found no need to change security on the PHP folder.

What works for me with Windows/IIS:

1.  You need to be logged-on as "administrator"

2.  Run  "php-5.2.6-win32-installer.msi"
Your ONLY action during this wizard is to select "IIS ISAPI" as the webserver.  Do NOT CHANGE anything else!  I am guessing that the optional extras apply only to Apache because after enabling them I see Apache-related error messages.

3.  Setup a test virtual directory as you would for an ASP or ASP.NET web app.  eg "phptest"
Then use notepad to create a test page eg "test.php"
<?php
phpinfo
();
?>

4.  In Internet Explorer, test with eg this address
http://localhost/phptest/test.php

IF this does not give you a beautiful page of details THEN start reading other advice on this page - especially helpful for me was the faq advice to test run "php.exe -i" from the command prompt.


charleslynch at xybersoftware dot com

14 years ago


One final note to the message below if you are getting the message about not having rights to execute...You need to use IIS right click on the website and choose 'Properties/Home Directory' then on the 'Execute Permissions' combo box you need to choose 'Scripts only'...Click ok...another dialog may appear asking which directories to apply the action too...choose any directories that you intend on using php in and click ok...It should work now...

JUSTANOTHERUSER

17 years ago


<LimitExcept GET POST>
Deny from all
</LimitExcept>

Does not work with Apache2+ & PHP5 . Apache Refuses to start


jimo at mail dot azhsv dot com

19 years ago


PHP 4 and IIS 6.0 (Windows Server 2003)

Had difficulty getting PHP 4.3.3 to work with Win2003 Ent Server for use with SquirrelMail.  Problem found and believed solved.  Appears to be something New with IIS 6.0 (More security by Micro$oft)  Was getting 404 error and php was not being run as a cgi even though it was in extensions and IIS user had rights to execute it. (php from command line operated correctly)

If you are installing on Windows Server 2003 (only have Enterprise Edition ? Not sure if this applies to standard edition), and you have done the normal procedures for inclusion of PHP scripts (either ISAPI or CGI) in IIS, you will still get a 404 error when attempting to execute those scripts even though IIS has rights and the extension points to the correct file.  To alleviate this problem, perform the following:

1.    Open a command prompt window
2.    Change to C:windowssystem32
3.    Execute the command:  cscript  iisext.vbs /AddFile c:phpphp.exe 1 php 0 php
4.    Execute the command:  cscript iisext.vbs /EnFile c:phpphp.exe
5.    To check for correct execution of the above,
6.    Execute the command:  cscript IisExt.vbs /ListFile ? the php extension should be listed

If you try just step 4 without step 3 you get an error that the file is not in the list (and won?t be there till you do step 3 above)

After this, IIS seems to like the php extension and work normally.

For additional reference, see the below 3 Micro$oft KB Articles:
HOWTO: Enable and Disable ISAPI Extensions and CGI Applications in IIS 6.0 (MS KB Article 328360)

HOWTO List Web Server Extensions and Extension Files in IIS 6.0 (MS KB Article 328505)

HOWTO Add and Remove Web Service Extension Files in IIS 6.0 (MS KB Article 328419)


ssaxena at nriol dot com

12 years ago


Here are my struggle to get PHP 5.2.12 working on Windows XP SP3, IIS 5.1 (Please note Win XP SP3 has issue of FastCGI)

1. Dowloaded installer and installed in C:Program FilesPHP as ISAPI module

---->Did not work

Added php5isapi.dll in ISAPI Filter and added the extension .php in Home Dir->Configuration
(For every setting change restarted IIS on cmd->iisreset)

---->Did not work

(And the Google was pointing to the Fast CGI issue; Don't know why microsoft has MS-FAST ! )
Uninstalled the PHP and cleaned up the folders, PATH environment variable & PHPRC, the IIS settings and registry entries and shut down(restart is different from shut down) the system to make it very clean

2. Reinstalled the PHP in C:PHP as ISAPI and did the same as above in IIS
(For every setting change restarted IIS on cmd->iisreset)

---->Did not work

Uninstalled and cleaned up same as above and took a breath to make sure what I am doing wrong.
Shutdown the system.

3. Unzipped the php-5.2.12-Win32.zip and did the same as above (this time manually PATH variable and security permission for the PHP folder and following settings)

short_open_tag = On
error_reporting = E_ALL & ~E_NOTICE
display_errors = On
doc_root = "C:Inetpubwwwroot"
extension_dir = "C:PHPext"
cgi.force_redirect = 0

---->Did not work

Uninstalled and cleaned up same as above
Shutdown the system.

4. Downloaded Microsoft Web Platform Installer 2.0 and select the PHP+Fast CGI+Windows Cache for PHP extension and Web Deployment Tools
restarted the system to take effect the settings

---->Did not work

Uninstalled and cleaned up same as above
Shutdown the system

5. Took the prev version of PHP php-5.2.4-Win32.zip unzip the folder and did the following changes:

short_open_tag = On
error_reporting = E_ALL & ~E_NOTICE
display_errors = On
doc_root = "C:Inetpubwwwroot"
extension_dir = "C:PHPext"
cgi.force_redirect = 0

set the security permission as IIS_machinename with full access to the C:PHP folder

------->IT GOT WOKRING

Hope people would be aware of php-5.2.12 and would love the php-5.2.4


scott at chaisson dot net

15 years ago


Windows 2000 Server and IIS (SP4 and all patches):

After many frustrating hours of trying to figure out the install (again), It took a while, but here are a couple tips:

PHP working with IIS uses c:winntphp.ini

It doesn't matter what you set the path to, nor what you set the PHPRC environment variable to. After you get PHP running correctly in the installation folder (using php -i) copy the php.ini file into the c:winnt folder.

Here's what worked for me:

- Add PHP path to System environment variable

- Add php5activescript.dll from http://snaps.php.net/ to the PHP folder, then Register it: "regsvr32 php5activescript.dll"

Set extension_dir and doc_root directives in PHP.INI:
  extension_dir = C:WWWPHPext
  doc_root = C:WWWSite
  cgi.force_redirect = 0

(the last cgi.force_redirect isn't required, but I like to set it anyway)

Copy the .INI file into WINNT folder

In IIS Manager, right-click "Default Web Site", Click "Home Directory",
  Click "Configuration", "Add" the ISAPI application:
    Executable: <your php install>php5isapi.dll
    Extension: .php
    Limit to: GET,HEAD,POST
    Check: "Script Engine"
    Uncheck: "Check that file exists"

Finally: Set up an ISAPI filter:
  Click the "ISAPI Filters" tab,
  Filter Name: PHP
  Executable: <your php install>php5isapi.dll

Notes: You don't have to set any of your folders as "Script source" folders. .PHP files aren't scripts, merely text files that require processing before being shipped off to the browser, which is what the ISAPI filter does.

Finally, working again.

Chase


Meiki67 skipthis at geemail

15 years ago


Had a hard day to MSI install 5.2.3 on WinXP with MySQL. I use a drive substitution (subst drive: path - in my case subst d: c:drive_d) and installed PHP in D:PHP - which in reality is C:DRIVE_DPHP.  To make a long story short - only after (1) changing all substituted D: back to C:DRIVE_D and (2) resolving all DOS short names to Win long names PHP started to work. The first one is clear - the substitution works only for the active console user - not for services or IUSR. For the second one I have no explanation, since DOS short names should work systemwide - maybe Win handles them correctly but PHP not ?

BTW <?php phpinfo(); ?> was of tremendeous help

Meiki


knutw at sparhell dot no

16 years ago


I recntly upgraded from PHP 5.1 to 5.2 on my Windows Server 2003 using IIS6. I selected CGI as before. My PHP folder is as always C:Program FilesPHP. I also edited my brand new php.ini, enabling all my old extensions and recommended settings for IIS. I like not to keep my old config into a new version.

After upgrade, I just got blank pages in my browser, and the response status was 404 Not found.

I checked my installation twice, using this FAQ, but got no way.

Then I went to IIS Manager, Web Service Extensions. The php Service Extension was Allowed as it should. I deleted the Service Extension and added it. The old extension used short file names containing tilde (PROGRA~) character, but I don'æt know if that gas anything to do with the problem. Anyway, after allowing my" new" Service Extension, pointing to php-cgi.exe as before, mye web sites suddenly worked. So will revommend anyone with thos problem to delete and add the Servcie Extension. It didn't help re-allowing it, restarting IIS or the complete server.


jeff_graham at datacenterservices dot net

19 years ago


As stated within the note "jimo at mail dot azhsv dot com
29-Nov-2003 04:33
PHP 4 and IIS 6.0 (Windows Server 2003)," I found the same steps were requiered for installation of PhP 5 beta 3 on my Windows 2003 server (Standard Edition)

Curtis

15 years ago


I have some additional troubleshooting tips for 53.7, which deals with getting a blank screen on your browser when running a PHP script.

In addition to server misconfiguration, it may also be that PHP isn't configured to output errors to the browser, which is the case if you or your host uses a more secure php.ini. If this is the case, you need to find out where errors are being logged to find out if any errors are preventing normal output from being delivered to the client.

If you have access to php.ini, check the 'display_errors' directive, which is, by default, located under the 'error_reporting' directive. It's helpful to have 'display_errors' on during debugging phases, but best to have it off in production environments.

Related functions: http://php.net/ini_set | http://php.net/error_reporting | http://php.net/error_log


peter dot mosinskisNOSPAM at csuci dot edu

19 years ago


Running Win2K AS + IIS5.0 + PHP 4.3.1, I ran into a nasty problem that I mistakenly thought had to do with something in the php.ini configuration. When I would try to submit a form using the HTTP method GET it would work, but I would get a "404 Page Not Found" error using the POST method.

All my permissions were set correctly, the php.ini was configured correctly. It had to do with URLScan being installed on IIS (see below)

Page 404 File Not Found Error When Using POST method in PHP (and Perl, and otherwise)
-------------------------------------------

This is related to the Microsoft URLScan utility. If you have this problem, the IIS administrator has probably run the IIS Lockdown tool as well as configured URLScan to reject this type of HTTP method when sent in a URL. These tools are meant to enhance web server security.

URLScan configuration files can be found in the WINNTsystem32inetsrvurlscan folder on the web server. Specifically, the file to modify is urlscan.ini.

The changes to make are as follows:
1. Make sure UseAllowVerbs=1 under [options]
2. Under the [AllowVerbs] section, list your allowed HTTP methods to include:
    GET
    POST

For more information on the IIS Lockdown tool and URLScan, visit http://technet.microsoft.com


christianfelix at laszlo dot com

15 years ago


For Windows XP users

Just add php.ini to windows/system 32 and also save a copy in the setup folder e.g. c:/php/php.ini, c:/php5/php.ini,

You have to follow the suggestions, add to path, uncomment extensions and voila!!


monroe at peoplego dot com

20 years ago


INSTALLATION ON OPENBSD 3.1 VIA PORTS COLLECTION
Would have succeed but no mysql support.
I commented out the FLAVORS+= dbase filepro mysql mysql_bundled postgresql iodbc in the /usr/ports/www/php4/Makefile and in the configure options added 
--with-mysql=/usr/local   and it worked.

Good Luck


joerg at fenin dot de

15 years ago


To limit HTTP Request Methods on the Apache server running PHP you should use mod_rewrite or mod_security instead of LimitExcept, to give you more control over the handling of such http errors.  Can go in .htaccess file or httpd.conf

# mod_rewrite
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$
  RewriteRule .* - [F,L]
</IfModule>

# mod_security
<IfModule mod_security.c>
  SecFilterSelective REQUEST_METHOD "!^(GET|HEAD|POST)$" "deny,log,status:403"
</IfModule>

You can use the php request method scanner at askapache to see exactly how your server deals with various request methods, and check that your server is configured properly.. 

http://www.askapache.com/online-tools/request-method-scanner/


Anonymous

16 years ago


After setting the PHPRC environment variable, none of my PHP files would hit the preprocessor. The browser was just serving out PHP source code right there in the "view source."

The manual was telling me to set this var to "c:php," but nothing was working. It's almost as if IIS/Win2000 wasn't reading my php.ini at all.

After I set that variable to "c:phpphp.ini," all of a sudden I was getting honest to goodness PHP pages working.


barry dot fagin at usafa dot af dot mil

18 years ago


Fixing 404 (file not found) errors with PHP 5.0.3 and IIS 6.0

IIS 6.0 is installed with security settings that don't permit dynamic content.  This means that even if all the hints in the FAQ are paid attention to (.ini modified correctly, security and permissions correct for IUSR_xxx user, etc), you still get 404 errors for all php files. 

To fix this:  IIS Manager -> expand local computer -> Web Services Extensions -> Add web service or extension -> .php, browse to c:phpphp-cgi.exe or wherever you had the php executable installed. That plus setting the doc_root in the .ini file solved the problem.

--BF


Этот раздел содержит инструкции для ручной установки и настройки
PHP на Microsoft Windows.

Выбор и загрузка пакета дистрибутивов PHP

Загрузите дистрибутив PHP в виде zip-архива с
» PHP для Windows: Исполняемые файлы и исходные коды.
Существует несколько различных версий zip-пакетов — выберите версию, которая подходит для
используемого веб сервера:

  • Если PHP используется с IIS, тогда следует использовать PHP 5.3 VC9 Non Thread Safe или
    PHP 5.2 VC6 Non Thread Safe;

  • Если PHP используется с IIS7 или выше и версия PHP 5.3+, тогда должна использоваться версия
    дистрибутива PHP VC9.

  • Если PHP используется с Apache 1 или Apache 2 тогда выбирайте PHP 5.3 VC6 или
    PHP 5.2 VC6.

Замечание:

Версии VC9 компилируются с помощью Visual Studio 2008 и имеют улучшенную
производительность и стабильность. Версии VC9 требуют наличия в системе
» Microsoft 2008 C++ Runtime (x86) или
» Microsoft 2008 C++ Runtime (x64).

Структура пакетов PHP и их содержимое

Распакуйте содержимое zip архива в директорию по вашему выбору,
например C:PHP. Директория и структура файлов, извлеченных из zip, будет
такой:

Пример #1 Структура пакета PHP 5

c:php
   |
   +--dev
   |  |
   |  |-php5ts.lib                 -- версия php5.lib без поддержки многопоточности
   |
   +--ext                          -- DLL расширения для PHP
   |  |
   |  |-php_bz2.dll
   |  |
   |  |-php_cpdf.dll
   |  |
   |  |-...
   |
   +--extras                       -- пустой
   |
   +--pear                         -- начальная копия PEAR
   |
   |
   |-go-pear.bat                   -- скрипт установки PEAR 
   |
   |-...
   |
   |-php-cgi.exe                   -- исполняемый файл CGI
   |
   |-php-win.exe                   -- выполняет скрипты без открытой консоли
   |
   |-php.exe                       -- Исполняемый файл PHP для командной строки (CLI)
   |
   |-...
   |
   |-php.ini-development           -- настройки php.ini по умолчанию
   |
   |-php.ini-production            -- рекомендуемые настройки php.ini
   |
   |-php5apache2_2.dll             -- имеется только в многопоточной версии
   |
   |-php5apache2_2_filter.dll      -- имеется только в многопоточной версии
   |
   |-...
   |
   |-php5ts.dll                    -- ядро PHP DLL ( php5.dll в версии без поддержки многопоточности)
   | 
   |-...

Ниже представлен список модулей и исполняемых файлов, включенных в PHP zip
дистрибутив:

  • go-pear.bat — скрипт установки PEAR. Подробнее см. » Установка (PEAR).

  • php-cgi.exe — исполняемый файл CGI, который может быть использован во время запуска PHP
    на IIS через CGI или FastCGI.

  • php-win.exe — исполняемый файл PHP для выполнения PHP скриптов без использования консоли
    (например, приложения PHP, использующие Windows GUI).

  • php.exe — исполняемый файл PHP для выполнения PHP скриптов в консоли (CLI).

  • php5apache2_2.dll — модуль Apache 2.2.X.

  • php5apache2_2_filter.dll — фильтр Apache 2.2.X.

Изменение файла php.ini

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

Файл php.ini содержит правила исполнения PHP и инструкции по работе с
окружением, в котором он запускается. Ниже приводятся некоторые из настроек php.ini,
которые могут улучшить работу PHP в Windows. Некоторые из них опциональны. Есть
много других директив, которые могут быть полезны в вашем окружении — обращайтесь к
списку директив php.ini за более подробной информацией.

Обязательные директивы:

  • extension_dir = <путь к директории расширений>extension_dir
    указывает директорию, где расположены расширения PHP. Путь может быть абсолютным
    (например «C:PHPext») или относительным (например «.ext»). Используемые в php.ini расширения
    должны быть расположены в extension_dir.

  • extension = xxxxx.dll — Для каждого подключаемого расширения необходимо указать директиву «extension=».
    Расширения из extension_dir, отмеченные такой директивой, загружаются при старте PHP.

  • log_errors = On — в PHP есть механизм ведения лога ошибок, который может использоваться для сохранения ошибок в файле
    или для отправки в сервис (например syslog). Механизм также использует значение директивы error_log. Когда PHP исполняется службой IIS,
    log_errors должен быть включен с корректным error_log.

  • error_log = <пусть к файлу лога ошибок> — error_log нужен для обозначения абсолютного
    или относительного пути к файлу, в который протоколируются ошибки PHP. Этот файл должен доступным для записи веб-сервером.
    Самые распространенные места размещения этого файла — различные временные TEMP директории, например «C:inetpubtempphp-errors.log».

  • cgi.force_redirect = 0 — Эта директива необходима для исполнения под IIS.
    Это механизм защиты директории, требуемый многими другими веб серверами. Однако, включение его под IIS
    вызовет ошибки ядра PHP в Windows.

  • cgi.fix_pathinfo = 1 — Обеспечивает поддержку PATH_INFO согласно спецификации CGI.
    IIS FastCGI использует эту настройку.

  • fastcgi.impersonate = 1 — FastCGI под IIS поддерживает способность идентифицировать
    маркеры безопасности вызывающего клиента. Это позволяет IIS определять контекст безопасности, под которые выполняется запрос.

  • fastcgi.logging = 0 — Запись логов FastCGI должна быть выключена в IIS. Если запись включена,
    тогда все сообщения любых классов распознаются FastCGI как ошибки, что приведет IIS к генерации исключения HTTP 500.

Опциональные директивы

  • max_execution_time = ## — Эта директива указывает максимальное время выполнения любого скрипта PHP.
    По умолчанию равно 30 секундам. Следует увеличить это значение, если приложение PHP должно выполняться дольше.

  • memory_limit = ###M — Количество памяти, доступное процессу PHP, в Мб.
    По умолчанию 128, что достаточно для большинства PHP приложений. Некоторым сложным приложениям может потребоваться больше памяти.

  • display_errors = Off — Директива определяет, какие ошибки следует возвращать веб-серверу для
    дальнейшего протоколирования. При значении «On» PHP сообщает обо всех видах ошибок, которые
    приводятся в директиве error_reporting.
    По соображениям безопасности рекомендуется установить в «Off» на рабочих серверах, чтобы исключить передачу
    вывода ошибок конечному пользователю, так как они могут содержат информацию, угрожающую безопасности приложения.

  • open_basedir = <пути к директориям, разделенные точкой с запятой>, например
    openbasedir=»C:inetpubwwwroot;C:inetpubtemp». Эта директива указывает пути к директориям, в которых PHP
    разрешены операции с файловой системой. Любая операция с файлами и директориями вне указанных путей будет приводить к ошибке.
    Эта директива особенно полезна для предотвращения доступа к установленному PHP в окружениях разделяемых хостингов для предотвращения
    доступа PHP скриптов к любым файлам вне корневой директории веб сайта.

  • upload_max_filesize = ###M и post_max_size = ###M
    Максимальный разрешенный размер загруженного файла и присланных данных соответственно. Значения этих директив должны быть
    увеличены, если приложения PHP должны обрабатывать большие загружаемые файлы, например изображения или видеофайлы.

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

Помимо запуска PHP с помощью веб-сервера, PHP может быть запущен из командной строки
как .BAT скрипт. За более подробной информацией обращайтесь к материалу
Консоль PHP на Microsoft Windows.

Вернуться к: Установка в системах Windows

In this tutorial, we’re going to discuss php.ini—the main configuration file in PHP. From the beginner’s perspective, we’ll discuss what it’s meant for, where to locate it, and a couple of important configuration settings it provides.

What Is php.ini?

Whether you’re a PHP beginner or a seasoned developer, I’m sure that you’ve heard of php.ini: the most important PHP configuration file. 

When PHP is run, it looks for the php.ini file in some specific locations and loads it. This file allows you to configure a few important settings that you should be aware of. Quite often, you’ll find you need to tweak settings in the php.ini file.

On the other hand, it’s certainly possible that you’ve never needed to modify php.ini. PHP can run happily with the settings provided in the default php.ini file, since PHP ships with these default recommended settings. In fact, there are no critical configuration parameters that you must set in order to run PHP. 

However, the php.ini file provides a couple of important settings that you want to make yourself familiar with. In fact, as a PHP developer, it’s inevitable, and you’ll encounter it sooner rather than later.

Where Is php.ini?

In this section, we’ll see how to find the php.ini file which is loaded when you run the PHP script. This can be tricky—the location of the php.ini file vastly varies by the environment you’re running PHP with. If you’re running Windows, you’ll likely find the php.ini file within the directory of your PHP installation in the system drive. On the other hand, if you’re running another operating system, then it’s difficult to guess the exact location of the php.ini file—there are several possibilities.

This is where the phpinfo() function comes to the rescue. It will tell you where php.ini is located, and it will also output all the important PHP configuration information. 

You can run phpinfo() by creating a .php file and calling that function. Go ahead and create the phpinfo.php file with the following contents and place it in your document root:

1
<?php
2
phpinfo();
3
?>

Load this file in your browser, and you should see the output of phpinfo(). Look for the following section.

LocationLocationLocation

As you can see, there are two sections. The first one, Configuration File (php.ini) Path, indicates the default path of the php.ini file in your system. And the second one, Loaded Configuration File, is the path from where the php.ini file is being loaded when PHP is run.

So you can edit the php.ini file indicated in the Loaded Configuration File section, and that should work in most cases. Of course, if you’re running PHP as an Apache module, you need to restart the Apache server to make sure that the changes you’ve made in the php.ini file are reflected.

On the other hand, if you’re using software like WAMP or XAMPP to run your web development stack, it’s even easier to modify the php.ini file—you can directly access it via the WAMP or XAMPP UI.

In the next section, we’ll explore a couple of important settings in the php.ini file.

Important Settings in php.ini

The php.ini file provides a lot of configuration directives that allow you to modify various behaviors of PHP. In fact, when you open the php.ini file, you may get overwhelmed by the number of directives it provides. I’ll try to group them based on their behavior, and I hope it’ll be easy for you to understand.

Of course, we won’t go through each and every directive, but I’ll try to cover the most important ones. Let’s have a look at the types of directives that we’re going to discuss.

  • error handling directives
  • file upload directives
  • security related directives
  • session directives
  • miscellaneous directives

Error Handling Directives

In this section, we’ll go through directives that are related to error handling and are useful for debugging during development.

display_errors

The display_errors directive allows you to control whether errors are displayed on the screen during script execution. You can set it to On if you want errors to be displayed on the screen and Off if you want to disable it. It’s important that you don’t ever enable this on a production site—it will slow your site down and could give hackers valuable clues to your site’s security vulnerabilities.

error_reporting

This directive allows you to set the error reporting level. Mostly, this directive works in conjunction with the display_errors directive. This directive can accept E_ALL, E_NOTICE, E_STRICT, and E_DEPRECATED constants.

You can set it to E_ALL if you want to display all types of errors like fatal errors, warnings, deprecated functions, etc. You can also combine the different values if you want to filter out specific errors. For example, if you want to display all errors except notices, you can set it to E_ALL & ~E_NOTICE.

error_log

On a production website, you need to make sure that PHP doesn’t display any errors to the client browser. Instead, you can log errors somewhere so that later on you can refer to them if something goes wrong with your site. The error_log directive allows you to set the name of the file where errors will be logged. You need to make sure that this file is writable by the web server user.

File Upload Directives

In this section, we’ll see a couple of important directives that allow you to enable file uploading capabilities in your PHP forms.

file_uploads

This is a boolean directive which allows you to enable HTTP file uploads. If you set it to On, you can use the file field in your forms and users will be able to upload files from their computer. On the other hand, if you set it to Off, file uploading is disabled altogether.

upload_max_filesize

If you have enabled the file upload feature on your website and you’re facing difficulties in uploading files, this is the directive you should check first. It allows you to set the maximum size of a file that can be uploaded.

By default, it’s set to 2MB, and thus users can’t upload files larger than 2MB. You can fine-tune this value as per your requirements—often you’ll want to increase this limit to allow larger file uploads.

post_max_size

This setting allows you to set the maximum size of the POST data in your forms. When a user submits a form with the POST method, the total POST data size should not exceed the value you’ve set in this directive.

This should be larger than the value you’ve set in the upload_max_filesize directive, since file uploads are handled with POST requests.

Security Directives

In this section, we’ll see a few important directives that are related to security.

allow_url_fopen

The allow_url_fopen directive is disabled by default. But when it’s enabled, it allows remote file inclusion in PHP file functions. This means that your PHP files can include code from other servers. Be wary about enabling this—if your code is subject to an injection attack, remote file inclusion will make it much easier for a malicious user to hijack your server.

allow_url_include

The allow_url_include directive is similar to the allow_url_fopen directive, but it enables remote file inclusion in include functions. It allows you to include remote files in the include, include_once, require, and require_once functions.

If you want to enable this directive, you need to make sure that you’ve enabled the allow_url_fopen directive as well.

Session Directives

Session management is one of the most important aspects when you’re working with PHP. In this section, we’ll go through a couple of important session directives.

session.name

The session.name directive allows you to set the name of the session cookie. By default, it is set to PHPSESSID, but you can change it to something else by using this directive.

session.auto_start

If you set the value of the session.auto_start directive to 1, the session module in PHP starts a session automatically on every request, and thus you don’t have to use the session_start function in your scripts.

session.cookie_lifetime

The session.cookie_lifetime directive allows you to set the lifetime of a session cookie. By default, it is set to 0 seconds, and it means that the session cookie is deleted when the browser is closed. This is a really useful setting which allows you to set up a «remember me» kind of functionality, allowing your users to pick up where they left off on your site.

Miscellaneous Directives

In this last section, we’ll see a couple of other directives that are important in the context of PHP script execution.

memory_limit

The memory_limit directive allows you to limit the maximum amount of memory a script is allowed to use.

You want to fine-tune this directive as per your requirements, and you should not set this too high to avoid memory outages on your server—poorly written or buggy scripts can eat up all the memory on your server if you let them!

max_execution_time

The max_execution_time directive sets the maximum amount of time a script is allowed to run before it is terminated. The default is 30 seconds, and you can increase it to a reasonable limit as per your requirements if you need to.

Similar to the memory_limit directive, you should not set this too high to avoid issues on your server.

max_input_time

The max_input_time directive allows you to set the maximum amount of time a script is allowed to parse incoming form data from a GET or POST.

If you have forms on your website that submit a large amount of data, you might like to increase the value of this directive.

Conclusion

It’s impossible to cover each and every directive within a single article, but I’ve tried to cover the important ones. Feel free to post your queries if you want to know about any specific directives, and I’ll be happy to help!

As a PHP developer, it’s important that you understand the different directives in the php.ini file, and that should help you to fine-tune your PHP configuration to your requirements.

The Best PHP Scripts on CodeCanyon

Explore thousands of the best and most useful PHP scripts ever created on CodeCanyon. With a low-cost one-time payment, you can purchase these high-quality WordPress themes and improve your website experience for you and your visitors.

Here are a few of the best-selling and up-and-coming PHP scripts available on CodeCanyon for 2020.

Did you find this post useful?

Sajal Soni

Software Engineer, FSPL, India

I’m a software engineer by profession, and I’ve done my engineering in computer science. It’s been around 14 years I’ve been working in the field of website development and open-source technologies.

Primarily, I work on PHP and MySQL-based projects and frameworks. Among them, I’ve worked on web frameworks like CodeIgnitor, Symfony, and Laravel. Apart from that, I’ve also had the chance to work on different CMS systems like Joomla, Drupal, and WordPress, and e-commerce systems like Magento, OpenCart, WooCommerce, and Drupal Commerce.

I also like to attend community tech conferences, and as a part of that, I attended the 2016 Joomla World Conference held in Bangalore (India) and 2018 DrupalCon which was held in Mumbai (India). Apart from this, I like to travel, explore new places, and listen to music!

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

Что такое php.ini ?

Если вы новичок в PHP или опытный разработчик, я уверен, что вы слышали о php.ini : самом важном файле конфигурации PHP.

Когда PHP запускается, он ищет файл php.ini в некоторых определенных местах и ​​загружает его. Этот файл позволяет вам настроить несколько важных параметров, о которых вы должны знать. Довольно часто вы обнаружите, что вам нужно настроить параметры в файле php.ini .

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

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

Где находится php.ini?

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

Здесь на phpinfo() приходит функция phpinfo() . Он скажет вам, где находится php.ini , а также выведет всю важную информацию о конфигурации PHP.

Вы можете запустить phpinfo() , создав файл .php и вызвав эту функцию. Создайте файл phpinfo.php со следующим содержимым и поместите его в корневой каталог документа:

Загрузите этот файл в свой браузер, и вы должны увидеть вывод phpinfo() . Посмотрите на следующий раздел.

Место расположения

Как видите, есть два раздела. Первый, путь к файлу конфигурации (php.ini) , указывает путь по умолчанию для файла php.ini в вашей системе. И второй, Loaded Configuration File , — это путь, из которого загружается файл php.ini при запуске PHP.

Таким образом, вы можете редактировать файл php.ini, указанный в разделе « Загруженный файл конфигурации », и это должно работать в большинстве случаев. Конечно, если вы используете PHP как модуль Apache, вам необходимо перезапустить сервер Apache, чтобы убедиться, что изменения, внесенные вами в файл php.ini , отражены.

С другой стороны, если вы используете программное обеспечение, такое как WAMP или XAMPP, для запуска стека веб-разработки, вам еще проще изменить файл php.ini — вы можете напрямую получить к нему доступ через пользовательский интерфейс WAMP или XAMPP.

В следующем разделе мы рассмотрим несколько важных настроек в файле php.ini .

Важные настройки в php.ini

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

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

  • директивы по обработке ошибок
  • директивы загрузки файлов
  • директивы, связанные с безопасностью
  • директивы сессии
  • разные директивы

Директивы по обработке ошибок

В этом разделе мы рассмотрим директивы, связанные с обработкой ошибок и полезные для отладки во время разработки.

display_errors

Директива display_errors позволяет вам контролировать, будут ли отображаться ошибки на экране во время выполнения скрипта. Вы можете установить его на On если вы хотите, чтобы ошибки отображались на экране, и Off если вы хотите отключить его. Важно, чтобы вы никогда не включали это на рабочем сайте — это замедлит работу вашего сайта и может дать хакерам ценные подсказки к уязвимостям безопасности вашего сайта.

error_reporting

Эта директива позволяет вам установить уровень сообщения об ошибках. В основном эта директива работает в сочетании с директивой display_errors . Эта директива может принимать E_ALL , E_NOTICE , E_STRICT и E_DEPRECATED .

Вы можете установить его на E_ALL если хотите отображать все типы ошибок, такие как фатальные ошибки, предупреждения, устаревшие функции и т. Д. Вы также можете комбинировать различные значения, если вы хотите отфильтровать конкретные ошибки. Например, если вы хотите отобразить все ошибки, кроме уведомлений, вы можете установить для него значение E_ALL & ~E_NOTICE .

error_log

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

Директивы для загрузки файлов

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

file_uploads

Это логическая директива, которая позволяет разрешать загрузку файлов HTTP. Если вы установите значение « On , Вы можете использовать поле «Файл» в своих формах, и пользователи смогут загружать файлы со своего компьютера. С другой стороны, если вы установите для этого параметра значение Off , Загрузка файлов будет полностью отключена.

upload_max_filesize

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

По умолчанию установлено значение 2 МБ, поэтому пользователи не могут загружать файлы размером более 2 МБ. Вы можете настроить это значение в соответствии с вашими требованиями — часто вы хотите увеличить это ограничение, чтобы разрешить загрузку больших файлов.

post_max_size

Этот параметр позволяет вам установить максимальный размер данных POST в ваших формах. Когда пользователь отправляет форму методом POST, общий размер данных POST не должен превышать значение, установленное в этой директиве.

Это должно быть больше, чем значение, которое вы установили в директиве upload_max_filesize , поскольку загрузка файлов обрабатывается с помощью запросов POST.

Директивы по безопасности

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

allow_url_fopen

Директива allow_url_fopen по умолчанию отключена. Но когда он включен, он позволяет удаленно включать файлы в функции файлов PHP. Это означает, что ваши PHP-файлы могут содержать код с других серверов. Будьте осторожны при включении этого — если ваш код подвергается атаке с помощью инъекций, удаленное включение файлов значительно облегчит злоумышленнику взлом вашего сервера.

allow_url_include

Директива allow_url_include аналогична директиве allow_url_fopen , но позволяет включить удаленное включение файлов в функции include . Он позволяет включать удаленные файлы в функции include , include_once , require и require_once .

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

Директивы Сессии

Управление сессиями является одним из наиболее важных аспектов при работе с PHP. В этом разделе мы рассмотрим пару важных директив сессии.

session.name

Директива session.name позволяет вам установить имя cookie сессии. По умолчанию он имеет значение PHPSESSID , но вы можете изменить его на что-то другое, используя эту директиву.

session.auto_start

Если вы установите значение директивы session.auto_start равным 1 , сессионный модуль в PHP запускает сессию автоматически при каждом запросе, и, таким образом, вам не нужно использовать функцию session_start в ваших скриптах.

session.cookie_lifetime

Директива session.cookie_lifetime позволяет вам установить время жизни куки сессии. По умолчанию установлено значение 0 секунд, и это означает, что cookie сеанса удаляется при закрытии браузера. Это действительно полезная настройка, которая позволяет вам настроить функцию «помни меня», позволяя пользователям выбирать, где они остановились на вашем сайте.

Разные Директивы

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

memory_limit

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

Вы хотите точно настроить эту директиву в соответствии с вашими требованиями, и вам не следует устанавливать ее слишком высоко, чтобы избежать перебоев с памятью на вашем сервере — плохо написанные или с ошибками скрипты могут поглотить всю память на вашем сервере, если вы позволите им!

max_execution_time

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

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

max_input_time

Директива max_input_time позволяет установить максимальное время, в течение которого скрипту разрешается анализировать входящие данные формы из GET или POST.

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

Вывод

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

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

Лучшие PHP-скрипты на CodeCanyon

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

Вот несколько самых продаваемых и новых PHP-скриптов, доступных в CodeCanyon на 2020 год.

  • PHP

    14 лучших PHP-событий и сценариев бронирования

  • PHP

    8 лучших скриптов PHP URL Shortener

    Эрик Дай

  • PHP

    12 лучших контактных форм PHP-скриптов

    Нона Блэкман

  • PHP

    Сравнение 5 лучших PHP Form Builders

    Нона Блэкман

  • PHP

    Создавайте красивые формы с помощью PHP Form Builder

    Ашраф Хатхибелагал

Файл конфигурации

Файл конфигурации (php.ini)
считывается при запуске PHP. Для версий серверных модулей PHP
это происходит только один раз при запуске веб-сервера. Для
CGI и CLI версий это происходит при
каждом вызове.

Поиск php.ini производится в следующих местах (по порядку поиска):


  • По месту расположения модуля SAPI (PHPIniDir директива
    Apache 2, -c параметр командной строки CGI и CLI)

  • Переменная среды PHPRC.

  • Местоположение файла php.ini
    может быть указано для различных версий PHP. Корневой ключ реестра зависит
    от разрядности операционной системы и установки PHP. Для 32-разрядного PHP на
    32-разрядной Windows или 64-разрядного PHP и 64-разрядной Windows
    используйте [(HKEY_LOCAL_MACHINESOFTWAREPHP]. Для
    32-разрядного PHP на 64-разрядной Windows
    [HKEY_LOCAL_MACHINESOFTWAREWOW6432NodePHP].
    Следующие ключи реестра исследуются при поиске для установок с совпадающей
    разрядностью:
    [HKEY_LOCAL_MACHINESOFTWAREPHPx.y.z],
    [HKEY_LOCAL_MACHINESOFTWAREPHPx.y] и
    [HKEY_LOCAL_MACHINESOFTWAREPHPx], где
    x, y и z подразумевают major, minor и release версии PHP.
    Для 32-разрядного PHP на 64-разрядной Windows ключи реестра будут другими:
    [HKEY_LOCAL_MACHINESOFTWAREWOW6421NodePHPx.y.z],
    [HKEY_LOCAL_MACHINESOFTWAREWOW6421NodePHPx.y] и
    [HKEY_LOCAL_MACHINESOFTWAREWOW6421NodePHPx].
    Если также имеется значение IniFilePath в любом из этих
    ключей, то местонахождение php.ini
    будет определено первым ключом по порядку (только для Windows).

  • [HKEY_LOCAL_MACHINESOFTWAREPHP] или
    [HKEY_LOCAL_MACHINESOFTWAREWOW6432NodePHP], значение
    IniFilePath (только для Windows).

  • Текущая директория (исключая CLI).

  • Директория веб-сервера (для модулей SAPI) или директория PHP
    (иначе в Windows).

  • В директории Windows (C:windows
    или C:winnt) (для Windows) или
    --with-config-file-path с выбором при компиляции.

Если файл php-SAPI.ini существует (где SAPI — это тип интерфейса, который используется,
например, php-cli.ini или
php-apache.ini), то он используется вместо php.ini.
Тип интерфейса между веб-сервером и PHP может быть определён с помощью функции php_sapi_name().

Замечание:

Веб-сервер Apache изменяет текущую директорию на корневую при запуске, в
результате чего PHP считывает php.ini из корневой файловой системы, если файл существует.

В php.ini можно использовать переменные окружения, как показано ниже.

Пример #1 Переменные окружения php.ini

; PHP_MEMORY_LIMIT взята из переменных окружения
memory_limit = ${PHP_MEMORY_LIMIT}

Директивы php.ini, обрабатываемые модулями, описаны на соответствующих
страницах модулей. Список директив ядра
имеется в приложении. Не все директивы PHP документированы в этом руководстве:
для ознакомления с полным списком директив доступных в вашей версии PHP,
прочитайте комментарии вашего php.ini.
Кроме того, вы можете найти полезной
» последнюю версию php.ini из Git.

Пример #2 Пример php.ini

; любой текст в строке после точки с запятой (;) без кавычек игнорируется
[php] ; маркеры разделов (текст в квадратных скобках) также игнорируется
; Могут быть установлены следующие логические значения:
;    true, on, yes
; или false, off, no, none
register_globals = off
track_errors = yes

; вы можете заключать строки в двойные кавычки
include_path = ".:/usr/local/lib/php"

; обратный слеш обрабатывается так же, как любые другие символы
include_path = ".;c:phplib"

Возможно обращаться к существующим ini-переменным из
ini-файлов. Пример: open_basedir = ${open_basedir}
":/new/dir"
.

Сканирование директорий

Существует возможность сконфигурировать PHP для сканирования директорий
в поисках .ini-файлов после считывания php.ini. Это можно сделать
на моменте компиляции, указав опцию —with-config-file-scan-dir.
Сканирование директорий может быть переопределено
во время исполнения установкой переменной среды PHP_INI_SCAN_DIR.

Можно сканировать несколько директорий, разделяя их разделителем,
используемом в вашей операционной системе (; в Windows, NetWare
и RISC OS; : на всех остальных платформах; в PHP есть
константа PATH_SEPARATOR, которую можно использовать)
Если PHP_INI_SCAN_DIR пуста, то PHP также будет
сканировать директорию, заданную на этапе компиляции с помощью
—with-config-file-scan-dir.

В каждой директории PHP сканирует все файлы заканчивающиеся на .ini
в алфавитном порядке. Список всех загруженных файлов в том порядке,
в котором они были загружены, доступен с помощью функции
php_ini_scanned_files(), либо при запуске PHP с опцией —ini.

Допустим, что PHP сконфигурирован с --with-config-file-scan-dir=/etc/php.d,
и разделитель путей :...

$ php
  PHP загрузит все файлы /etc/php.d/*.ini как конфигурационные.

$ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php
  PHP загрузит все файлы /usr/local/etc/php.d/*.ini как конфигурационные.

$ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php
  PHP загрузит все файлы /etc/php.d/*.ini, а потом
  /usr/local/etc/php.d/*.ini как конфигурационные.

$ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php
  PHP загрузит все файлы /usr/local/etc/php.d/*.ini, а потом
  /etc/php.d/*.ini как конфигурационные.

weili

1 year ago


For someone who's also wondering.

PHP can work even if there is no configuration file(php.ini) loaded,
it will simply applies the default values to directives.


ohcc at 163 dot com

6 years ago


in php.ini you can reference to an existing directive or an environment variable using the syntax ${varname}.

Here are some examples.

sys_temp_dir = "${WINDIR}"

--- ${WINDIR} will be replaced by $_ENV['WINDIR'] at runtime

--- you can set environment variables by Apache and use them in php.ini
--- FcgidInitialEnv AUTHOR "WUXIANCHENG"
--- error_log = "${AUTHOR}.log"

error_log = "${sys_temp_dir}"

--- ${sys_temp_dir} will be replace by the value of sys_temp_dir

Also you can use PHP constants in php.ini, but DONT'T wrap them in ${} or "".

error_log = "/data/"PHP_VERSION"/"

---  it works like this php code:

$error_log =  "/data/" . PHP_VERSION . "/";


Содержание

  1. Где лежит php ini
  2. Причины для поиска php.ini
  3. Как найти данный файл
  4. Ищем файл настроек PHP в популярных CMS
  5. Расположение php.ini в ОС Linux разных версий и сборок
  6. Как настроить php.ini под свои потребности?
  7. Где находится php.ini, файл конфигурации PHP?
  8. Где находится php.ini?
  9. Важные настройки в php.ini
  10. Директивы по обработке ошибок
  11. display_errors
  12. error_reporting
  13. Установка
  14. Все о файле php.ini
  15. Где находится php.ini?
  16. Как настроить php.ini?
  17. Общие настройки
  18. Ограничение ресурсов
  19. Обработка ошибок и журналы
  20. Обработка данных
  21. Загрузка файлов
  22. Работа с сокетами
  23. Сессии
  24. Динамические расширения
  25. Работа с модулями MySQL
  26. Если вы создали собственный файл php.ini и поместили его в папке сайта
  27. Установка в системах Windows
  28. Содержание
  29. User Contributed Notes 12 notes

Где лежит php ini

Работа с файлами сайта, размещенного на хостинге или собственной виртуальной машине, рано или поздно приведет вас к файлу основных настроек языка PHP. Узнать, где лежит php ini, можно несколькими способами, которые зависят от операционной системы. Если вы уже используете хостинг на Windows или Linux, информация по поиску и использованию данного файла вам пригодится.

Расположение файла редко зависит от того, какой конструктор сайтов или оболочку вы используете. Вордпресс, Джумла и другие оболочки будут использовать стандартный php.ini, доступный в ОС сервера, либо тот, что поставляется вместе с инструментарием Denver.

Причины для поиска php.ini

Изменения в php.ini для сайта производятся тогда, когда нужно расширить или снять ограничения на некоторые операции – например, объем импортируемых или экспортируемых данных. Снятие ограничений полезно, когда вы переносите сайт вместе с его содержимым с одной платформы на другую, так как настройки по умолчанию могут этому помешать. Продвинутые пользователи могут настроить здесь все, что связано с исполнением команд на языке PHP.

Как найти данный файл

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

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

Основное правило при использовании Apache, Denver и других оболочек для виртуального сервера: вы фактически работаете с тем же Linux’ом, поэтому пути находятся стандартными для этой системы (и для самого PHP) способами, и, скорее всего, содержат соответствующие названия в именах папок. Если советы, касающиеся конкретных CMS, не помогли, просто ищите файл стандартным способом через создание страницы с phpinfo().

Ищем файл настроек PHP в популярных CMS

cms

Даже пользователю-новичку может быть нужно найти, где находится php ini в WordPress или Joomla. Эти CMS дружелюбны к новым пользователям, но изменения параметров PHP все равно могут потребоваться по разным причинам. Файл обычно располагается в usrlocalphp5 относительно корневой папки, которую вам предоставляет хостинг, или папки, которая является рабочей для вашего внутреннего сервера. Метод с созданием проверочного файла, описанный выше, отлично работает в этом случае. Сами CMS обычно не вносят изменения в расположение php ini.

Будьте внимательны, когда заказываете хостинг веб сайтов – в некоторых случаях провайдер может ограничить или запретить изменение важных файлов, в том числе конфигурационных файлов PHP. Если возникают проблемы с поиском или открытием файла, есть смысл обратиться в техподдержку хостинга напрямую и уточнить, какие возможности вам доступны. В работе с собственным виртуальным сервером на Denver/Apache вас никто не ограничивает.

Если вы работаете в CMS Bitrix, вы можете и не найти файл настроек PHP в привычных директориях. Файл php ini в Bitrix лежит в разных папках в зависимости от версии самого Битрикса, поэтому создавайте тестовую страничку из первого примера и узнавайте точный путь оттуда. На некоторых хостингах вы можете найти путь /home/login, но туда обычно загружаются собственноручно созданные файлы, исходник для которых берется из /home/login/etc.

Расположение php.ini в ОС Linux разных версий и сборок

ОС Linux считается самой подходящей системой для регулярной работы с хостингом, сайтами на PHP и сопутствующими процессами. Если вы имеете непосредственный доступ к файловой системе сервера (являетесь его владельцем, например), то ищите php.ini по адресам /etc/, /usr/local/lib или /usr/local/php/etc/ – это самые распространенные места. PHP Zend размещает ини файл в /usr/local/Zend/etc/, учтите это, если используете данную оболочку. Вы можете задать и обычный поиск файла в системе, но так вы не узнаете, какой из нескольких файлов php.ini реально используется в данный момент для задания настроек сервера и сайта.

Вряд ли сложным исключением станет сборка ОС на базе Ubuntu. Место, где лежит php.ini в Ubuntu, определяется через phpinfo() и зависит от того, какой именно тип сервера вы используете. Для Apache это может быть /etc/php5/apache2, например. Если файл вовсе не удается обнаружить, то его можно создать вручную или скопировать из другого места, но только если знаете примерную структуру файла.

Как настроить php.ini под свои потребности?

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

Вот некоторые из настроек, которые можно изменить, если владелец хостинга разрешает использовать php.ini и редактировать его самостоятельно:

Эти две строки важны для любого пользователя, желающего снять ограничение на объем загружаемых файлов. Эта настройка проверяется при импорте записей в Вордпресс и другие CMS того же типа, значения по умолчанию в целях безопасности сервера сделаны очень скромными. Если вы точно знаете, что делаете, можете значительно увеличить лимит, либо просто подогнать его под размер импортируемых файлов (если уже знаете их примерный объем).

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

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

Источник

Где находится php.ini, файл конфигурации PHP?

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

Если вы новичок в PHP или опытный разработчик, я уверен, что вы слышали о php.ini : самом важном файле конфигурации PHP.

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

Где находится php.ini?

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

79d96689f5e724604451898e16f64d2a

С другой стороны, если вы используете программное обеспечение, такое как WAMP или XAMPP, для запуска стека веб-разработки, вам еще проще изменить файл php.ini — вы можете напрямую получить к нему доступ через пользовательский интерфейс WAMP или XAMPP.

Важные настройки в php.ini

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

Директивы по обработке ошибок

В этом разделе мы рассмотрим директивы, связанные с обработкой ошибок и полезные для отладки во время разработки.

display_errors

Директива display_errors позволяет вам контролировать, будут ли отображаться ошибки на экране во время выполнения скрипта. Вы можете установить его на On если вы хотите, чтобы ошибки отображались на экране, и Off если вы хотите отключить его. Важно, чтобы вы никогда не включали это на рабочем сайте — это замедлит работу вашего сайта и может дать хакерам ценные подсказки к уязвимостям безопасности вашего сайта.

error_reporting

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

Источник

Установка

Этот раздел содержит общие вопросы о том, как производится установка PHP. Дистрибутивы PHP доступны почти для всех операционных систем и веб-серверов.

Для установки PHP, следуйте инструкциям: Установка и настройка.

Unix: Я установил PHP, но при каждом открытии какого-либо документа вижу ‘Document Contains No Data’, что это значит?

Это значит, что, возможно, PHP столкнулся с какой-то проблемой и падает в core-dump. Просмотрите логи ошибок сервера, чтобы проверить это, а затем попытайтесь воспроизвести цепочку шагов, приведших к ошибке; например, создав отдельную тестовую программу. И если вы умеете пользоваться ‘gdb’, то это поможет вам получить стек вызовов функций (backtrace) для включения его в отчёт об ошибке, чтобы облегчить выявление причин проблемы разработчикам. Если вы пользуетесь PHP как модулем для Apache, вам может оказаться полезным следующее:

Вновь остановите httpd-процессы

Затем скопируйте URL,вызвавший проблему в браузере

Если будет происходить core dump, gdb сообщит вам об этом

Включите backtrace в ваш отчёт об ошибке. И отправьте по адресу: » https://bugs.php.net/

Если ваш скрипт использует регулярные выражения ( preg_match() и подобные), проверьте, с одинаковыми ли пакетами обработки RegEx скомпилированы PHP и Apache? В случае PHP и Apache 1.3.x это происходит автоматически.

Unix: Я установил PHP используя RPMS, но Apache не обрабатывает PHP-страницы, в чём дело?

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

Unix: Я пропатчил Apache модулем FrontPage, и теперь PHP не работает. Т.е. PHP несовместим с модулями Apache FrontPage?

Нет, совместим, но патч FrontPage влияет на структуры Apache, нужные для PHP. Перекомпиляция PHP (команда ‘make clean ; make’) после установки патча может решить проблему.

Unix/Windows: Я установил PHP, но при попытке открыть PHP-файл браузером вижу просто пустой экран.

Выберите в браузере опцию «посмотреть код» и вы, возможно, увидите, ваш PHP-код. Это значит, что Apache не передал ваш скрипт интерпретатору PHP. Значит что-то неправильно с конфигурацией сервера. В этом случае перепроверьте конфигурацию веб-сервера в соответствии с инструкциями по установке PHP.

Unix/Windows: Я установил PHP, но когда пытаюсь посмотреть созданную PHP-страницу через браузер, то получаю ошибку 500.

Некоторые операционные системы: Я установил PHP без каких-либо ошибок, но когда пытаюсь запустить Apache, мне выводится ошибка:

Windows: Я установил PHP, но когда пытаюсь открыть страницу скрипта через браузер, получаю ошибку:

Как я могу понять, что мой php.ini найден и используется? Такое впечатление, что вносимые мною изменения игнорируются.

Как я могу добавить директорию с PHP в PATH в Windows?

Старт → Панель Управления → Система

Перейдите на вкладку ‘Дополнительно’

Нажмите кнопку ‘Переменные Окружения’

Посмотрите раздел ‘Системные Переменные’

Найдите строку, содержащую переменную PATH

Совершите на ней двойной щелчок мышью

Допишите в конец строки путь к PHP, не забыв добавить перед ним ‘;’ (например ;C:php )

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

Можно ли использовать согласование контента Apache (опция MultiViews) с PHP?

PHP ограничен работой только с методами GET и POST?

Источник

Все о файле php.ini

Где находится php.ini?

Местонахождение файла php.ini зависит от операционной системы, на которой работает сервер хостинг-провайдера. Чтобы узнать где он находится выполняем 4 простых шага:

php ini

Как настроить php.ini?

Файл php.ini имеет такие правила синтаксиса «директива = значение». Если вы хотите добавлять комментарии (например, в которых указываете на что влияет данная настройка), то делайте после точки с запятой (все, что идет после этого знака не учитывается как команда). Вот пример:

max_execution_time = 40 ; Максимальное кол-во секунд исполнения скрипта

Далее рассматриваем основные настройки, которые можно сделать в файле php.ini:

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

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

short_open_tag = On ; Разрешает упрощенно обрамлять PHP-код тагами

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 = ; После знака «равно» нужно через запятую записать классы, вызов которых вы хотите запретить (обычно это делается для безопасности)

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

max_execution_time = 40 ; Максимальное время на выполнение скрипта (в секундах)

max_input_time = 40 ; Максимальное время в секундах, которое дается скрипту может на обработку данных, которые загружаются.

memory_limit = 16M ; Максимум памяти, которые выделяется для работы одного скрипта

Обработка ошибок и журналы

error_reporting = E_ALL | E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE ; Указывает перечень ошибок, которые можно выводить.

display_errors = On; Разрешает выводить ошибки прямо в браузер (часто используют для удобства отладки).

display_startup_errors = On ; Ошибки появляющиеся при страрте PHP разрешено показывать.

log_errors = On ; Ошибки разрешено записывать в файл журнала.

log_errors_max_len = 1024 ; Максимальное число символов, которое может составлять длинна журнала.

html_errors = On ; Разрешен вывод сообщений об ошибках в HTML.

error_log = filename ; Задается имя журнала ошибок.

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

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

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 = «./» ; Задается папка, в которой будут хранится динамически загружаемые расширения.

Загрузка файлов

file_uploads = On ; Загрузка файлов на сервер разрешена.

upload_tmp_dir = ; Временная директория для файлов, которые загружаются.

upload_max_filesize = 2M ; Устанавливает максимальный размер файла, который можно загрузить.

Работа с сокетами

user_agent=»PHP» ; Задается переменная USER_AGENT, когда происходит подключение через сокет.

default_socket_timeout = 30 ; Максимальное время на прослушивание сокета (секунды).

Сессии

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

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

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

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

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

Динамические расширения

Работа с модулями MySQL

mysql.allow_persistent = On ; Разрешает устойчивые MySQL-соединения.

mysql.default_port = ; Порт для функции mysql_connect.

mysql.default_socket = ; Имя сокета для локальных соединений MySQL.

mysql.default_host = ; Имя хоста для функции mysql_connect.

mysql.default_user = ; Имя пользователя.

Если вы создали собственный файл php.ini и поместили его в папке сайта

Источник

Установка в системах Windows

Содержание

Установка PHP в современных операционных системах Microsoft Windows и рекомендуемая конфигурация под распространённые веб-серверы.

Официальные релизы PHP для Windows рекомендованы для использования в промышленной эксплуатации. Однако, вы также можете собрать PHP из исходных кодов. Вам потребуется окружение Visual Studio. Обратитесь к разделу » Пошаговое руководство по сборке для получения более полной информации.

Установка PHP на Azure App Services (он же Microsoft Azure, Windows Azure, или (Windows) Azure Web Apps).

User Contributed Notes 12 notes

If you make changes to your PHP.ini file, consider the following.

(I’m running IIS5 on W2K server. I don’t know about 2K3)

PHP will not «take» the changes until the webserver is restarted, and that doesn’t mean through the MMC. Usually folks just reboot. But you can also use the following commands, for a much faster «turnaround». At a command line prompt, type:

and that will stop the webserver service. Then type:

and that will start the webserver service again. MUCH faster than a reboot, and you can check your changes faster as a result with the old:

in your page somewhere.

I wish I could remember where I read this tip; it isn’t anything I came up with.

You can have multiple versions of PHP running on the same Apache server. I have seen many different solutions pointing at achieving this, but most of them required installing additional instances of Apache, redirecting ports/hosts, etc., which was not satisfying for me.
Finally, I have come up with the simplest solution I’ve seen so far, limited to reconfiguring Apache’s httpd.conf.

Here it is (Apache’s httpd.conf contents):

—————————
# replace with your PHP4 directory
ScriptAlias /php4/ «c:/usr/php4/»
# replace with your PHP5 directory
ScriptAlias /php5/ «c:/usr/php5/»

# populate this for every directory with PHP4 code

Action application/x-httpd-php «/php4/php.exe»
# directory where your PHP4 php.ini file is located at
SetEnv PHPRC «c:/usr/php4»

# remember to put this section below the above

# directory where your PHP5 php.ini file is located at
SetEnv PHPRC «c:/usr/php5»

—————————

This solution is not limited to having only two parallel versions of PHP. You can play with httpd.conf contents to have as many PHP versions configured as you want.
You can also use multiple php.ini configuration files for the same PHP version (but for different DocumentRoot subfolders), which might be useful in some cases.

Remember to put your php.ini files in directories specified in lines «SetEnv PHPRC. «, and make sure that there’s no php.ini files in other directories (such as c:windows in Windows).

Hope this helps someone.

If you are installing PHP on Vista just go to David Wang’s blog. http://blogs.msdn.com/david.wang/
archive/2006/06/21/HOWTO-Install-and-Run-PHP-on-IIS7-Part-2.aspx

I made the mistake of setting a ‘wildcard application map’ for PHP on a Windows 2003 / IIS 6.0 / PHP ISAPI installation.

This resulted in «No input file specified» errors whenever I tried to load the default page in my site’s directories. I don’t know why this broke things, but it did.

If anyone has the same problem, this may be the cause.

IIS setup: 403 forbidden error.

Despite this, php version 5.1.4 was being loaded. We renamed 5.1.4’s folder and then PHP was not loading at all.

There were no visible references to 5.1.4 in the IIS configuration, but in the file webConfig.xml, there was a reference to 5.1.4’s isapi under IISFilters.

To fix this problem, we added version 5.2.5’s php5isapi.dll to the ISAPI Filter category for the web site, in the IIS control panel.

I installed by Microsoft Installer, manually, whatever I always received de same error from IIS7.

The IIS7 interface is quite diferent and are not all together like IIS6

The 5.3 version have not any of those files: php5stdll, php5isapi.dll. etc.

The installer puts others files in handlers and I decided to use them as substitutes. Nothing done!

After that, I discovered that installer do not install these files within the sites, but in the root default site configuration of IIS7.

So, I copied the root configuration to my site and them it worked (all others procedures were done e.g. copy php.ini to windows folder)

If you get 404 page not found on Windows/IIS5, have a look at C:SYSTEM32INETSRVURLSCAN

Here’s how to run dual PHP instances with PHP 5.2 and any previous PHP on Windows 2003:

1. Right-click My Computer, go to Advanced tab, and click on Environment Variables.

Add the two installations and their EXT directories to the Path variable. For example, add:
c:php;c:phpext;c:TMASphp;c:tmasphpext;

Then, add the newer PHP version’s directory as a variable called PHPRC. For example:
Variable:PHPRC
Value: C:PHP

Click OK to close the Environment Variables window, and click OK to close System Properties.

2. In registry, under HKEY_LOCAL_MACHINE>SOFTWARE>PHP, add a REG_SZ key called iniFilePath and give it a value
of the directory where the older PHP is installed. For example:
C:TMASPHP

3. In IIS, go to the Web Service Extensions. Add both versions’ ISAPI module separately to the extensions
list, and allow both.

Testing Date: 05.15.09

Background:
For several days now I, as a newbie, have been unsure if I had installed PHP correctly, or not. No matter what I did phpinfo( ) reported «Configuratin File Path» as: “C:WINDOWS”. I was left to wonder what was wrong.

To help resolve the phpinfo() “issue”, I conducted a series of tests using two scripts:

The first is “test-php-ini-loaded.php”; it is stored in c:inetpubwwwroot, and has the following code:

Источник

Установка PHP 8 на Windows 10


Найти дистрибутив PHP можно по адресу https://windows.php.net/download#php-8.1 Выберите версию Thread Safe.

В папке c:WebServerWAMP создайте новую папку PHP и скопируйте туда содержимое архива php-8.1.5 — VS16 x64 Thread Safe (2022-Apr-12 18:12:52) .

Смотрите Дерево каталогов .

Настройка конфигурационного файла php.ini


С помощью Notepad++ открываем php.ini-development в папке c:WebServerWAMPPHP и сохраняем его как  php.ini  , и вносим в него следующие изменения .

Для этого находим строку – 768 :

И заменяем ее на :

extension_dir = "C:WebServerWAMPPHPext"

Теперь найдите строки: Начинается со строки 920 .

;extension=bz2
;extension=curl
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
;extension=pdo_pgsql
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop

И заменим их на :

extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
extension=gmp
extension=intl
extension=imap
;extension=interbase
extension=ldap
extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite
extension=pgsql
extension=shmop

Заменим строки: – начинаются со строки 950.

;extension=soap
;extension=sockets
;extension=sqlite3
;extension=tidy
;extension=xmlrpc
;extension=xsl

На:

extension=soap
extension=sockets
extension=sqlite3
extension=tidy
extension=xmlrpc
extension=xsl

Указываем кодировку по умолчанию . Для этого находим строку – 720 :

;default_charset = "UTF-8"

И меняем ее на :

default_charset = "UTF-8"

Находим строку – 746:

;include_path = ".;c:phpincludes"

И меняем ее на :

include_path = ".;C:WebServerhomeincludes"

Предварительно создадим папку includes в C:WebServerhome
Здесь будут хранится подключаемые файлы PHP .

Заменим строку – 970:

На:

date.timezone = "Europe/Moscow"

Сохраняем и закрываем файл php.ini .
Теперь необходимо вписать поддержку PHP в файл конфигурации сервера Apache . Открываем файл httpd.conf и в конец файла добавим строки :

PHPIniDir "C:/WebServer/WAMP/PHP"
AddHandler application/x-httpd-php .php
LoadModule php_module "C:/WebServer/WAMP/PHP/php8apache2_4.dll"

Сохраняем и закрываем файл httpd.conf .

Настройка переменной среды


Далее необходимо добавить каталог с установленным интерпретатором PHP в переменную PATH операционной системы Windows 10 . Для этого нажмите кнопку Пуск на Windows 10, начните набирать «Изменение системных переменных среды» и откройте соответствующее окно настроек.

Окно path

Изменение системных переменных среды

В открывшемся окне выбираем в самом низу пункт переменные среды .

В следующем открывшемся окне :

path1.png

Выберем пункт path и нажимаем изменить .

В следующем открывшемся окне :

path2

Выбираем пункт создать и в открывшейся строке напишите C:WebServerWAMPPHP и выбираем пункт вверх и подымаем нашу строку к вверху , и нажимаем кнопку Ok , как на рисунке ниже .

path3

Во всех открытых окнах нажимаем Ok , все окна переменной среды path закрываем . После данных изменений следует перезагрузить компьютер .

После перезагрузки компьютера , открываем Notepad++ и набираем следующий код :

<?php
phpinfo();
?>

Сохраняем файл в каталоге c:WEbServerhomewww с названием i.php

В адресной строке Web – браузера набираем : http://localhost/i.php , если вы увидите данные о интерпретаторе PHP , как на рисунке , то значит все настройки сделали правильно и PHP работает .

Версия PHP

Версия PHP

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

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

Понравилась статья? Поделить с друзьями:
  • Photo booth mac os для windows 10
  • Php ini default charset windows 1251
  • Phonon4 dll скачать для windows 7
  • Php header content type text html charset windows 1251
  • Phonon dll скачать для windows 7