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