xref: /PHP-5.5/win32/install.txt (revision 44b09b80)
1Installing PHP
2     __________________________________________________________________
3
4   Table of Contents
5   Preface
6   1. General Installation Considerations
7   2. Installation on Windows systems
8
9        Manual Installation Steps
10        ActiveScript
11        Microsoft IIS
12        Apache 1.3.x on Microsoft Windows
13        Apache 2.0.x on Microsoft Windows
14        Sun, iPlanet and Netscape servers on Microsoft Windows
15        OmniHTTPd Server
16        Sambar Server on Microsoft Windows
17        Xitami on Microsoft Windows
18        Installation of extensions on Windows
19
20   3. Installation of PECL extensions
21
22        Introduction to PECL Installations
23        Downloading PECL extensions
24        PECL for Windows users
25        Compiling shared PECL extensions with the pecl command
26        Compiling shared PECL extensions with phpize
27        Compiling PECL extensions statically into PHP
28
29   4. Problems?
30
31        Read the FAQ
32        Other problems
33        Bug reports
34
35   5. Runtime Configuration
36
37        The configuration file
38        How to change configuration settings
39
40   6. Installation FAQ
41     __________________________________________________________________
42
43Preface
44
45   These installation instructions were generated from the HTML version of
46   the PHP Manual so formatting and linking have been altered. See the
47   online and updated version at: http://php.net/install.windows
48     __________________________________________________________________
49
50Chapter 1. General Installation Considerations
51
52   Before starting the installation, first you need to know what do you
53   want to use PHP for. There are three main fields you can use PHP, as
54   described in the What can PHP do? section:
55
56     * Websites and web applications (server-side scripting)
57     * Command line scripting
58     * Desktop (GUI) applications
59
60   For the first and most common form, you need three things: PHP itself,
61   a web server and a web browser. You probably already have a web
62   browser, and depending on your operating system setup, you may also
63   have a web server (e.g. Apache on Linux and MacOS X; IIS on Windows).
64   You may also rent webspace at a company. This way, you don't need to
65   set up anything on your own, only write your PHP scripts, upload it to
66   the server you rent, and see the results in your browser.
67
68   In case of setting up the server and PHP on your own, you have two
69   choices for the method of connecting PHP to the server. For many
70   servers PHP has a direct module interface (also called SAPI). These
71   servers include Apache, Microsoft Internet Information Server, Netscape
72   and iPlanet servers. Many other servers have support for ISAPI, the
73   Microsoft module interface (OmniHTTPd for example). If PHP has no
74   module support for your web server, you can always use it as a CGI or
75   FastCGI processor. This means you set up your server to use the CGI
76   executable of PHP to process all PHP file requests on the server.
77
78   If you are also interested to use PHP for command line scripting (e.g.
79   write scripts autogenerating some images for you offline, or processing
80   text files depending on some arguments you pass to them), you always
81   need the command line executable. For more information, read the
82   section about writing command line PHP applications. In this case, you
83   need no server and no browser.
84
85   With PHP you can also write desktop GUI applications using the PHP-GTK
86   extension. This is a completely different approach than writing web
87   pages, as you do not output any HTML, but manage Windows and objects
88   within them. For more information about PHP-GTK, please visit the site
89   dedicated to this extension. PHP-GTK is not included in the official
90   PHP distribution.
91
92   From now on, this section deals with setting up PHP for web servers on
93   Unix and Windows with server module interfaces and CGI executables. You
94   will also find information on the command line executable in the
95   following sections.
96
97   PHP source code and binary distributions for Windows can be found at
98   http://www.php.net/downloads.php. We recommend you to choose a mirror
99   nearest to you for downloading the distributions.
100     __________________________________________________________________
101
102Chapter 2. Installation on Windows systems
103
104   This section applies to Windows 98/Me and Windows NT/2000/XP/2003. PHP
105   will not work on 16 bit platforms such as Windows 3.1 and sometimes we
106   refer to the supported Windows platforms as Win32. Windows 95 is no
107   longer supported as of PHP 4.3.0.
108
109   If you have Microsoft Visual Studio, you can also build PHP from the
110   original source code.
111
112   Once you have PHP installed on your Windows system, you may also want
113   to load various extensions for added functionality.
114
115   Warning
116
117   There are several all-in-one installers over the Internet, but none of
118   those are endorsed by PHP.net, as we believe that the manual
119   installation is the best choice to have your system secure and
120   optimised.
121     __________________________________________________________________
122
123Manual Installation Steps
124
125   This install guide will help you manually install and configure PHP
126   with a web server on Microsoft Windows. To get started you'll need to
127   download the zip binary distribution from the downloads page at
128   http://www.php.net/downloads.php.
129
130   Although there are many all-in-one installation kits, we recommend you
131   take the time to setup PHP yourself as this will provide you with a
132   better understanding of the system, and enables you to install PHP
133   extensions easily when needed.
134
135     Upgrading from a previous PHP version: Previous editions of the
136     manual suggest moving various ini and DLL files into your SYSTEM
137     (i.e. C:\WINDOWS) folder and while this simplifies the installation
138     procedure it makes upgrading difficult. We advise you remove all of
139     these files (like php.ini and PHP related DLLs from the Windows
140     SYSTEM folder) before moving on with a new PHP installation. Be sure
141     to backup these files as you might break the entire system. The old
142     php.ini might be useful in setting up the new PHP as well. And as
143     you'll soon learn, the preferred method for installing PHP is to
144     keep all PHP related files in one directory and have this directory
145     available to your systems PATH.
146
147     MDAC requirements: If you use Microsoft Windows 98/NT4 download the
148     latest version of the Microsoft Data Access Components (MDAC) for
149     your platform. MDAC is available at http://msdn.microsoft.com/data/.
150     This requirement exists because ODBC is built into the distributed
151     Windows binaries.
152
153   The following steps should be completed on all installations before any
154   server specific instructions are performed:
155
156   Extract the distribution file into a directory of your choice. If you
157   are installing PHP 4, extract to C:\, as the zip file expands to a
158   foldername like php-4.3.7-Win32. If you are installing PHP 5, extract
159   to C:\php as the zip file doesn't expand as in PHP 4. You may choose a
160   different location but do not have spaces in the path (like C:\Program
161   Files\PHP) as some web servers will crash if you do.
162
163   The directory structure extracted from the zip is different for PHP
164   versions 4 and 5 and look like as follows:
165
166   Example 2-2. PHP 5 package structure
167c:\php
168   |
169   +--dev
170   |  |
171   |  |-php5ts.lib
172   |
173   +--ext                 -- extension DLLs for PHP
174   |  |
175   |  |-php_bz2.dll
176   |  |
177   |  |-php_cpdf.dll
178   |  |
179   |  |-..
180   |
181   +--extras
182   |  |
183   |  +--mibs             -- support files for SNMP
184   |  |
185   |  +--openssl          -- support files for Openssl
186   |  |
187   |  +--pdf-related      -- support files for PDF
188   |  |
189   |  |-mime.magic
190   |
191   +--pear                -- initial copy of PEAR
192   |
193   |
194   |-go-pear.bat          -- PEAR setup script
195   |
196   |-fdftk.dll
197   |
198   |-..
199   |
200   |-php-cgi.exe          -- CGI executable
201   |
202   |-php-win.exe          -- executes scripts without an opened command prompt
203   |
204   |-php.exe              -- CLI executable - ONLY for command line scripting
205   |
206   |-..
207   |
208   |-php.ini-development  -- development php.ini settings
209   |
210   |-php.ini-production   -- recommended php.ini settings for production
211   |
212   |-php5activescript.dll
213   |
214   |-php5apache.dll
215   |
216   |-php5apache2.dll
217   |
218   |-..
219   |
220   |-php5ts.dll           -- core PHP DLL
221   |
222   |-...
223
224   Notice the differences and similarities. Both PHP 4 and PHP 5 have a
225   CGI executable, a CLI executable, and server modules, but they are
226   located in different folders and/or have different names. While PHP 4
227   packages have the server modules in the sapi folder, PHP 5
228   distributions have no such directory and instead they're in the PHP
229   folder root. The supporting DLLs for the PHP 5 extensions are also not
230   in a separate directory.
231
232     Note: In PHP 4, you should move all files located in the dll and
233     sapi folders to the main folder (e.g. C:\php).
234
235   Here is a list of server modules shipped with PHP 5:
236
237     * sapi/php5apache2_2.dll - Apache 2.2.x module.
238     * sapi/php5apache.dll (php5apache.dll) - Apache 1.x module
239     * sapi/php5apache2.dll (php5apache2.dll) -  - Apache 2.0.x module.
240     * sapi/php5isapi.dll - ISAPI Module for ISAPI compliant web servers
241       like IIS 5.0 or newer. However the FCGI SAPI is recommended with
242       IIS
243     * sapi/php5nsapi.dll (php5nsapi.dll) - Sun/iPlanet/Netscape server
244       module.
245
246   Server modules provide significantly better performance and additional
247   functionality compared to the CGI binary. The FastCGI is significantly
248   more stable and can be faster than the ISAPI module with IIS.
249   The CLI version is designed to let you use PHP for command line
250   scripting. More information about CLI is available in the chapter
251   about using PHP from the command line.
252
253   Warning
254
255   The SAPI modules have been significantly improved as of the 4.1
256   release, however, in older systems you may encounter server errors or
257   other server modules failing, such as ASP.
258
259   The CGI and CLI binaries, and the web server modules all require the
260   php5ts.dll file to be available to them. You have to make
261   sure that this file can be found by your PHP installation. The search
262   order for this DLL is as follows:
263
264     * The same directory from where php.exe is called, or in case you use
265       a SAPI module, the web server's directory (e.g. C:\Program
266       Files\Apache Group\Apache2\bin).
267     * Any directory in your Windows PATH environment variable.
268
269   To make php5ts.dll available you have three options: copy
270   the file to the Windows system directory, copy the file to the web
271   server's directory, or add your PHP directory, C:\php to the PATH. For
272   better maintenance, we advise you to follow the last option, add C:\php
273   to the PATH, because it will be simpler to upgrade PHP in the future.
274   Read more about how to add your PHP directory to PATH in the
275   corresponding FAQ entry (and then don't forget to restart the computer
276   - logoff isn't enough).
277
278   The next step is to set up a valid configuration file for PHP, php.ini.
279   There are two ini files distributed in the zip file, php.ini-development
280   and php.ini-production. We advise you to use php.ini-production,
281   because we optimized the default settings in this file for performance,
282   and security. Read this well documented file carefully because it has
283   changes from php.ini-production that will drastically affect your setup.
284   Some examples are display_errors being off and magic_quotes_gpc being off.
285   In addition to reading these, study the ini settings and set every
286   element manually yourself. If you would like to achieve the best
287   security, then this is the way for you, although PHP works fine with
288   these default ini files. Copy your chosen ini-file to a directory that
289   PHP is able to find and rename it to php.ini. PHP searches for php.ini
290   in the locations described in the Section called The configuration file
291   in Chapter 5 section.
292
293   If you are running Apache 2, the simpler option is to use the PHPIniDir
294   directive (read the installation on Apache 2 page), otherwise your best
295   option is to set the PHPRC environment variable. This process is
296   explained in the following FAQ entry.
297
298     Note: If you're using NTFS on Windows NT, 2000, XP or 2003, make
299     sure that the user running the web server has read permissions to
300     your php.ini (e.g. make it readable by Everyone).
301
302   The following steps are optional:
303
304     * Edit your new php.ini file. If you plan to use OmniHTTPd, do not
305       follow the next step. Set the doc_root to point to your web servers
306       document_root. For example:
307
308doc_root = c:\inetpub\wwwroot // for IIS
309
310doc_root = c:\apache\htdocs // for Apache
311
312     * Choose the extensions you would like to load when PHP starts. See
313       the section about Windows extensions, about how to set up one, and
314       what is already built in. Note that on a new installation it is
315       advisable to first get PHP working and tested without any
316       extensions before enabling them in php.ini.
317
318   PHP is now setup on your system. The next step is to choose a web
319   server, and enable it to run PHP. Choose a web server from the table of
320   contents.
321     __________________________________________________________________
322
323ActiveScript
324
325   This section contains notes specific to the ActiveScript installation.
326
327   ActiveScript is a Windows only SAPI that enables you to use PHP script
328   in any ActiveScript compliant host, like Windows Script Host,
329   ASP/ASP.NET, Windows Script Components or Microsoft Scriptlet control.
330
331   As of PHP 5.0.1, ActiveScript has been moved to the PECL repository.
332   The DLL for this PECL extension may be downloaded from either the PHP
333   Downloads page or from http://pecl4win.php.net/
334
335     Note: You should read the manual installation steps first!
336
337   After installing PHP, you should download the ActiveScript DLL
338   (php5activescript.dll) and place it in the main PHP folder (e.g.
339   C:\php).
340
341   After having all the files needed, you must register the DLL on your
342   system. To achieve this, open a Command Prompt window (located in the
343   Start Menu). Then go to your PHP directory by typing something like cd
344   C:\php. To register the DLL just type regsvr32 php5activescript.dll.
345
346   To test if ActiveScript is working, create a new file, named test.wsf
347   (the extension is very important) and type:
348<job id="test">
349
350 <script language="PHPScript">
351  $WScript->Echo("Hello World!");
352 </script>
353
354</job>
355
356   Save and double-click on the file. If you receive a little window
357   saying "Hello World!" you're done.
358
359     Note: In PHP 4, the engine was named 'ActivePHP', so if you are
360     using PHP 4, you should replace 'PHPScript' with 'ActivePHP' in the
361     above example.
362
363     Note: ActiveScript doesn't use the default php.ini file. Instead, it
364     will look only in the same directory as the .exe that caused it to
365     load. You should create php-activescript.ini and place it in that
366     folder, if you wish to load extensions, etc.
367     __________________________________________________________________
368
369Microsoft IIS
370
371   This section contains notes and hints specific to IIS (Microsoft
372   Internet Information Server).
373
374   Warning
375
376   By using the CGI setup, your server is open to several possible
377   attacks. Please read our CGI security section to learn how to defend
378   yourself from those attacks.
379     __________________________________________________________________
380
381General considerations for all installations of PHP with IIS
382
383     * First, read the Manual Installation Instructions. Do not skip this
384       step as it provides crucial information for installing PHP on
385       Windows.
386     * CGI users must set the cgi.force_redirect PHP directive to 0 inside
387       php.ini. Read the faq on cgi.force_redirect for important details.
388       Also, CGI users may want to set the cgi.redirect_status_env
389       directive. When using directives, be sure these directives aren't
390       commented out inside php.ini.
391     * The PHP 4 CGI is named php.exe while in PHP 5 it's php-cgi.exe. In
392       PHP 5, php.exe is the CLI, and not the CGI.
393     * Modify the Windows PATH environment variable to include the PHP
394       directory. This way the PHP DLL files and PHP executables can all
395       remain in the PHP directory without cluttering up the Windows
396       system directory. For more details, see the FAQ on Setting the
397       PATH.
398     * The IIS user (usually IUSR_MACHINENAME) needs permission to read
399       various files and directories, such as php.ini, docroot, and the
400       session tmp directory.
401     * Be sure the extension_dir and doc_root PHP directives are
402       appropriately set in php.ini. These directives depend on the system
403       that PHP is being installed on. In PHP 4, the extension_dir is
404       extensions while with PHP 5 it's ext. So, an example PHP 5
405       extensions_dir value is "c:\php\ext" and an example IIS doc_root
406       value is "c:\Inetpub\wwwroot".
407     * PHP extension DLL files, such as php_mysql.dll and php_curl.dll,
408       are found in the zip package of the PHP download. In PHP 5, many
409       extensions are part of PECL and can be downloaded in the
410       "Collection of PECL modules" package. Files such as php_zip.dll and
411       php_ssh2.dll. Download PHP files here.
412     * When defining the executable, the 'check that file exists' box may
413       also be checked. For a small performance penalty, the IIS
414       will check that the script file exists and sort out authentication
415       before firing up PHP. This means that the web server will provide
416       sensible 404 style error messages instead of CGI errors complaining
417       that PHP did not output any data.
418     __________________________________________________________________
419
420Windows NT/200x/XP and IIS 4 or newer
421
422   PHP may be installed as a CGI binary, or with the ISAPI module. In
423   either case, you need to start the Microsoft Management Console (may
424   appear as 'Internet Services Manager', either in your Windows NT 4.0
425   Option Pack branch or the Control Panel=>Administrative Tools under
426   Windows 2000/XP). Then right click on your Web server node (this will
427   most probably appear as 'Default Web Server'), and select 'Properties'.
428
429   If you want to use the CGI binary, do the following:
430
431     * Under 'Home Directory', 'Virtual Directory', or 'Directory', do the
432       following:
433     * Change the Execute Permissions to 'Scripts only'
434     * Click on the 'Configuration' button, and choose the Application
435       Mappings tab. Click Add and set the Executable path to the
436       appropriate CGI file. An example PHP 5 value is: C:\php\php-cgi.exe
437       Supply .php as the extension. Leave 'Method exclusions' blank, and
438       check the 'Script engine' checkbox. Now, click OK a few times.
439     * Set up the appropriate security. (This is done in Internet Service
440       Manager), and if your NT Server uses NTFS file system, add execute
441       rights for I_USR_ to the directory that contains php.exe /
442       php-cgi.exe.
443
444   To use the ISAPI module, do the following:
445
446     * If you don't want to perform HTTP Authentication using PHP, you can
447       (and should) skip this step. Under ISAPI Filters, add a new ISAPI
448       filter. Use PHP as the filter name, and supply a path to the
449       php5isapi.dll.
450     * Under 'Home Directory', 'Virtual Directory', or 'Directory', do the
451       following:
452     * Change the Execute Permissions to 'Scripts only'
453     * Click on the 'Configuration' button, and choose the Application
454       Mappings tab. Click Add and set the Executable path to the
455       appropriate ISAPI DLL. An example PHP 5 value is:
456       C:\php\php5isapi.dll Supply .php as the extension. Leave 'Method
457       exclusions' blank, and check the 'Script engine' checkbox. Now,
458       click OK a few times.
459     * Stop IIS completely (NET STOP iisadmin)
460     * Start IIS again (NET START w3svc)
461
462   With IIS 6 (2003 Server), open up the IIS Manager, go to Web Service
463   Extensions, choose "Add a new Web service extension", enter in a name
464   such as PHP, choose the Add button and for the value browse to either
465   the ISAPI file (php5isapi.dll) or CGI (php.exe or
466   php-cgi.exe) then check "Set extension status to Allowed" and click OK.
467
468   In order to use index.php as a default content page, do the following:
469   From within the Documents tab, choose Add. Type in index.php and click
470   OK. Adjust the order by choosing Move Up or Move Down. This is similar
471   to setting DirectoryIndex with Apache.
472
473   The steps above must be repeated for each extension that is to be
474   associated with PHP scripts. .php is the most common although .php3 may
475   be required for legacy applications.
476
477   If you experience 100% CPU usage after some time, turn off the IIS
478   setting Cache ISAPI Application.
479     __________________________________________________________________
480
481Windows and IIS
482
483See http://www.php.net/install.windows
484     __________________________________________________________________
485
486Apache 1.3.x on Microsoft Windows
487
488   This section contains notes and hints specific to Apache 1.3.x installs
489   of PHP on Microsoft Windows systems. There are also instructions and
490   notes for Apache 2 on a separate page.
491
492     Note: Please read the manual installation steps first!
493
494   There are two ways to set up PHP to work with Apache 1.3.x on Windows.
495   One is to use the CGI binary (php.exe for PHP 4 and php-cgi.exe for PHP
496   5), the other is to use the Apache Module DLL. In either case you need
497   to edit your httpd.conf to configure Apache to work with PHP, and then
498   restart the server.
499
500   It is worth noting here that now the SAPI module has been made more
501   stable under Windows, we recommend it's use above the CGI binary, since
502   it is more transparent and secure.
503
504   Although there can be a few variations of configuring PHP under Apache,
505   these are simple enough to be used by the newcomer. Please consult the
506   Apache Documentation for further configuration directives.
507
508   After changing the configuration file, remember to restart the server,
509   for example, NET STOP APACHE followed by NET START APACHE, if you run
510   Apache as a Windows Service, or use your regular shortcuts.
511
512     Note: Remember that when adding path values in the Apache
513     configuration files on Windows, all backslashes such as
514     c:\directory\file.ext must be converted to forward slashes, as
515     c:/directory/file.ext. A trailing slash may also be necessary for
516     directories.
517     __________________________________________________________________
518
519Installing as an Apache module
520
521   You should add the following lines to your Apache httpd.conf file:
522
523   Example 2-3. PHP as an Apache 1.3.x module
524
525   This assumes PHP is installed to c:\php. Adjust the path if this is not
526   the case.
527
528   For PHP 5:
529# Add to the end of the LoadModule section
530LoadModule php5_module "C:/php/php5apache.dll"
531
532# Add to the end of the AddModule section
533AddModule mod_php5.c
534
535   For both:
536# Add this line inside the <IfModule mod_mime.c> conditional brace
537AddType application/x-httpd-php .php
538
539# For syntax highlighted .phps files, also add
540AddType application/x-httpd-php-source .phps
541     __________________________________________________________________
542
543Installing as a CGI binary
544
545   If you unzipped the PHP package to C:\php\ as described in the Manual
546   Installation Steps section, you need to insert these lines to your
547   Apache configuration file to set up the CGI binary:
548
549   Example 2-4. PHP and Apache 1.3.x as CGI
550ScriptAlias /php/ "c:/php/"
551AddType application/x-httpd-php .php
552
553# For PHP 4
554Action application/x-httpd-php "/php/php.exe"
555
556# For PHP 5
557Action application/x-httpd-php "/php/php-cgi.exe"
558
559# specify the directory where php.ini is
560SetEnv PHPRC C:/php
561
562   Note that the second line in the list above can be found in the actual
563   versions of httpd.conf, but it is commented out. Remember also to
564   substitute the c:/php/ for your actual path to PHP.
565
566   Warning
567
568   By using the CGI setup, your server is open to several possible
569   attacks. Please read our CGI security section to learn how to defend
570   yourself from those attacks.
571
572   If you would like to present PHP source files syntax highlighted, there
573   is no such convenient option as with the module version of PHP. If you
574   chose to configure Apache to use PHP as a CGI binary, you will need to
575   use the highlight_file() function. To do this simply create a PHP
576   script file and add this code: <?php
577   highlight_file('some_php_script.php'); ?>.
578     __________________________________________________________________
579
580Apache 2.0.x on Microsoft Windows
581
582   This section contains notes and hints specific to Apache 2.0.x installs
583   of PHP on Microsoft Windows systems. We also have instructions and
584   notes for Apache 1.3.x users on a separate page.
585
586     Note: You should read the manual installation steps first!
587
588     Apache 2.2.x Support: Users of Apache 2.2.x may use the
589     documentation below except the appropriate DLL file is named
590     php5apache2_2.dll and it only exists as of PHP 5.2.0. See also
591     http://snaps.php.net/
592
593   Warning
594
595   We do not recommend using a threaded MPM in production with Apache2.
596   Use the prefork MPM instead, or use Apache1. For information on why,
597   read the related FAQ entry on using Apache2 with a threaded MPM
598
599   You are highly encouraged to take a look at the Apache Documentation to
600   get a basic understanding of the Apache 2.0.x Server. Also consider to
601   read the Windows specific notes for Apache 2.0.x before reading on
602   here.
603
604     PHP and Apache 2.0.x compatibility notes: The following versions of
605     PHP are known to work with the most recent version of Apache 2.0.x:
606
607     * PHP 4.3.0 or later available at http://www.php.net/downloads.php.
608     * the latest stable development version. Get the source code
609       http://snaps.php.net/php5-latest.tar.gz or download binaries for
610       Windows http://snaps.php.net/win32/php5-win32-latest.zip.
611     * a prerelease version downloadable from http://qa.php.net/.
612     * you have always the option to obtain PHP through SVN.
613
614     These versions of PHP are compatible to Apache 2.0.40 and later.
615
616     Apache 2.0 SAPI-support started with PHP 4.2.0. PHP 4.2.3 works with
617     Apache 2.0.39, don't use any other version of Apache with PHP 4.2.3.
618     However, the recommended setup is to use PHP 4.3.0 or later with the
619     most recent version of Apache2.
620
621     All mentioned versions of PHP will work still with Apache 1.3.x.
622
623   Warning
624
625   Apache 2.0.x is designed to run on Windows NT 4.0, Windows 2000 or
626   Windows XP. At this time, support for Windows 9x is incomplete. Apache
627   2.0.x is not expected to work on those platforms at this time.
628
629   Download the most recent version of Apache 2.0.x and a fitting PHP
630   version. Follow the Manual Installation Steps and come back to go on
631   with the integration of PHP and Apache.
632
633   There are two ways to set up PHP to work with Apache 2.0.x on Windows.
634   One is to use the CGI binary the other is to use the Apache module DLL.
635   In either case you need to edit your httpd.conf to configure Apache to
636   work with PHP and then restart the server.
637
638     Note: Remember that when adding path values in the Apache
639     configuration files on Windows, all backslashes such as
640     c:\directory\file.ext must be converted to forward slashes, as
641     c:/directory/file.ext. A trailing slash may also be necessary for
642     directories.
643     __________________________________________________________________
644
645Installing as a CGI binary
646
647   You need to insert these three lines to your Apache httpd.conf
648   configuration file to set up the CGI binary:
649
650   Example 2-5. PHP and Apache 2.0 as CGI
651ScriptAlias /php/ "c:/php/"
652AddType application/x-httpd-php .php
653
654# For PHP 4
655Action application/x-httpd-php "/php/php.exe"
656
657# For PHP 5
658Action application/x-httpd-php "/php/php-cgi.exe"
659
660   Warning
661
662   By using the CGI setup, your server is open to several possible
663   attacks. Please read our CGI security section to learn how to defend
664   yourself from those attacks.
665     __________________________________________________________________
666
667Installing as an Apache module
668
669   You need to insert these two lines to your Apache httpd.conf
670   configuration file to set up the PHP module for Apache 2.0:
671
672   Example 2-6. PHP and Apache 2.0 as Module
673
674# For PHP 5 do something like this:
675LoadModule php5_module "c:/php/php5apache2.dll"
676AddType application/x-httpd-php .php
677
678# configure the path to php.ini
679PHPIniDir "C:/php"
680
681     Note: Remember to substitute your actual path to PHP for the c:/php/
682     in the above examples. Take care to use either
683     php5apache2.dll in your LoadModule directive and not php5apache.dll
684     as the latter ones are designed to run with Apache 1.3.x.
685
686     Note: If you want to use content negotiation, read related FAQ.
687
688   Warning
689
690   Don't mix up your installation with DLL files from different PHP
691   versions. You have the only choice to use the DLL's and extensions that
692   ship with your downloaded PHP version.
693     __________________________________________________________________
694
695Sun, iPlanet and Netscape servers on Microsoft Windows
696
697   This section contains notes and hints specific to Sun Java System Web
698   Server, Sun ONE Web Server, iPlanet and Netscape server installs of PHP
699   on Windows.
700
701   From PHP 4.3.3 on you can use PHP scripts with the NSAPI module to
702   generate custom directory listings and error pages. Additional
703   functions for Apache compatibility are also available. For support in
704   current web servers read the note about subrequests.
705     __________________________________________________________________
706
707CGI setup on Sun, iPlanet and Netscape servers
708
709   To install PHP as a CGI handler, do the following:
710
711     * Copy php5ts.dll to your systemroot (the directory where you
712       installed Windows)
713     * Make a file association from the command line. Type the following
714       two lines:
715
716assoc .php=PHPScript
717ftype PHPScript=c:\php\php.exe %1 %*
718
719     * In the Netscape Enterprise Administration Server create a dummy
720       shellcgi directory and remove it just after (this step creates 5
721       important lines in obj.conf and allow the web server to handle
722       shellcgi scripts).
723     * In the Netscape Enterprise Administration Server create a new mime
724       type (Category: type, Content-Type: magnus-internal/shellcgi, File
725       Suffix:php).
726     * Do it for each web server instance you want PHP to run
727
728   More details about setting up PHP as a CGI executable can be found
729   here: http://benoit.noss.free.fr/php/install-php.html
730     __________________________________________________________________
731
732NSAPI setup on Sun, iPlanet and Netscape servers
733
734   To install PHP with NSAPI, do the following:
735
736     * Copy php5ts.dll to your systemroot (the directory where you
737       installed Windows)
738     * Make a file association from the command line. Type the following
739       two lines:
740
741assoc .php=PHPScript
742ftype PHPScript=c:\php\php.exe %1 %*
743
744     * In the Netscape Enterprise Administration Server create a new mime
745       type (Category: type, Content-Type: magnus-internal/x-httpd-php,
746       File Suffix: php).
747     * Edit magnus.conf (for servers >= 6) or obj.conf (for servers < 6)
748       and add the following: You should place the lines after mime types
749       init.
750
751Init fn="load-modules" funcs="php5_init,php5_execute,php5_auth_trans" shlib="c:/
752php/sapi/php5nsapi.dll"
753Init fn="php5_init" LateInit="yes" errorString="Failed to initialise PHP!" [php_
754ini="c:/path/to/php.ini"]
755
756       The php_ini parameter is optional but with it you
757       can place your php.ini in your web server configuration directory.
758     * Configure the default object in obj.conf (for virtual server
759       classes [Sun Web Server 6.0+] in their vserver.obj.conf): In the
760       <Object name="default"> section, place this line necessarily after
761       all 'ObjectType' and before all 'AddLog' lines:
762
763Service fn="php5_execute" type="magnus-internal/x-httpd-php" [inikey=value inike
764y=value ...]
765
766       As additional parameters you can add some special
767       php.ini-values, for example you can set a
768       docroot="/path/to/docroot" specific to the context php5_execute is
769       called. For boolean ini-keys please use 0/1 as value, not
770       "On","Off",... (this will not work correctly), e.g.
771       zlib.output_compression=1 instead of zlib.output_compression="On"
772     * This is only needed if you want to configure a directory that only
773       consists of PHP scripts (same like a cgi-bin directory):
774
775<Object name="x-httpd-php">
776ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
777Service fn=php5_execute [inikey=value inikey=value ...]
778</Object>
779
780       After that you can configure a directory in the Administration
781       server and assign it the style x-httpd-php. All files in it will
782       get executed as PHP. This is nice to hide PHP usage by renaming
783       files to .html.
784     * Restart your web service and apply changes
785     * Do it for each web server instance you want PHP to run
786
787     Note: More details about setting up PHP as an NSAPI filter can be
788     found here: http://benoit.noss.free.fr/php/install-php4.html
789
790     Note: The stacksize that PHP uses depends on the configuration of
791     the web server. If you get crashes with very large PHP scripts, it
792     is recommended to raise it with the Admin Server (in the section
793     "MAGNUS EDITOR").
794     __________________________________________________________________
795
796CGI environment and recommended modifications in php.ini
797
798   Important when writing PHP scripts is the fact that Sun JSWS/Sun ONE
799   WS/iPlanet/Netscape is a multithreaded web server. Because of that all
800   requests are running in the same process space (the space of the web
801   server itself) and this space has only one environment. If you want to
802   get CGI variables like PATH_INFO, HTTP_HOST etc. it is not the correct
803   way to try this in the old PHP 3.x way with getenv() or a similar way
804   (register globals to environment, $_ENV). You would only get the
805   environment of the running web server without any valid CGI variables!
806
807     Note: Why are there (invalid) CGI variables in the environment?
808
809     Answer: This is because you started the web server process from the
810     admin server which runs the startup script of the web server, you
811     wanted to start, as a CGI script (a CGI script inside of the admin
812     server!). This is why the environment of the started web server has
813     some CGI environment variables in it. You can test this by starting
814     the web server not from the administration server. Use the command
815     line as root user and start it manually - you will see there are no
816     CGI-like environment variables.
817     __________________________________________________________________
818
819Special use for error pages or self-made directory listings (PHP >= 4.3.3)
820
821   You can use PHP to generate the error pages for "404 Not Found" or
822   similar. Add the following line to the object in obj.conf for every
823   error page you want to overwrite:
824Error fn="php5_execute" code=XXX script="/path/to/script.php" [inikey=value inik
825ey=value...]
826
827   where XXX is the HTTP error code. Please delete any other Error
828   directives which could interfere with yours. If you want to place a
829   page for all errors that could exist, leave the code parameter out.
830   Your script can get the HTTP status code with $_SERVER['ERROR_TYPE'].
831
832   Another possibility is to generate self-made directory listings. Just
833   create a PHP script which displays a directory listing and replace the
834   corresponding default Service line for type="magnus-internal/directory"
835   in obj.conf with the following:
836Service fn="php5_execute" type="magnus-internal/directory" script="/path/to/scri
837pt.php" [inikey=value inikey=value...]
838
839   For both error and directory listing pages the original URI and
840   translated URI are in the variables $_SERVER['PATH_INFO'] and
841   $_SERVER['PATH_TRANSLATED'].
842     __________________________________________________________________
843
844Note about nsapi_virtual() and subrequests (PHP >= 4.3.3)
845
846   The NSAPI module now supports the nsapi_virtual() function (alias:
847   virtual()) to make subrequests on the web server and insert the result
848   in the web page. The problem is, that this function uses some
849   undocumented features from the NSAPI library.
850
851   Under Unix this is not a problem, because the module automatically
852   looks for the needed functions and uses them if available. If not,
853   nsapi_virtual() is disabled.
854
855   Under Windows limitations in the DLL handling need the use of a
856   automatic detection of the most recent ns-httpdXX.dll file. This is
857   tested for servers till version 6.1. If a newer version of the Sun
858   server is used, the detection fails and nsapi_virtual() is disabled.
859
860   If this is the case, try the following: Add the following parameter to
861   php5_init in magnus.conf/obj.conf:
862   Init fn=php5_init ... server_lib="ns-httpdXX.dll"
863
864   where XX is the correct DLL version number. To get it, look in the
865   server-root for the correct DLL name. The DLL with the biggest filesize
866   is the right one.
867
868   You can check the status by using the phpinfo() function.
869
870     Note: But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!!
871     __________________________________________________________________
872
873OmniHTTPd Server
874
875   This section contains notes and hints specific to OmniHTTPd on Windows.
876
877     Note: You should read the manual installation steps first!
878
879   Warning
880
881   By using the CGI setup, your server is open to several possible
882   attacks. Please read our CGI security section to learn how to defend
883   yourself from those attacks.
884
885   You need to complete the following steps to make PHP work with
886   OmniHTTPd. This is a CGI executable setup. SAPI is supported by
887   OmniHTTPd, but some tests have shown that it is not so stable to use
888   PHP as an ISAPI module.
889
890     Important for CGI users: Read the faq on cgi.force_redirect for
891     important details. This directive needs to be set to 0.
892
893    1. Install OmniHTTPd server.
894    2. Right click on the blue OmniHTTPd icon in the system tray and
895       select Properties
896    3. Click on Web Server Global Settings
897    4. On the 'External' tab, enter: virtual = .php | actual =
898       c:\php\php.exe (use php-cgi.exe if installing PHP 5), and use the
899       Add button.
900    5. On the Mime tab, enter: virtual = wwwserver/stdcgi | actual = .php,
901       and use the Add button.
902    6. Click OK
903
904   Repeat steps 2 - 6 for each extension you want to associate with PHP.
905
906     __________________________________________________________________
907
908Xitami on Microsoft Windows
909
910   This section contains notes and hints specific to Xitami on Windows.
911
912     Note: You should read the manual installation steps first!
913
914   This list describes how to set up the PHP CGI binary to work with
915   Xitami on Windows.
916
917     Important for CGI users: Read the faq on cgi.force_redirect for
918     important details. This directive needs to be set to 0. If you want
919     to use $_SERVER['PHP_SELF'] you have to enable the cgi.fix_pathinfo
920     directive.
921
922   Warning
923
924   By using the CGI setup, your server is open to several possible
925   attacks. Please read our CGI security section to learn how to defend
926   yourself from those attacks.
927
928     * Make sure the web server is running, and point your browser to
929       xitamis admin console (usually http://127.0.0.1/admin), and click
930       on Configuration.
931     * Navigate to the Filters, and put the extension which PHP should
932       parse (i.e. .php) into the field File extensions (.xxx).
933     * In Filter command or script put the path and name of your PHP CGI
934       executable i.e. C:\php\php-cgi.exe.
935     * Press the 'Save' icon.
936     * Restart the server to reflect changes.
937     __________________________________________________________________
938
939Installation of extensions on Windows
940
941   After installing PHP and a web server on Windows, you will probably
942   want to install some extensions for added functionality. You can choose
943   which extensions you would like to load when PHP starts by modifying
944   your php.ini. You can also load a module dynamically in your script
945   using dl().
946
947   The DLLs for PHP extensions are prefixed with php_.
948
949   Many extensions are built into the Windows version of PHP. This means
950   additional DLL files, and the extension directive, are not used to load
951   these extensions. The Windows PHP Extensions table lists extensions
952   that require, or used to require, additional PHP DLL files. Here's a
953   list of built in extensions:
954
955   In PHP 5 (updated PHP 5.0.4), the following changes exist. Built in:
956   DOM, LibXML, Iconv, SimpleXML, SPL and SQLite. And the following are no
957   longer built in: MySQL and Overload.
958
959   The default location PHP searches for extensions is C:\php5 in PHP 5.
960   To change this setting to reflect your setup of PHP edit your php.ini
961   file:
962
963     * You will need to change the extension_dir setting to point to the
964       directory where your extensions lives, or where you have placed
965       your php_*.dll files. For example:
966
967extension_dir = C:\php\extensions
968
969     * Enable the extension(s) in php.ini you want to use by uncommenting
970       the extension=php_*.dll lines in php.ini. This is done by deleting
971       the leading ; from the extension you want to load.
972
973   Example 2-8. Enable Bzip2 extension for PHP-Windows
974// change the following line from ...
975;extension=php_bz2.dll
976
977// ... to
978extension=php_bz2.dll
979
980     * Some of the extensions need extra DLLs to work. Couple of them can
981       be found in the distribution package, in in the main folder in PHP 5,
982       but some, for example Oracle (php_oci8.dll) require DLLs which are
983       not bundled with the distribution package.
984     * Some of these DLLs are not bundled with the PHP distribution. See
985       each extensions documentation page for details. Also, read the
986       manual section titled Installation of PECL extensions for details
987       on PECL. An increasingly large number of PHP extensions are found
988       in PECL, and these extensions require a separate download.
989
990     Note: If you are running a server module version of PHP remember to
991     restart your web server to reflect your changes to php.ini.
992
993   The following table describes some of the extensions available and
994   required additional dlls.
995
996   Table 2-1. PHP Extensions
997   Extension Description Notes
998   php_bz2.dll bzip2 compression functions None
999   php_calendar.dll Calendar conversion functions
1000   php_cpdf.dll ClibPDF functions None
1001   php_crack.dll Crack functions None
1002   php_ctype.dll ctype family functions
1003   php_curl.dll CURL, Client URL library functions Requires: libeay32.dll,
1004   ssleay32.dll (bundled)
1005   php_db.dll DBM functions Deprecated. Use DBA instead (php_dba.dll)
1006   php_dba.dll DBA: DataBase (dbm-style) Abstraction layer functions None
1007   php_dbase.dll dBase functions None
1008   php_dbx.dll dbx functions
1009   php_exif.dll EXIF functions php_mbstring.dll. And, php_exif.dll must be
1010   loaded after php_mbstring.dll in php.ini.
1011   php_fdf.dll FDF: Forms Data Format functions. Requires: fdftk.dll
1012   (bundled)
1013   php_filepro.dll filePro functions Read-only access
1014   php_ftp.dll FTP functions
1015   php_gd2.dll GD library image functions GD2
1016   php_gettext.dll Gettext functions, requires libintl-1.dll,
1017   iconv.dll (bundled).
1018   php_iconv.dll ICONV characterset conversion Requires: iconv.dll
1019   php_imap.dll IMAP POP3 and NNTP functions None
1020   php_interbase.dll InterBase functions Requires: gds32.dll (bundled)
1021   php_ldap.dll LDAP functions requires libeay32.dll, ssleay32.dll (bundled)
1022   php_mbstring.dll Multi-Byte String functions None
1023   php_mcrypt.dll Mcrypt Encryption functions Requires: libmcrypt.dll
1024   php_mime_magic.dll Mimetype functions Requires: magic.mime (bundled)
1025   php_ming.dll Ming functions for Flash None
1026   php_msql.dll mSQL functions Requires: msql.dll (bundled)
1027   php_mssql.dll MSSQL functions Requires: ntwdblib.dll (bundled)
1028   php_mysql.dll MySQL functions PHP >= 5.0.0, requires libmysql.dll
1029   (bundled)
1030   php_mysqli.dll MySQLi functions PHP >= 5.0.0, requires libmysql.dll
1031   (libmysqli.dll in PHP <= 5.0.2) (bundled)
1032   php_oci8.dll Oracle 8 functions Requires: Oracle 8.1+ client libraries
1033   php_openssl.dll OpenSSL functions Requires: libeay32.dll (bundled)
1034   php_oracle.dll Oracle functions Requires: Oracle 7 client libraries
1035   php_pgsql.dll PostgreSQL functions None
1036   php_printer.dll Printer functions None
1037   php_shmop.dll Shared Memory functions None
1038   php_snmp.dll SNMP get and walk functions NT only!
1039   php_soap.dll SOAP functions PHP >= 5.0.0
1040   php_sockets.dll Socket functions None
1041   php_sybase_ct.dll Sybase functions Requires: Sybase client libraries
1042   php_tidy.dll Tidy functions PHP >= 5.0.0
1043   php_tokenizer.dll Tokenizer functions Built in since PHP 4.3.0
1044   php_xmlrpc.dll XML-RPC functions PHP >= 4.2.1 requires: iconv.dll
1045   (bundled)
1046   php_xslt.dll XSLT requires libxslt.dll, iconv.dll (bundled).
1047   php_zip.dll Zip File functions
1048   php_zlib.dll ZLib compression functions
1049     __________________________________________________________________
1050
1051Chapter 3. Installation of PECL extensions
1052
1053Introduction to PECL Installations
1054
1055   PECL is a repository of PHP extensions that are made available to you
1056   via the PEAR packaging system. This section of the manual is intended
1057   to demonstrate how to obtain and install PECL extensions.
1058
1059   These instructions assume /your/phpsrcdir/ is the path to the PHP
1060   source distribution, and that extname is the name of the PECL
1061   extension. Adjust accordingly. These instructions also assume a
1062   familiarity with the pear command. The information in the PEAR manual
1063   for the pear command also applies to the pecl command.
1064
1065   To be useful, a shared extension must be built, installed, and loaded.
1066   The methods described below provide you with various instructions on
1067   how to build and install the extensions, but they do not automatically
1068   load them. Extensions can be loaded by adding an extension directive.
1069   To this php.ini file, or through the use of the dl() function.
1070
1071   When building PHP modules, it's important to have known-good versions
1072   of the required tools (autoconf, automake, libtool, etc.) See the
1073   SVN Instructions for details on the required tools, and required
1074   versions.
1075     __________________________________________________________________
1076
1077Downloading PECL extensions
1078
1079   There are several options for downloading PECL extensions, such as:
1080
1081     * http://pecl.php.net
1082       The PECL web site contains information about the different
1083       extensions that are offered by the PHP Development Team. The
1084       information available here includes: ChangeLog, release notes,
1085       requirements and other similar details.
1086     * pecl download extname
1087       PECL extensions that have releases listed on the PECL web site are
1088       available for download and installation using the pecl command.
1089       Specific revisions may also be specified.
1090     * SVN
1091       Most PECL extensions also reside in SVN. A web-based view may be
1092       seen at http://svn.php.net/pecl/. To download straight from SVN,
1093       the following sequence of commands may be used.
1094
1095$ svn  co http://svn.php.net/repository/pecl/<extname>/trunk
1096
1097     * Windows downloads
1098       Windows users may find compiled PECL binaries by downloading the
1099       Collection of PECL modules from the PHP Downloads page, or by
1100       retrieving a PECL Snapshot or an extension DLL on PECL4WIN. To
1101       compile PHP under Windows, read the appropriate chapter.
1102     __________________________________________________________________
1103
1104PECL for Windows users
1105
1106   As with any other PHP extension DLL, installation is as simple as
1107   copying the PECL extension DLLs into the extension_dir folder and
1108   loading them from php.ini. For example, add the following line to your
1109   php.ini:
1110
1111   extension=php_extname.dll
1112
1113   After doing this, restart the web server.
1114     __________________________________________________________________
1115
1116Compiling shared PECL extensions with the pecl command
1117
1118   PECL makes it easy to create shared PHP extensions. Using the pecl
1119   command, do the following:
1120
1121   $ pecl install extname
1122
1123   This will download the source for extname, compile, and install
1124   extname.so into your extension_dir. extname.so may then be loaded via
1125   php.ini
1126
1127   By default, the pecl command will not install packages that are marked
1128   with the alpha or beta state. If no stable packages are available, you
1129   may install a beta package using the following command:
1130
1131   $ pecl install extname-beta
1132
1133   You may also install a specific version using this variant:
1134
1135   $ pecl install extname-0.1
1136     __________________________________________________________________
1137
1138Compiling shared PECL extensions with phpize
1139
1140   Sometimes, using the pecl installer is not an option. This could be
1141   because you're behind a firewall, or it could be because the extension
1142   you want to install is not available as a PECL compatible package, such
1143   as unreleased extensions from SVN. If you need to build such an
1144   extension, you can use the lower-level build tools to perform the build
1145   manually.
1146
1147   The phpize command is used to prepare the build environment for a PHP
1148   extension. In the following sample, the sources for an extension are in
1149   a directory named extname:
1150
1151$ cd extname
1152$ phpize
1153$ ./configure
1154$ make
1155# make install
1156
1157   A successful install will have created extname.so and put it into the
1158   PHP extensions directory. You'll need to and adjust php.ini and add an
1159   extension=extname.so line before you can use the extension.
1160
1161   If the system is missing the phpize command, and precompiled packages
1162   (like RPM's) are used, be sure to also install the appropriate devel
1163   version of the PHP package as they often include the phpize command
1164   along with the appropriate header files to build PHP and its
1165   extensions.
1166
1167   Execute phpize --help to display additional usage information.
1168     __________________________________________________________________
1169
1170Compiling PECL extensions statically into PHP
1171
1172   You might find that you need to build a PECL extension statically into
1173   your PHP binary. To do this, you'll need to place the extension source
1174   under the php-src/ext/ directory and tell the PHP build system to
1175   regenerate its configure script.
1176
1177$ cd /your/phpsrcdir/ext
1178$ pecl download extname
1179$ gzip -d < extname.tgz | tar -xvf -
1180$ mv extname-x.x.x extname
1181
1182   This will result in the following directory:
1183
1184   /your/phpsrcdir/ext/extname
1185
1186   From here, force PHP to rebuild the configure script, and then build
1187   PHP as normal:
1188
1189$ cd /your/phpsrcdir
1190$ rm configure
1191$ ./buildconf --force
1192$ ./configure --help
1193$ ./configure --with-extname --enable-someotherext --with-foobar
1194$ make
1195$ make install
1196
1197     Note: To run the 'buildconf' script you need autoconf 2.13 and
1198     automake 1.4+ (newer versions of autoconf may work, but are not
1199     supported).
1200
1201   Whether --enable-extname or --with-extname is used depends on the
1202   extension. Typically an extension that does not require external
1203   libraries uses --enable. To be sure, run the following after buildconf:
1204
1205   $ ./configure --help | grep extname
1206     __________________________________________________________________
1207
1208Chapter 4. Problems?
1209
1210Read the FAQ
1211
1212   Some problems are more common than others. The most common ones are
1213   listed in the PHP FAQ, part of this manual.
1214     __________________________________________________________________
1215
1216Other problems
1217
1218   If you are still stuck, someone on the PHP installation mailing list
1219   may be able to help you. You should check out the archive first, in
1220   case someone already answered someone else who had the same problem as
1221   you. The archives are available from the support page on
1222   http://www.php.net/support.php. To subscribe to the PHP installation
1223   mailing list, send an empty mail to
1224   php-install-subscribe@lists.php.net. The mailing list address is
1225   php-install@lists.php.net.
1226
1227   If you want to get help on the mailing list, please try to be precise
1228   and give the necessary details about your environment (which operating
1229   system, what PHP version, what web server, if you are running PHP as
1230   CGI or a server module, safe mode, etc...), and preferably enough code
1231   to make others able to reproduce and test your problem.
1232     __________________________________________________________________
1233
1234Bug reports
1235
1236   If you think you have found a bug in PHP, please report it. The PHP
1237   developers probably don't know about it, and unless you report it,
1238   chances are it won't be fixed. You can report bugs using the
1239   bug-tracking system at http://bugs.php.net/. Please do not send bug
1240   reports in mailing list or personal letters. The bug system is also
1241   suitable to submit feature requests.
1242
1243   Read the How to report a bug document before submitting any bug
1244   reports!
1245     __________________________________________________________________
1246
1247Chapter 5. Runtime Configuration
1248
1249The configuration file
1250
1251   The configuration file (called php3.ini in PHP 3, and simply php.ini as
1252   of PHP 4) is read when PHP starts up. For the server module versions of
1253   PHP, this happens only once when the web server is started. For the CGI
1254   and CLI version, it happens on every invocation.
1255
1256   php.ini is searched in these locations (in order):
1257
1258     * SAPI module specific location (PHPIniDir directive in Apache 2, -c
1259       command line option in CGI and CLI, php_ini parameter in NSAPI,
1260       PHP_INI_PATH environment variable in THTTPD)
1261     * The PHPRC environment variable. Before PHP 5.2.0 this was checked
1262       after the registry key mentioned below.
1263     * As of PHP 5.2.0, the following registry locations are searched in
1264       order: HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z\IniFilePath,
1265       HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y\IniFilePath and
1266       HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x\IniFilePath, where x, y and z
1267       mean the PHP major, minor and release versions.
1268     * HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath (Windows Registry
1269       location)
1270     * Current working directory (except CLI)
1271     * The web server's directory (for SAPI modules), or directory of PHP
1272       (otherwise in Windows)
1273     * Windows directory (C:\windows or C:\winnt) (for Windows), or
1274       --with-config-file-path compile time option
1275
1276   If php-SAPI.ini exists (where SAPI is used SAPI, so the filename is
1277   e.g. php-cli.ini or php-apache.ini), it's used instead of php.ini. SAPI
1278   name can be determined by php_sapi_name().
1279
1280     Note: The Apache web server changes the directory to root at startup
1281     causing PHP to attempt to read php.ini from the root filesystem if
1282     it exists.
1283
1284   The php.ini directives handled by extensions are documented
1285   respectively on the pages of the extensions themselves. The list of the
1286   core directives is available in the appendix. Probably not all PHP
1287   directives are documented in the manual though. For a complete list of
1288   directives available in your PHP version, please read your well
1289   commented php.ini file. Alternatively, you may find the latest
1290   php.ini from SVN helpful too.
1291
1292   Example 5-1. php.ini example
1293; any text on a line after an unquoted semicolon (;) is ignored
1294[php] ; section markers (text within square brackets) are also ignored
1295; Boolean values can be set to either:
1296;    true, on, yes
1297; or false, off, no, none
1298html_errors = off
1299track_errors = yes
1300
1301; you can enclose strings in double-quotes
1302include_path = ".:/usr/local/lib/php"
1303
1304; backslashes are treated the same as any other character
1305include_path = ".;c:\php\lib"
1306
1307   Since PHP 5.1.0, it is possible to refer to existing .ini variables
1308   from within .ini files. Example: open_basedir = ${open_basedir}
1309   ":/new/dir".
1310     __________________________________________________________________
1311
1312How to change configuration settings
1313
1314Running PHP as an Apache module
1315
1316   When using PHP as an Apache module, you can also change the
1317   configuration settings using directives in Apache configuration files
1318   (e.g. httpd.conf) and .htaccess files. You will need "AllowOverride
1319   Options" or "AllowOverride All" privileges to do so.
1320
1321   With PHP 4 and PHP 5, there are several Apache directives that allow
1322   you to change the PHP configuration from within the Apache
1323   configuration files. For a listing of which directives are PHP_INI_ALL,
1324   PHP_INI_PERDIR, or PHP_INI_SYSTEM, have a look at the List of php.ini
1325   directives appendix.
1326
1327     Note: With PHP 3, there are Apache directives that correspond to
1328     each configuration setting in the php3.ini name, except the name is
1329     prefixed by "php3_".
1330
1331   php_value name value
1332          Sets the value of the specified directive. Can be used only with
1333          PHP_INI_ALL and PHP_INI_PERDIR type directives. To clear a
1334          previously set value use none as the value.
1335
1336     Note: Don't use php_value to set boolean values. php_flag (see
1337     below) should be used instead.
1338
1339   php_flag name on|off
1340          Used to set a boolean configuration directive. Can be used only
1341          with PHP_INI_ALL and PHP_INI_PERDIR type directives.
1342
1343   php_admin_value name value
1344          Sets the value of the specified directive. This can not be used
1345          in .htaccess files. Any directive type set with php_admin_value
1346          can not be overridden by .htaccess or virtualhost directives. To
1347          clear a previously set value use none as the value.
1348
1349   php_admin_flag name on|off
1350          Used to set a boolean configuration directive. This can not be
1351          used in .htaccess files. Any directive type set with
1352          php_admin_flag can not be overridden by .htaccess or virtualhost
1353          directives.
1354
1355   Example 5-2. Apache configuration example
1356<IfModule mod_php5.c>
1357  php_value include_path ".:/usr/local/lib/php"
1358  php_admin_flag engine on
1359</IfModule>
1360
1361   Caution
1362
1363   PHP constants do not exist outside of PHP. For example, in httpd.conf
1364   you can not use PHP constants such as E_ALL or E_NOTICE to set the
1365   error_reporting directive as they will have no meaning and will
1366   evaluate to 0. Use the associated bitmask values instead. These
1367   constants can be used in php.ini
1368     __________________________________________________________________
1369
1370Changing PHP configuration via the Windows registry
1371
1372   When running PHP on Windows, the configuration values can be modified
1373   on a per-directory basis using the Windows registry. The configuration
1374   values are stored in the registry key HKLM\SOFTWARE\PHP\Per Directory
1375   Values, in the sub-keys corresponding to the path names. For example,
1376   configuration values for the directory c:\inetpub\wwwroot would be
1377   stored in the key HKLM\SOFTWARE\PHP\Per Directory
1378   Values\c\inetpub\wwwroot. The settings for the directory would be
1379   active for any script running from this directory or any subdirectory
1380   of it. The values under the key should have the name of the PHP
1381   configuration directive and the string value. PHP constants in the
1382   values are not parsed. However, only configuration values changeable in
1383   PHP_INI_USER can be set this way, PHP_INI_PERDIR values can not.
1384     __________________________________________________________________
1385
1386Other interfaces to PHP
1387
1388   Regardless of how you run PHP, you can change certain values at runtime
1389   of your scripts through ini_set(). See the documentation on the
1390   ini_set() page for more information.
1391
1392   If you are interested in a complete list of configuration settings on
1393   your system with their current values, you can execute the phpinfo()
1394   function, and review the resulting page. You can also access the values
1395   of individual configuration directives at runtime using ini_get() or
1396   get_cfg_var().
1397     __________________________________________________________________
1398
1399Chapter 6. Installation FAQ
1400
1401   This section holds common questions about the way to install PHP. PHP
1402   is available for almost any OS (except maybe for MacOS before OSX), and
1403   almost any web server.
1404
1405   To install PHP, follow the instructions in Installing PHP.
1406
1407   1. Why shouldn't I use Apache2 with a threaded MPM in a production
1408          environment?
1409
1410   2. Unix/Windows: Where should my php.ini file be located?
1411   3. Unix: I installed PHP, but every time I load a document, I get the
1412          message 'Document Contains No Data'! What's going on here?
1413
1414   4. Unix: I installed PHP using RPMS, but Apache isn't processing the
1415          PHP pages! What's going on here?
1416
1417   5. Unix: I installed PHP 3 using RPMS, but it doesn't compile with the
1418          database support I need! What's going on here?
1419
1420   6. Unix: I patched Apache with the FrontPage extensions patch, and
1421          suddenly PHP stopped working. Is PHP incompatible with the
1422          Apache FrontPage extensions?
1423
1424   7. Unix/Windows: I have installed PHP, but when I try to access a PHP
1425          script file via my browser, I get a blank screen.
1426
1427   8. Unix/Windows: I have installed PHP, but when try to access a PHP
1428          script file via my browser, I get a server 500 error.
1429
1430   9. Some operating systems: I have installed PHP without errors, but
1431          when I try to start apache I get undefined symbol errors:
1432
1433[mybox:user /src/php5] root# apachectl configtest
1434 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
1435  _compress
1436  _uncompress
1437
1438   10. Windows: I have installed PHP, but when I to access a PHP script
1439          file via my browser, I get the error:
1440
1441cgi error:
1442 The specified CGI application misbehaved by not
1443 returning a complete set of HTTP headers.
1444 The headers it did return are:
1445
1446   11. Windows: I've followed all the instructions, but still can't get
1447          PHP and IIS to work together!
1448
1449   12. When running PHP as CGI with IIS, OmniHTTPD or Xitami, I get
1450          the following error: Security Alert! PHP CGI cannot be accessed
1451          directly..
1452
1453   13. How do I know if my php.ini is being found and read? It seems like
1454          it isn't as my changes aren't being implemented.
1455
1456   14. How do I add my PHP directory to the PATH on Windows?
1457   15. How do I make the php.ini file available to PHP on windows?
1458   16. Is it possible to use Apache content negotiation (MultiViews
1459          option) with PHP?
1460
1461   17. Is PHP limited to process GET and POST request methods only?
1462
1463   1. Why shouldn't I use Apache2 with a threaded MPM in a production
1464   environment?
1465
1466   PHP is glue. It is the glue used to build cool web applications by
1467   sticking dozens of 3rd-party libraries together and making it all
1468   appear as one coherent entity through an intuitive and easy to learn
1469   language interface. The flexibility and power of PHP relies on the
1470   stability and robustness of the underlying platform. It needs a working
1471   OS, a working web server and working 3rd-party libraries to glue
1472   together. When any of these stop working PHP needs ways to identify the
1473   problems and fix them quickly. When you make the underlying framework
1474   more complex by not having completely separate execution threads,
1475   completely separate memory segments and a strong sandbox for each
1476   request to play in, feet of clay are introduced into PHP's system.
1477
1478   If you feel you have to use a threaded MPM, look at a FastCGI
1479   configuration where PHP is running in its own memory space.
1480
1481   And finally, this warning against using a threaded MPM is not as strong
1482   for Windows systems because most libraries on that platform tend to be
1483   threadsafe.
1484
1485   2. Unix/Windows: Where should my php.ini file be located?
1486
1487   By default on Unix it should be in /usr/local/lib which is
1488   <install-path>/lib. Most people will want to change this at
1489   compile-time with the --with-config-file-path flag. You would, for
1490   example, set it with something like:
1491   --with-config-file-path=/etc
1492
1493   And then you would copy php.ini-production from the distribution to
1494   /etc/php.ini and edit it to make any local changes you want.
1495   --with-config-file-scan-dir=PATH
1496
1497   On Windows the default path for the php.ini file is the Windows
1498   directory. If you're using the Apache webserver, php.ini is first
1499   searched in the Apaches install directory, e.g. c:\program files\apache
1500   group\apache. This way you can have different php.ini files for
1501   different versions of Apache on the same machine.
1502
1503   See also the chapter about the configuration file.
1504
1505   3. Unix: I installed PHP, but every time I load a document, I get the
1506   message 'Document Contains No Data'! What's going on here?
1507
1508   This probably means that PHP is having some sort of problem and is
1509   core-dumping. Look in your server error log to see if this is the case,
1510   and then try to reproduce the problem with a small test case. If you
1511   know how to use 'gdb', it is very helpful when you can provide a
1512   backtrace with your bug report to help the developers pinpoint the
1513   problem. If you are using PHP as an Apache module try something like:
1514
1515     * Stop your httpd processes
1516     * gdb httpd
1517     * Stop your httpd processes
1518     * > run -X -f /path/to/httpd.conf
1519     * Then fetch the URL causing the problem with your browser
1520     * > run -X -f /path/to/httpd.conf
1521     * If you are getting a core dump, gdb should inform you of this now
1522     * type: bt
1523     * You should include your backtrace in your bug report. This should
1524       be submitted to http://bugs.php.net/
1525
1526   If your script uses the regular expression functions (ereg() and
1527   friends), you should make sure that you compiled PHP and Apache with
1528   the same regular expression package. This should happen automatically
1529   with PHP and Apache 1.3.x
1530
1531   4. Unix: I installed PHP using RPMS, but Apache isn't processing the
1532   PHP pages! What's going on here?
1533
1534   Assuming you installed both Apache and PHP from RPM packages, you need
1535   to uncomment or add some or all of the following lines in your
1536   httpd.conf file:
1537# Extra Modules
1538AddModule mod_php.c
1539AddModule mod_php3.c
1540AddModule mod_perl.c
1541
1542# Extra Modules
1543LoadModule php_module         modules/mod_php.so
1544LoadModule perl_module        modules/libperl.so
1545
1546   And add:
1547AddType application/x-httpd-php3 .php3    # for PHP 3
1548AddType application/x-httpd-php .php      # for PHP 4
1549
1550   ... to the global properties, or to the properties of the VirtualDomain
1551   you want to have PHP support added to.
1552
1553   5. Unix: I installed PHP 3 using RPMS, but it doesn't compile with the
1554   database support I need! What's going on here?
1555
1556   Due to the way PHP 3 built, it is not easy to build a complete flexible
1557   PHP RPM. This issue is addressed in PHP 4. For PHP 3, we currently
1558   suggest you use the mechanism described in the INSTALL.REDHAT file in
1559   the PHP distribution. If you insist on using an RPM version of PHP 3,
1560   read on...
1561
1562   The RPM packagers are setting up the RPMS to install without database
1563   support to simplify installations and because RPMS use /usr/ instead of
1564   the standard /usr/local/ directory for files. You need to tell the RPM
1565   spec file which databases to support and the location of the top-level
1566   of your database server.
1567
1568   This example will explain the process of adding support for the popular
1569   MySQL database server, using the mod installation for Apache.
1570
1571   Of course all of this information can be adjusted for any database
1572   server that PHP supports. We will assume you installed MySQL and Apache
1573   completely with RPMS for this example as well.
1574
1575     * First remove mod_php3 :
1576
1577rpm -e mod_php3
1578
1579     * Then get the source rpm and INSTALL it, NOT --rebuild
1580
1581rpm -Uvh mod_php3-3.0.5-2.src.rpm
1582
1583     * Then edit the /usr/src/redhat/SPECS/mod_php3.spec file
1584       In the %build section add the database support you want, and the
1585       path.
1586       For MySQL you would add --with-mysql=/usr The %build section will
1587       look something like this:
1588
1589./configure --prefix=/usr \
1590--with-apxs=/usr/sbin/apxs \
1591--with-config-file-path=/usr/lib \
1592--enable-debug=no \
1593--enable-safe-mode \
1594--with-exec-dir=/usr/bin \
1595--with-mysql=/usr \
1596--with-system-regex
1597
1598     * Once this modification is made then build the binary rpm as
1599       follows:
1600
1601rpm -bb /usr/src/redhat/SPECS/mod_php3.spec
1602
1603     * Then install the rpm
1604
1605rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm
1606
1607   Make sure you restart Apache, and you now have PHP 3 with MySQL support
1608   using RPM's. Note that it is probably much easier to just build from
1609   the distribution tarball of PHP 3 and follow the instructions in
1610   INSTALL.REDHAT found in that distribution.
1611
1612   6. Unix: I patched Apache with the FrontPage extensions patch, and
1613   suddenly PHP stopped working. Is PHP incompatible with the Apache
1614   FrontPage extensions?
1615
1616   No, PHP works fine with the FrontPage extensions. The problem is that
1617   the FrontPage patch modifies several Apache structures, that PHP relies
1618   on. Recompiling PHP (using 'make clean ; make') after the FP patch is
1619   applied would solve the problem.
1620
1621   7. Unix/Windows: I have installed PHP, but when I try to access a PHP
1622   script file via my browser, I get a blank screen.
1623
1624   Do a 'view source' in the web browser and you will probably find that
1625   you can see the source code of your PHP script. This means that the web
1626   server did not send the script to PHP for interpretation. Something is
1627   wrong with the server configuration - double check the server
1628   configuration against the PHP installation instructions.
1629
1630   8. Unix/Windows: I have installed PHP, but when try to access a PHP
1631   script file via my browser, I get a server 500 error.
1632
1633   Something went wrong when the server tried to run PHP. To get to see a
1634   sensible error message, from the command line, change to the directory
1635   containing the PHP executable (php.exe on Windows) and run php -i. If
1636   PHP has any problems running, then a suitable error message will be
1637   displayed which will give you a clue as to what needs to be done next.
1638   If you get a screen full of HTML codes (the output of the phpinfo()
1639   function) then PHP is working, and your problem may be related to your
1640   server configuration which you should double check.
1641
1642   9. Some operating systems: I have installed PHP without errors, but
1643   when I try to start apache I get undefined symbol errors:
1644[mybox:user /src/php5] root# apachectl configtest
1645 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
1646  _compress
1647  _uncompress
1648
1649   This has actually nothing to do with PHP, but with the MySQL client
1650   libraries. Some need --with-zlib, others do not. This is also covered
1651   in the MySQL FAQ.
1652
1653   10. Windows: I have installed PHP, but when I to access a PHP script
1654   file via my browser, I get the error:
1655cgi error:
1656 The specified CGI application misbehaved by not
1657 returning a complete set of HTTP headers.
1658 The headers it did return are:
1659
1660   This error message means that PHP failed to output anything at all. To
1661   get to see a sensible error message, from the command line, change to
1662   the directory containing the PHP executable (php.exe on Windows) and
1663   run php -i. If PHP has any problems running, then a suitable error
1664   message will be displayed which will give you a clue as to what needs
1665   to be done next. If you get a screen full of HTML codes (the output of
1666   the phpinfo() function) then PHP is working.
1667
1668   Once PHP is working at the command line, try accessing the script via
1669   the browser again. If it still fails then it could be one of the
1670   following:
1671
1672     * File permissions on your PHP script, php.exe, php5ts.dll, php.ini
1673       or any PHP extensions you are trying to load are such that the
1674       anonymous internet user ISUR_<machinename> cannot access them.
1675     * The script file does not exist (or possibly isn't where you think
1676       it is relative to your web root directory). Note that for IIS you
1677       can trap this error by ticking the 'check file exists' box when
1678       setting up the script mappings in the Internet Services Manager. If
1679       a script file does not exist then the server will return a 404
1680       error instead. There is also the additional benefit that IIS will
1681       do any authentication required for you based on the NTLanMan
1682       permissions on your script file.
1683
1684   11. Windows: I've followed all the instructions, but still can't get
1685   PHP and IIS to work together!
1686
1687   Make sure any user who needs to run a PHP script has the rights to run
1688   php.exe! IIS uses an anonymous user which is added at the time IIS is
1689   installed. This user needs rights to php.exe. Also, any authenticated
1690   user will also need rights to execute php.exe. And for IIS4 you need to
1691   tell it that PHP is a script engine. Also, you will want to read this
1692   faq.
1693
1694   12. When running PHP as CGI with IIS, OmniHTTPD or Xitami, I get
1695   the following error: Security Alert! PHP CGI cannot be accessed
1696   directly..
1697
1698   You must set the cgi.force_redirect directive to 0. It defaults to 1 so
1699   be sure the directive isn't commented out (with a ;). Like all
1700   directives, this is set in php.ini
1701
1702   Because the default is 1, it's critical that you're 100% sure that the
1703   correct php.ini file is being read. Read this faq for details.
1704
1705   13. How do I know if my php.ini is being found and read? It seems like
1706   it isn't as my changes aren't being implemented.
1707
1708   To be sure your php.ini is being read by PHP, make a call to phpinfo()
1709   and near the top will be a listing called Configuration File (php.ini).
1710   This will tell you where PHP is looking for php.ini and whether or not
1711   it's being read. If just a directory PATH exists than it's not being
1712   read and you should put your php.ini in that directory. If php.ini is
1713   included within the PATH than it is being read.
1714
1715   If php.ini is being read and you're running PHP as a module, then be
1716   sure to restart your web server after making changes to php.ini
1717
1718   14. How do I add my PHP directory to the PATH on Windows?
1719
1720   On Windows NT, 2000, XP and 2003:
1721
1722     * Go to Control Panel and open the System icon (Start -> Settings ->
1723       Control Panel -> System, or just Start -> Control Panel -> System
1724       for Windows XP/2003)
1725     * Go to the Advanced tab
1726     * Click on the 'Environment Variables' button
1727     * Look into the 'System Variables' pane
1728     * Find the Path entry (you may need to scroll to find it)
1729     * Double click on the Path entry
1730     * Enter your PHP directory at the end, including ';' before (e.g.
1731       ;C:\php)
1732     * Press OK and restart your computer
1733
1734   On Windows 98/Me you need to edit the autoexec.bat file:
1735
1736     * Open the Notepad (Start -> Run and enter notepad)
1737     * Open the C:\autoexec.bat file
1738     * Locate the line with PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... and
1739       add: ;C:\php to the end of the line
1740     * Save the file and restart your computer
1741
1742     Note: Be sure to reboot after following the steps above to ensure
1743     that the PATH changes are applied.
1744
1745   The PHP manual used to promote the copying of files into the Windows
1746   system directory, this is because this directory (C:\Windows, C:\WINNT,
1747   etc.) is by default in the systems PATH. Copying files into the Windows
1748   system directory has long since been deprecated and may cause problems.
1749
1750   15. How do I make the php.ini file available to PHP on windows?
1751
1752   There are several ways of doing this. If you are using Apache, read
1753   their installation specific instructions (Apache 1, Apache 2),
1754   otherwise you must set the PHPRC environment variable:
1755
1756   On Windows NT, 2000, XP and 2003:
1757
1758     * Go to Control Panel and open the System icon (Start -> Settings ->
1759       Control Panel -> System, or just Start -> Control Panel -> System
1760       for Windows XP/2003)
1761     * Go to the Advanced tab
1762     * Click on the 'Environment Variables' button
1763     * Look into the 'System variables' pane
1764     * Click on 'New' and enter 'PHPRC' as the variable name and the
1765       directory where php.ini is located as the variable value (e.g.
1766       C:\php)
1767     * Press OK and restart your computer
1768
1769   On Windows 98/Me you need to edit the autoexec.bat file:
1770
1771     * Open the Notepad (Start -> Run and enter notepad)
1772     * Open the C:\autoexec.bat file
1773     * Add a new line to the end of the file: set PHPRC=C:\php (replace
1774       C:\php with the directory where php.ini is located). Please note
1775       that the path cannot contain spaces. For instance, if you have
1776       installed PHP in C:\Program Files\PHP, you would enter
1777       C:\PROGRA~1\PHP instead.
1778     * Save the file and restart your computer
1779
1780   16. Is it possible to use Apache content negotiation (MultiViews
1781   option) with PHP?
1782
1783   If links to PHP files include extension, everything works perfect. This
1784   FAQ is only for the case when links to PHP files don't include
1785   extension and you want to use content negotiation to choose PHP files
1786   from URL with no extension. In this case, replace the line AddType
1787   application/x-httpd-php .php with:
1788# PHP 4
1789AddHandler php-script php
1790AddType text/html php
1791
1792# PHP 5
1793AddHandler php5-script php
1794AddType text/html php
1795
1796   This solution doesn't work for Apache 1 as PHP module doesn't catch
1797   php-script.
1798
1799   17. Is PHP limited to process GET and POST request methods only?
1800
1801   No, it is possible to handle any request method, e.g. CONNECT. Proper
1802   response status can be sent with header(). If only GET and POST methods
1803   should be handled, it can be achieved with this Apache configuration:
1804<LimitExcept GET POST>
1805Deny from all
1806</LimitExcept>
1807