diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /INSTALL | |
download | php2-master.tar.gz |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'INSTALL')
-rw-r--r-- | INSTALL | 2120 |
1 files changed, 2120 insertions, 0 deletions
@@ -0,0 +1,2120 @@ + __________________________________________________________________ + +Installing PHP + __________________________________________________________________ + + * General Installation Considerations + * Installation on Unix systems + + Apache 1.3.x on Unix systems + + Apache 2.x on Unix systems + + Lighttpd 1.4 on Unix systems + + Sun, iPlanet and Netscape servers on Sun Solaris + + CGI and command line setups + + HP-UX specific installation notes + + OpenBSD installation notes + + Solaris specific installation tips + + Debian GNU/Linux installation notes + * Installation on Mac OS X + + Using Packages + + Using the bundled PHP + + Compiling PHP on Mac OS X + * Installation of PECL extensions + + Introduction to PECL Installations + + Downloading PECL extensions + + Installing a PHP extension on Windows + + Compiling shared PECL extensions with the pecl command + + Compiling shared PECL extensions with phpize + + php-config + + Compiling PECL extensions statically into PHP + * Problems? + + Read the FAQ + + Other problems + + Bug reports + * Runtime Configuration + + The configuration file + + .user.ini files + + Where a configuration setting may be set + + How to change configuration settings + * Installation + __________________________________________________________________ + + __________________________________________________________________ + +Preface + + These installation instructions were generated from the HTML version of + the PHP Manual so formatting and linking have been altered. See the + online and updated version at: http://php.net/install.unix + __________________________________________________________________ + +General Installation Considerations + + Before starting the installation, first you need to know what do you + want to use PHP for. There are three main fields you can use PHP, as + described in the What can PHP do? section: + * Websites and web applications (server-side scripting) + * Command line scripting + * Desktop (GUI) applications + + For the first and most common form, you need three things: PHP itself, + a web server and a web browser. You probably already have a web + browser, and depending on your operating system setup, you may also + have a web server (e.g. Apache on Linux and MacOS X; IIS on Windows). + You may also rent webspace at a company. This way, you don't need to + set up anything on your own, only write your PHP scripts, upload it to + the server you rent, and see the results in your browser. + + In case of setting up the server and PHP on your own, you have two + choices for the method of connecting PHP to the server. For many + servers PHP has a direct module interface (also called SAPI). These + servers include Apache, Microsoft Internet Information Server, Netscape + and iPlanet servers. Many other servers have support for ISAPI, the + Microsoft module interface (OmniHTTPd for example). If PHP has no + module support for your web server, you can always use it as a CGI or + FastCGI processor. This means you set up your server to use the CGI + executable of PHP to process all PHP file requests on the server. + + If you are also interested to use PHP for command line scripting (e.g. + write scripts autogenerating some images for you offline, or processing + text files depending on some arguments you pass to them), you always + need the command line executable. For more information, read the + section about writing command line PHP applications. In this case, you + need no server and no browser. + + With PHP you can also write desktop GUI applications using the PHP-GTK + extension. This is a completely different approach than writing web + pages, as you do not output any HTML, but manage windows and objects + within them. For more information about PHP-GTK, please » visit the + site dedicated to this extension. PHP-GTK is not included in the + official PHP distribution. + + From now on, this section deals with setting up PHP for web servers on + Unix and Windows with server module interfaces and CGI executables. You + will also find information on the command line executable in the + following sections. + + PHP source code and binary distributions for Windows can be found at + » http://www.php.net/downloads.php. We recommend you to choose a + » mirror nearest to you for downloading the distributions. + __________________________________________________________________ + __________________________________________________________________ + +Installation on Unix systems + +Table of Contents + + * Apache 1.3.x on Unix systems + * Apache 2.x on Unix systems + * Lighttpd 1.4 on Unix systems + * Sun, iPlanet and Netscape servers on Sun Solaris + * CGI and command line setups + * HP-UX specific installation notes + * OpenBSD installation notes + * Solaris specific installation tips + * Debian GNU/Linux installation notes + + This section will guide you through the general configuration and + installation of PHP on Unix systems. Be sure to investigate any + sections specific to your platform or web server before you begin the + process. + + As our manual outlines in the General Installation Considerations + section, we are mainly dealing with web centric setups of PHP in this + section, although we will cover setting up PHP for command line usage + as well. + + There are several ways to install PHP for the Unix platform, either + with a compile and configure process, or through various pre-packaged + methods. This documentation is mainly focused around the process of + compiling and configuring PHP. Many Unix like systems have some sort of + package installation system. This can assist in setting up a standard + configuration, but if you need to have a different set of features + (such as a secure server, or a different database driver), you may need + to build PHP and/or your web server. If you are unfamiliar with + building and compiling your own software, it is worth checking to see + whether somebody has already built a packaged version of PHP with the + features you need. + + Prerequisite knowledge and software for compiling: + * Basic Unix skills (being able to operate "make" and a C compiler) + * An ANSI C compiler + * A web server + * Any module specific components (such as GD, PDF libs, etc.) + + When building directly from Git sources or after custom modifications + you might also need: + * autoconf: 2.13+ (for PHP < 5.4.0), 2.59+ (for PHP >= 5.4.0) + * automake: 1.4+ + * libtool: 1.4.x+ (except 1.4.2) + * re2c: Version 0.13.4 or newer + * flex: Version 2.5.4 (for PHP <= 5.2) + * bison: Version 1.28 (preferred), 1.35, or 1.75 + + The initial PHP setup and configuration process is controlled by the + use of the command line options of the configure script. You could get + a list of all available options along with short explanations running + ./configure --help. Our manual documents the different options + separately. You will find the core options in the appendix, while the + different extension specific options are descibed on the reference + pages. + + When PHP is configured, you are ready to build the module and/or + executables. The command make should take care of this. If it fails and + you can't figure out why, see the Problems section. + __________________________________________________________________ + +Apache 1.3.x on Unix systems + + This section contains notes and hints specific to Apache installs of + PHP on Unix platforms. We also have instructions and notes for Apache 2 + on a separate page. + + You can select arguments to add to the configure on line 10 below from + the list of core configure options and from extension specific options + described at the respective places in the manual. The version numbers + have been omitted here, to ensure the instructions are not incorrect. + You will need to replace the 'xxx' here with the correct values from + your files. + + Example #1 Installation Instructions (Apache Shared Module Version) for + PHP +1. gunzip apache_xxx.tar.gz +2. tar -xvf apache_xxx.tar +3. gunzip php-xxx.tar.gz +4. tar -xvf php-xxx.tar +5. cd apache_xxx +6. ./configure --prefix=/www --enable-module=so +7. make +8. make install +9. cd ../php-xxx + +10. Now, configure your PHP. This is where you customize your PHP + with various options, like which extensions will be enabled. Do a + ./configure --help for a list of available options. In our example + we'll do a simple configure with Apache 1 and MySQL support. Your + path to apxs may differ from our example. + + ./configure --with-mysql --with-apxs=/www/bin/apxs + +11. make +12. make install + + If you decide to change your configure options after installation, + you only need to repeat the last three steps. You only need to + restart apache for the new module to take effect. A recompile of + Apache is not needed. + + Note that unless told otherwise, 'make install' will also install PEAR, + various PHP tools such as phpize, install the PHP CLI, and more. + +13. Setup your php.ini file: + + cp php.ini-development /usr/local/lib/php.ini + + You may edit your .ini file to set PHP options. If you prefer your + php.ini in another location, use --with-config-file-path=/some/path in + step 10. + + If you instead choose php.ini-production, be certain to read the list + of changes within, as they affect how PHP behaves. + +14. Edit your httpd.conf to load the PHP module. The path on the right hand + side of the LoadModule statement must point to the path of the PHP + module on your system. The make install from above may have already + added this for you, but be sure to check. + + LoadModule php5_module libexec/libphp5.so + +15. And in the AddModule section of httpd.conf, somewhere under the + ClearModuleList, add this: + + AddModule mod_php5.c + +16. Tell Apache to parse certain extensions as PHP. For example, + let's have Apache parse the .php extension as PHP. You could + have any extension(s) parse as PHP by simply adding more, with + each separated by a space. We'll add .phtml to demonstrate. + + AddType application/x-httpd-php .php .phtml + + It's also common to setup the .phps extension to show highlighted PHP + source, this can be done with: + + AddType application/x-httpd-php-source .phps + +17. Use your normal procedure for starting the Apache server. (You must + stop and restart the server, not just cause the server to reload by + using a HUP or USR1 signal.) + + Alternatively, to install PHP as a static object: + + Example #2 Installation Instructions (Static Module Installation for + Apache) for PHP +1. gunzip -c apache_1.3.x.tar.gz | tar xf - +2. cd apache_1.3.x +3. ./configure +4. cd .. + +5. gunzip -c php-5.x.y.tar.gz | tar xf - +6. cd php-5.x.y +7. ./configure --with-mysql --with-apache=../apache_1.3.x +8. make +9. make install + +10. cd ../apache_1.3.x + +11. ./configure --prefix=/www --activate-module=src/modules/php5/libphp5.a + (The above line is correct! Yes, we know libphp5.a does not exist at this + stage. It isn't supposed to. It will be created.) + +12. make + (you should now have an httpd binary which you can copy to your Apache bin d +ir if + it is your first install then you need to "make install" as well) + +13. cd ../php-5.x.y +14. cp php.ini-development /usr/local/lib/php.ini + +15. You can edit /usr/local/lib/php.ini file to set PHP options. + Edit your httpd.conf or srm.conf file and add: + AddType application/x-httpd-php .php + + Depending on your Apache install and Unix variant, there are many + possible ways to stop and restart the server. Below are some typical + lines used in restarting the server, for different apache/unix + installations. You should replace /path/to/ with the path to these + applications on your systems. + + Example #3 Example commands for restarting Apache +1. Several Linux and SysV variants: +/etc/rc.d/init.d/httpd restart + +2. Using apachectl scripts: +/path/to/apachectl stop +/path/to/apachectl start + +3. httpdctl and httpsdctl (Using OpenSSL), similar to apachectl: +/path/to/httpsdctl stop +/path/to/httpsdctl start + +4. Using mod_ssl, or another SSL server, you may want to manually +stop and start: +/path/to/apachectl stop +/path/to/apachectl startssl + + The locations of the apachectl and http(s)dctl binaries often vary. If + your system has locate or whereis or which commands, these can assist + you in finding your server control programs. + + Different examples of compiling PHP for apache are as follows: +./configure --with-apxs --with-pgsql + + This will create a libphp5.so shared library that is loaded into Apache + using a LoadModule line in Apache's httpd.conf file. The PostgreSQL + support is embedded into this library. + +./configure --with-apxs --with-pgsql=shared + + This will create a libphp5.so shared library for Apache, but it will + also create a pgsql.so shared library that is loaded into PHP either by + using the extension directive in php.ini file or by loading it + explicitly in a script using the dl() function. + +./configure --with-apache=/path/to/apache_source --with-pgsql + + This will create a libmodphp5.a library, a mod_php5.c and some + accompanying files and copy this into the src/modules/php5 directory in + the Apache source tree. Then you compile Apache using + --activate-module=src/modules/php5/libphp5.a and the Apache build + system will create libphp5.a and link it statically into the httpd + binary. The PostgreSQL support is included directly into this httpd + binary, so the final result here is a single httpd binary that includes + all of Apache and all of PHP. + +./configure --with-apache=/path/to/apache_source --with-pgsql=shared + + Same as before, except instead of including PostgreSQL support directly + into the final httpd you will get a pgsql.so shared library that you + can load into PHP from either the php.ini file or directly using dl(). + + When choosing to build PHP in different ways, you should consider the + advantages and drawbacks of each method. Building as a shared object + will mean that you can compile apache separately, and don't have to + recompile everything as you add to, or change, PHP. Building PHP into + apache (static method) means that PHP will load and run faster. For + more information, see the Apache » web page on DSO support. + + Note: + + Apache's default httpd.conf currently ships with a section that + looks like this: + +User nobody +Group "#-1" + + Unless you change that to "Group nogroup" or something like that + ("Group daemon" is also very common) PHP will not be able to open + files. + + Note: + + Make sure you specify the installed version of apxs when using + --with-apxs=/path/to/apxs . You must NOT use the apxs version that + is in the apache sources but the one that is actually installed on + your system. + __________________________________________________________________ + __________________________________________________________________ + +Apache 2.x on Unix systems + + This section contains notes and hints specific to Apache 2.x installs + of PHP on Unix systems. + Warning + + We do not recommend using a threaded MPM in production with Apache 2. + Use the prefork MPM, which is the default MPM with Apache 2.0 and 2.2. + For information on why, read the related FAQ entry on using Apache2 + with a threaded MPM + + The » Apache Documentation is the most authoritative source of + information on the Apache 2.x server. More information about + installation options for Apache may be found there. + + The most recent version of Apache HTTP Server may be obtained from + » Apache download site, and a fitting PHP version from the above + mentioned places. This quick guide covers only the basics to get + started with Apache 2.x and PHP. For more information read the » Apache + Documentation. The version numbers have been omitted here, to ensure + the instructions are not incorrect. In the examples below, 'NN' should + be replaced with the specific version of Apache being used. + + There are currently two versions of Apache 2.x - there's 2.0 and 2.2. + While there are various reasons for choosing each, 2.2 is the current + latest version, and the one that is recommended, if that option is + available to you. However, the instructions here will work for either + 2.0 or 2.2. + 1. Obtain the Apache HTTP server from the location listed above, and + unpack it: +gzip -d httpd-2_x_NN.tar.gz +tar -xf httpd-2_x_NN.tar + + 2. Likewise, obtain and unpack the PHP source: +gunzip php-NN.tar.gz +tar -xf php-NN.tar + + 3. Build and install Apache. Consult the Apache install documentation + for more details on building Apache. +cd httpd-2_x_NN +./configure --enable-so +make +make install + + 4. Now you have Apache 2.x.NN available under /usr/local/apache2, + configured with loadable module support and the standard MPM + prefork. To test the installation use your normal procedure for + starting the Apache server, e.g.: +/usr/local/apache2/bin/apachectl start + + and stop the server to go on with the configuration for PHP: +/usr/local/apache2/bin/apachectl stop + + 5. Now, configure and build PHP. This is where you customize PHP with + various options, like which extensions will be enabled. Run + ./configure --help for a list of available options. In our example + we'll do a simple configure with Apache 2 and MySQL support. + If you built Apache from source, as described above, the below + example will match your path for apxs, but if you installed Apache + some other way, you'll need to adjust the path to apxs accordingly. + Note that some distros may rename apxs to apxs2. +cd ../php-NN +./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql +make +make install + + If you decide to change your configure options after installation, + you'll need to re-run the configure, make, and make install steps. + You only need to restart apache for the new module to take effect. + A recompile of Apache is not needed. + Note that unless told otherwise, 'make install' will also install + PEAR, various PHP tools such as phpize, install the PHP CLI, and + more. + 6. Setup your php.ini +cp php.ini-development /usr/local/lib/php.ini + + You may edit your .ini file to set PHP options. If you prefer + having php.ini in another location, use + --with-config-file-path=/some/path in step 5. + If you instead choose php.ini-production, be certain to read the + list of changes within, as they affect how PHP behaves. + 7. Edit your httpd.conf to load the PHP module. The path on the right + hand side of the LoadModule statement must point to the path of the + PHP module on your system. The make install from above may have + already added this for you, but be sure to check. +LoadModule php5_module modules/libphp5.so + 8. Tell Apache to parse certain extensions as PHP. For example, let's + have Apache parse .php files as PHP. Instead of only using the + Apache AddType directive, we want to avoid potentially dangerous + uploads and created files such as exploit.php.jpg from being + executed as PHP. Using this example, you could have any + extension(s) parse as PHP by simply adding them. We'll add .php to + demonstrate. +<FilesMatch \.php$> + SetHandler application/x-httpd-php +</FilesMatch> + Or, if we wanted to allow .php, .php2, .php3, .php4, .php5, .php6, + and .phtml files to be executed as PHP, but nothing else, we'd use + this: +<FilesMatch "\.ph(p[2-6]?|tml)$"> + SetHandler application/x-httpd-php +</FilesMatch> + And to allow .phps files to be handled by the php source filter, + and displayed as syntax-highlighted source code, use this: +<FilesMatch "\.phps$"> + SetHandler application/x-httpd-php-source +</FilesMatch> + mod_rewrite may be used To allow any arbitrary .php file to be + displayed as syntax-highlighted source code, without having to + rename or copy it to a .phps file: +RewriteEngine On +RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source] + The php source filter should not be enabled on production systems, + where it may expose confidential or otherwise sensitive information + embedded in source code. + 9. Use your normal procedure for starting the Apache server, e.g.: +/usr/local/apache2/bin/apachectl start + + OR +service httpd restart + + Following the steps above you will have a running Apache2 web server + with support for PHP as a SAPI module. Of course there are many more + configuration options available Apache and PHP. For more information + type ./configure --help in the corresponding source tree. + + Apache may be built multithreaded by selecting the worker MPM, rather + than the standard prefork MPM, when Apache is built. This is done by + adding the following option to the argument passed to ./configure, in + step 3 above: + --with-mpm=worker + + This should not be undertaken without being aware of the consequences + of this decision, and having at least a fair understanding of the + implications. The Apache documentation regarding » MPM-Modules + discusses MPMs in a great deal more detail. + + Note: + + The Apache MultiViews FAQ discusses using multiviews with PHP. + + Note: + + To build a multithreaded version of Apache, the target system must + support threads. In this case, PHP should also be built with + experimental Zend Thread Safety (ZTS). Under this configuration, not + all extensions will be available. The recommended setup is to build + Apache with the default prefork MPM-Module. + __________________________________________________________________ + __________________________________________________________________ + +Lighttpd 1.4 on Unix systems + + This section contains notes and hints specific to Lighttpd 1.4 installs + of PHP on Unix systems. + + Please use the » Lighttpd trac to learn how to install Lighttpd + properly before continuing. + + Fastcgi is the preferred SAPI to connect PHP and Lighttpd. Fastcgi is + automagically enabled in php-cgi in PHP 5.3, but for older versions + configure PHP with --enable-fastcgi. To confirm that PHP has fastcgi + enabled, php -v should contain PHP 5.2.5 (cgi-fcgi) Before PHP 5.2.3, + fastcgi was enabled on the php binary (there was no php-cgi). + +Letting Lighttpd spawn php processes + + To configure Lighttpd to connect to php and spawn fastcgi processes, + edit lighttpd.conf. Sockets are preferred to connect to fastcgi + processes on the local system. + + Example #1 Partial lighttpd.conf +server.modules += ( "mod_fastcgi" ) + +fastcgi.server = ( ".php" => + (( + "socket" => "/tmp/php.socket", + "bin-path" => "/usr/local/bin/php-cgi", + "bin-environment" => ( + "PHP_FCGI_CHILDREN" => "16", + "PHP_FCGI_MAX_REQUESTS" => "10000" + ), + "min-procs" => 1, + "max-procs" => 1, + "idle-timeout" => 20 + )) +) + + The bin-path directive allows lighttpd to spawn fastcgi processes + dynamically. PHP will spawn children according to the PHP_FCGI_CHILDREN + environment variable. The "bin-environment" directive sets the + environment for the spawned processes. PHP will kill a child process + after the number of requests specified by PHP_FCGI_MAX_REQUESTS is + reached. The directives "min-procs" and "max-procs" should generally be + avoided with PHP. PHP manages its own children and opcode caches like + APC will only share among children managed by PHP. If "min-procs" is + set to something greater than 1, the total number of php responders + will be multiplied PHP_FCGI_CHILDREN (2 min-procs * 16 children gives + 32 responders). + +Spawning with spawn-fcgi + + Lighttpd provides a program called spawn-fcgi to ease the process of + spawning fastcgi processes easier. + +Spawning php-cgi + + It is possible to spawn processes without spawn-fcgi, though a bit of + heavy-lifting is required. Setting the PHP_FCGI_CHILDREN environment + var controls how many children PHP will spawn to handle incoming + requests. Setting PHP_FCGI_MAX_REQUESTS will determine how long (in + requests) each child will live. Here's a simple bash script to help + spawn php responders. + + Example #2 Spawning FastCGI Responders +#!/bin/sh + +# Location of the php-cgi binary +PHP=/usr/local/bin/php-cgi + +# PID File location +PHP_PID=/tmp/php.pid + +# Binding to an address +#FCGI_BIND_ADDRESS=10.0.1.1:10000 +# Binding to a domain socket +FCGI_BIND_ADDRESS=/tmp/php.sock + +PHP_FCGI_CHILDREN=16 +PHP_FCGI_MAX_REQUESTS=10000 + +env -i PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN \ + PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS \ + $PHP -b $FCGI_BIND_ADDRESS & + +echo $! > "$PHP_PID" + + +Connecting to remote FCGI instances + + Fastcgi instances can be spawned on multiple remote machines in order + to scale applications. + + Example #3 Connecting to remote php-fastcgi instances +fastcgi.server = ( ".php" => + (( "host" => "10.0.0.2", "port" => 1030 ), + ( "host" => "10.0.0.3", "port" => 1030 )) +) + __________________________________________________________________ + __________________________________________________________________ + +Sun, iPlanet and Netscape servers on Sun Solaris + + This section contains notes and hints specific to Sun Java System Web + Server, Sun ONE Web Server, iPlanet and Netscape server installs of PHP + on Sun Solaris. + + From PHP 4.3.3 on you can use PHP scripts with the NSAPI module to + generate custom directory listings and error pages. Additional + functions for Apache compatibility are also available. For support in + current web servers read the note about subrequests. + + You can find more information about setting up PHP for the Netscape + Enterprise Server (NES) here: + » http://benoit.noss.free.fr/php/install-php4.html + + To build PHP with Sun JSWS/Sun ONE WS/iPlanet/Netscape web servers, + enter the proper install directory for the --with-nsapi=[DIR] option. + The default directory is usually /opt/netscape/suitespot/. Please also + read /php-xxx-version/sapi/nsapi/nsapi-readme.txt. + + 1. Install the following packages from » http://www.sunfreeware.com/ + or another download site: + + autoconf-2.13 + + automake-1.4 + + bison-1_25-sol26-sparc-local + + flex-2_5_4a-sol26-sparc-local + + gcc-2_95_2-sol26-sparc-local + + gzip-1.2.4-sol26-sparc-local + + m4-1_4-sol26-sparc-local + + make-3_76_1-sol26-sparc-local + + mysql-3.23.24-beta (if you want mysql support) + + perl-5_005_03-sol26-sparc-local + + tar-1.13 (GNU tar) + 2. Make sure your path includes the proper directories + PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin and make it + available to your system export PATH. + 3. gunzip php-x.x.x.tar.gz (if you have a .gz dist, otherwise go to + 4). + 4. tar xvf php-x.x.x.tar + 5. Change to your extracted PHP directory: cd ../php-x.x.x + 6. For the following step, make sure /opt/netscape/suitespot/ is where + your netscape server is installed. Otherwise, change to the correct + path and run: +./configure --with-mysql=/usr/local/mysql \ +--with-nsapi=/opt/netscape/suitespot/ \ +--enable-libgcc + 7. Run make followed by make install. + + After performing the base install and reading the appropriate readme + file, you may need to perform some additional configuration steps. + +Configuration Instructions for Sun/iPlanet/Netscape + + Firstly you may need to add some paths to the LD_LIBRARY_PATH + environment for the server to find all the shared libs. This can best + done in the start script for your web server. The start script is often + located in: /path/to/server/https-servername/start. You may also need + to edit the configuration files that are located in: + /path/to/server/https-servername/config/. + 1. Add the following line to mime.types (you can do that by the + administration server): +type=magnus-internal/x-httpd-php exts=php + + 2. Edit magnus.conf (for servers >= 6) or obj.conf (for servers < 6) + and add the following, shlib will vary depending on your system, it + will be something like /opt/netscape/suitespot/bin/libphp4.so. You + should place the following lines after mime types init. +Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/op +t/netscape/suitespot/bin/libphp4.so" +Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_ +ini="/path/to/php.ini"] + + (PHP >= 4.3.3) The php_ini parameter is optional but with it you + can place your php.ini in your web server config directory. + 3. Configure the default object in obj.conf (for virtual server + classes [version 6.0+] in their vserver.obj.conf): +<Object name="default"> +. +. +. +.#NOTE this next line should happen after all 'ObjectType' and before all 'AddLo +g' lines +Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inike +y=value ...] +. +. +</Object> + + (PHP >= 4.3.3) As additional parameters you can add some special + php.ini-values, for example you can set a + docroot="/path/to/docroot" specific to the context php4_execute is + called. For boolean ini-keys please use 0/1 as value, not + "On","Off",... (this will not work correctly), e.g. + zlib.output_compression=1 instead of zlib.output_compression="On" + 4. This is only needed if you want to configure a directory that only + consists of PHP scripts (same like a cgi-bin directory): +<Object name="x-httpd-php"> +ObjectType fn="force-type" type="magnus-internal/x-httpd-php" +Service fn=php4_execute [inikey=value inikey=value ...] +</Object> + + After that you can configure a directory in the Administration + server and assign it the style x-httpd-php. All files in it will + get executed as PHP. This is nice to hide PHP usage by renaming + files to .html. + 5. Setup of authentication: PHP authentication cannot be used with any + other authentication. ALL AUTHENTICATION IS PASSED TO YOUR PHP + SCRIPT. To configure PHP Authentication for the entire server, add + the following line to your default object: +<Object name="default"> +AuthTrans fn=php4_auth_trans +. +. +. +</Object> + + 6. To use PHP Authentication on a single directory, add the following: +<Object ppath="d:\path\to\authenticated\dir\*"> +AuthTrans fn=php4_auth_trans +</Object> + + Note: + + The stacksize that PHP uses depends on the configuration of the web + server. If you get crashes with very large PHP scripts, it is + recommended to raise it with the Admin Server (in the section + "MAGNUS EDITOR"). + +CGI environment and recommended modifications in php.ini + + Important when writing PHP scripts is the fact that Sun JSWS/Sun ONE + WS/iPlanet/Netscape is a multithreaded web server. Because of that all + requests are running in the same process space (the space of the web + server itself) and this space has only one environment. If you want to + get CGI variables like PATH_INFO, HTTP_HOST etc. it is not the correct + way to try this in the old PHP way with getenv() or a similar way + (register globals to environment, $_ENV). You would only get the + environment of the running web server without any valid CGI variables! + + Note: + + Why are there (invalid) CGI variables in the environment? + + Answer: This is because you started the web server process from the + admin server which runs the startup script of the web server, you + wanted to start, as a CGI script (a CGI script inside of the admin + server!). This is why the environment of the started web server has + some CGI environment variables in it. You can test this by starting + the web server not from the administration server. Use the command + line as root user and start it manually - you will see there are no + CGI-like environment variables. + + Simply change your scripts to get CGI variables in the correct way for + PHP 4.x by using the superglobal $_SERVER. If you have older scripts + which use $HTTP_HOST, etc., you should turn on register_globals in + php.ini and change the variable order too (important: remove "E" from + it, because you do not need the environment here): +variables_order = "GPCS" +register_globals = On + +Special use for error pages or self-made directory listings (PHP >= 4.3.3) + + You can use PHP to generate the error pages for "404 Not Found" or + similar. Add the following line to the object in obj.conf for every + error page you want to overwrite: +Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inik +ey=value...] + + where XXX is the HTTP error code. Please delete any other Error + directives which could interfere with yours. If you want to place a + page for all errors that could exist, leave the code parameter out. + Your script can get the HTTP status code with $_SERVER['ERROR_TYPE']. + + Another possibility is to generate self-made directory listings. Just + create a PHP script which displays a directory listing and replace the + corresponding default Service line for type="magnus-internal/directory" + in obj.conf with the following: +Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/scri +pt.php" [inikey=value inikey=value...] + + For both error and directory listing pages the original URI and + translated URI are in the variables $_SERVER['PATH_INFO'] and + $_SERVER['PATH_TRANSLATED']. + +Note about nsapi_virtual() and subrequests (PHP >= 4.3.3) + + The NSAPI module now supports the nsapi_virtual() function (alias: + virtual()) to make subrequests on the web server and insert the result + in the web page. This function uses some undocumented features from the + NSAPI library. On Unix the module automatically looks for the needed + functions and uses them if available. If not, nsapi_virtual() is + disabled. + + Note: + + But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!! + __________________________________________________________________ + __________________________________________________________________ + +CGI and command line setups + + By default, PHP is built as both a CLI and CGI program, which can be + used for CGI processing. If you are running a web server that PHP has + module support for, you should generally go for that solution for + performance reasons. However, the CGI version enables users to run + different PHP-enabled pages under different user-ids. + Warning + + A server deployed in CGI mode is open to several possible + vulnerabilities. Please read our CGI security section to learn how to + defend yourself from such attacks. + +Testing + + If you have built PHP as a CGI program, you may test your build by + typing make test. It is always a good idea to test your build. This way + you may catch a problem with PHP on your platform early instead of + having to struggle with it later. + +Using Variables + + Some server supplied environment variables are not defined in the + current » CGI/1.1 specification. Only the following variables are + defined there: AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE, + GATEWAY_INTERFACE, PATH_INFO, PATH_TRANSLATED, QUERY_STRING, + REMOTE_ADDR, REMOTE_HOST, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD, + SCRIPT_NAME, SERVER_NAME, SERVER_PORT, SERVER_PROTOCOL, and + SERVER_SOFTWARE. Everything else should be treated as 'vendor + extensions'. + __________________________________________________________________ + __________________________________________________________________ + +HP-UX specific installation notes + + This section contains notes and hints specific to installing PHP on + HP-UX systems. + + There are two main options for installing PHP on HP-UX systems. Either + compile it, or install a pre-compiled binary. + + Official pre-compiled packages are located here: + » http://software.hp.com/ + + Until this manual section is rewritten, the documentation about + compiling PHP (and related extensions) on HP-UX systems has been + removed. For now, consider reading the following external resource: + » Building Apache and PHP on HP-UX 11.11 + __________________________________________________________________ + __________________________________________________________________ + +OpenBSD installation notes + + This section contains notes and hints specific to installing PHP on + » OpenBSD 3.6. + +Using Binary Packages + + Using binary packages to install PHP on OpenBSD is the recommended and + simplest method. The core package has been separated from the various + modules, and each can be installed and removed independently from the + others. The files you need can be found on your OpenBSD CD or on the + FTP site. + + The main package you need to install is php4-core-4.3.8.tgz, which + contains the basic engine (plus gettext and iconv). Next, take a look + at the module packages, such as php4-mysql-4.3.8.tgz or + php4-imap-4.3.8.tgz. You need to use the phpxs command to activate and + deactivate these modules in your php.ini. + + Example #1 OpenBSD Package Install Example +# pkg_add php4-core-4.3.8.tgz +# /usr/local/sbin/phpxs -s +# cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini + (add in mysql) +# pkg_add php4-mysql-4.3.8.tgz +# /usr/local/sbin/phpxs -a mysql + (add in imap) +# pkg_add php4-imap-4.3.8.tgz +# /usr/local/sbin/phpxs -a imap + (remove mysql as a test) +# pkg_delete php4-mysql-4.3.8 +# /usr/local/sbin/phpxs -r mysql + (install the PEAR libraries) +# pkg_add php4-pear-4.3.8.tgz + + Read the » packages(7) manual page for more information about binary + packages on OpenBSD. + +Using Ports + + You can also compile up PHP from source using the » ports tree. + However, this is only recommended for users familiar with OpenBSD. The + PHP 4 port is split into two sub-directories: core and extensions. The + extensions directory generates sub-packages for all of the supported + PHP modules. If you find you do not want to create some of these + modules, use the no_* FLAVOR. For example, to skip building the imap + module, set the FLAVOR to no_imap. + +Common Problems + + * The default install of Apache runs inside a » chroot(2) jail, which + will restrict PHP scripts to accessing files under /var/www. You + will therefore need to create a /var/www/tmp directory for PHP + session files to be stored, or use an alternative session backend. + In addition, database sockets need to be placed inside the jail or + listen on the localhost interface. If you use network functions, + some files from /etc such as /etc/resolv.conf and /etc/services + will need to be moved into /var/www/etc. The OpenBSD PEAR package + automatically installs into the correct chroot directories, so no + special modification is needed there. More information on the + OpenBSD Apache is available in the » OpenBSD FAQ. + * The OpenBSD 3.6 package for the » gd extension requires XFree86 to + be installed. If you do not wish to use some of the font features + that require X11, install the php4-gd-4.3.8-no_x11.tgz package + instead. + +Older Releases + + Older releases of OpenBSD used the FLAVORS system to compile up a + statically linked PHP. Since it is hard to generate binary packages + using this method, it is now deprecated. You can still use the old + stable ports trees if you wish, but they are unsupported by the OpenBSD + team. If you have any comments about this, the current maintainer for + the port is Anil Madhavapeddy (avsm at openbsd dot org). + __________________________________________________________________ + __________________________________________________________________ + +Solaris specific installation tips + + This section contains notes and hints specific to installing PHP on + Solaris systems. + +Required software + + Solaris installs often lack C compilers and their related tools. Read + this FAQ for information on why using GNU versions for some of these + tools is necessary. + + For unpacking the PHP distribution you need + * tar + * gzip or + * bzip2 + + For compiling PHP you need + * gcc (recommended, other C compilers may work) + * make + * GNU sed + + For building extra extensions or hacking the code of PHP you might also + need + * flex (up to PHP 5.2) + * re2c + * bison + * m4 + * autoconf + * automake + + In addition, you will need to install (and possibly compile) any + additional software specific to your configuration, such as Oracle or + MySQL. + +Using Packages + + You can simplify the Solaris install process by using pkgadd to install + most of your needed components. The Image Packaging System (IPS) for + Solaris 11 Express also contains most of the required components for + installation using the pkg command. + __________________________________________________________________ + __________________________________________________________________ + +Debian GNU/Linux installation notes + + This section contains notes and hints specific to installing PHP on + » Debian GNU/Linux. + Warning + + Unofficial builds from third-parties are not supported here. Any bugs + should be reported to the Debian team unless they can be reproduced + using the latest builds from our » download area. + + While the instructions for building PHP on Unix apply to Debian as + well, this manual page contains specific information for other options, + such as using either the apt-get or aptitude commands. This manual page + uses these two commands interchangeably. + +Using APT + + First, note that other related packages may be desired like + libapache2-mod-php5 to integrate with Apache 2, and php-pear for PEAR. + + Second, before installing a package, it's wise to ensure the package + list is up to date. Typically, this is done by running the command + apt-get update. + + Example #1 Debian Install Example with Apache 2 +# apt-get install php5-common libapache2-mod-php5 php5-cli + + APT will automatically install the PHP 5 module for Apache 2 and all of + its dependencies, and then activate it. Apache should be restarted in + order for the changes take place. For example: + + Example #2 Stopping and starting Apache once PHP is installed +# /etc/init.d/apache2 stop +# /etc/init.d/apache2 start + +Better control of configuration + + In the last section, PHP was installed with only core modules. It's + very likely that additional modules will be desired, such as MySQL, + cURL, GD, etc. These may also be installed via the apt-get command. + + Example #3 Methods for listing additional PHP 5 packages +# apt-cache search php5 +# aptitude search php5 +# aptitude search php5 |grep -i mysql + + The examples will show a lot of packages including several PHP specific + ones like php5-cgi, php5-cli and php5-dev. Determine which are needed + and install them like any other with either apt-get or aptitude. And + because Debian performs dependency checks, it'll prompt for those so + for example to install MySQL and cURL: + + Example #4 Install PHP with MySQL, cURL +# apt-get install php5-mysql php5-curl + + APT will automatically add the appropriate lines to the different + php.ini related files like /etc/php5/apache2/php.ini, + /etc/php5/conf.d/pdo.ini, etc. and depending on the extension will add + entries similar to extension=foo.so. However, restarting the web server + (like Apache) is required before these changes take affect. + +Common Problems + + * If the PHP scripts are not parsing via the web server, then it's + likely that PHP was not added to the web server's configuration + file, which on Debian may be /etc/apache2/apache2.conf or similar. + See the Debian manual for further details. + * If an extension was seemingly installed yet the functions are + undefined, be sure that the appropriate ini file is being loaded + and/or the web server was restarted after installation. + * There are two basic commands for installing packages on Debian (and + other linux variants): apt-get and aptitude. However, explaining + the subtle differences between these commands goes beyond the scope + of this manual. + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + +Installation on Mac OS X + +Table of Contents + + * Using Packages + * Using the bundled PHP + * Compiling PHP on Mac OS X + + This section contains notes and hints specific to installing PHP on Mac + OS X. PHP is bundled with Macs, and compiling is similar to the Unix + installation guide. + __________________________________________________________________ + +Using Packages + + There are a few pre-packaged and pre-compiled versions of PHP for Mac + OS X. This can help in setting up a standard configuration, but if you + need to have a different set of features (such as a secure server, or a + different database driver), you may need to build PHP and/or your web + server yourself. If you are unfamiliar with building and compiling your + own software, it's worth checking whether somebody has already built a + packaged version of PHP with the features you need. + + The following resources offer easy to install packages and precompiled + binaries for PHP on Mac OS: + + * MacPorts: » http://www.macports.org/ + * Entropy: » http://www.entropy.ch/software/macosx/php/ + * Fink: » http://www.finkproject.org/ + * Homebrew: » http://github.com/mxcl/homebrew + __________________________________________________________________ + __________________________________________________________________ + +Using the bundled PHP + + PHP has come standard with Macs since OS X version 10.0.0. Enabling PHP + with the default web server requires uncommenting a few lines in the + Apache configuration file httpd.conf whereas the CGI and/or CLI are + enabled by default (easily accessible via the Terminal program). + + Enabling PHP using the instructions below is meant for quickly setting + up a local development environment. It's highly recommended to always + upgrade PHP to the newest version. Like most live software, newer + versions are created to fix bugs and add features and PHP being is no + different. See the appropriate MAC OS X installation documentation for + further details. The following instructions are geared towards a + beginner with details provided for getting a default setup to work. All + users are encouraged to compile, or install a new packaged version. + + The standard installation type is using mod_php, and enabling the + bundled mod_php on Mac OS X for the Apache web server (the default web + server, that is accessible via System Preferences) involves the + following steps: + + 1. Locate and open the Apache configuration file. By default, the + location is as follows: /private/etc/apache2/httpd.conf Using + Finder or Spotlight to find this file may prove difficult as by + default it's private and owned by the root user. + + Note: One way to open this is by using a Unix based text editor in + the Terminal, for example nano, and because the file is owned by + root we'll use the sudo command to open it (as root) so for example + type the following into the Terminal Application (after, it will + prompt for a password): sudo nano /private/etc/apache2/httpd.conf + Noteworthy nano commands: ^w (search), ^o (save), and ^x (exit) + where ^ represents the Ctrl key. + + Note: Versions of Mac OS X prior to 10.5 were bundled with older + versions of PHP and Apache. As such, the Apache configuration file + on legacy machines may be /etc/httpd/httpd.conf. + 2. With a text editor, uncomment the lines (by removing the #) that + look similar to the following (these two lines are often not + together, locate them both in the file): +# LoadModule php5_module libexec/httpd/libphp5.so + +# AddModule mod_php5.c + + Notice the location/path. When building PHP in the future, the + above files should be replaced or commented out. + 3. Be sure the desired extensions will parse as PHP (examples: .php + .html and .inc) + Due to the following statement already existing in httpd.conf (as + of Mac Panther), once PHP is enabled the .php files will + automatically parse as PHP. +<IfModule mod_php5.c> + # If php is turned on, we respect .php and .phps files. + AddType application/x-httpd-php .php + AddType application/x-httpd-php-source .phps + + # Since most users will want index.php to work we + # also automatically enable index.php + <IfModule mod_dir.c> + DirectoryIndex index.html index.php + </IfModule> +</IfModule> + + Note: + Before OS X 10.5 (Leopard), PHP 4 was bundled instead of PHP 5 in + which case the above instructions will differ slightly by changing + 5's to 4's. + 4. Be sure the DirectoryIndex loads the desired default index file + This is also set in httpd.conf. Typically index.php and index.html + are used. By default index.php is enabled because it's also in the + PHP check shown above. Adjust accordingly. + 5. Set the php.ini location or use the default A typical default + location on Mac OS X is /usr/local/php/php.ini and a call to + phpinfo() will reveal this information. If a php.ini is not used, + PHP will use all default values. See also the related FAQ on + finding php.ini. + 6. Locate or set the DocumentRoot This is the root directory for all + the web files. Files in this directory are served from the web + server so the PHP files will parse as PHP before outputting them to + the browser. A typical default path is /Library/WebServer/Documents + but this can be set to anything in httpd.conf. Alternatively, the + default DocumentRoot for individual users is + /Users/yourusername/Sites + 7. Create a phpinfo() file + The phpinfo() function will display information about PHP. Consider + creating a file in the DocumentRoot with the following PHP code: + <?php phpinfo(); ?> + 8. Restart Apache, and load the PHP file created above To restart, + either execute sudo apachectl graceful in the shell or stop/start + the "Personal Web Server" option in the OS X System Preferences. By + default, loading local files in the browser will have an URL like + so: http://localhost/info.php Or using the DocumentRoot in the user + directory is another option and would end up looking like: + http://localhost/~yourusername/info.php + + The CLI (or CGI in older versions) is appropriately named php and + likely exists as /usr/bin/php. Open up the terminal, read the command + line section of the PHP manual, and execute php -v to check the PHP + version of this PHP binary. A call to phpinfo() will also reveal this + information. + __________________________________________________________________ + __________________________________________________________________ + +Compiling PHP on Mac OS X + + Use the Unix installation guide to compile PHP on Mac OS X. + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + +Installation of PECL extensions + +Table of Contents + + * Introduction to PECL Installations + * Downloading PECL extensions + * Installing a PHP extension on Windows + * Compiling shared PECL extensions with the pecl command + * Compiling shared PECL extensions with phpize + * php-config + * Compiling PECL extensions statically into PHP + __________________________________________________________________ + +Introduction to PECL Installations + + » PECL is a repository of PHP extensions that are made available to you + via the » PEAR packaging system. This section of the manual is intended + to demonstrate how to obtain and install PECL extensions. + + These instructions assume /your/phpsrcdir/ is the path to the PHP + source distribution, and that extname is the name of the PECL + extension. Adjust accordingly. These instructions also assume a + familiarity with the » pear command. The information in the PEAR manual + for the pear command also applies to the pecl command. + + To be useful, a shared extension must be built, installed, and loaded. + The methods described below provide you with various instructions on + how to build and install the extensions, but they do not automatically + load them. Extensions can be loaded by adding an extension directive. + To this php.ini file, or through the use of the dl() function. + + When building PHP modules, it's important to have known-good versions + of the required tools (autoconf, automake, libtool, etc.) See the + » Anonymous Git Instructions for details on the required tools, and + required versions. + __________________________________________________________________ + __________________________________________________________________ + +Downloading PECL extensions + + There are several options for downloading PECL extensions, such as: + * The pecl install extname command downloads the extensions code + automatically, so in this case there is no need for a separate + download. + * » http://pecl.php.net/ The PECL web site contains information about + the different extensions that are offered by the PHP Development + Team. The information available here includes: ChangeLog, release + notes, requirements and other similar details. + * pecl download extname PECL extensions that have releases listed on + the PECL web site are available for download and installation using + the » pecl command. Specific revisions may also be specified. + * SVN Most PECL extensions also reside in SVN. A web-based view may + be seen at » http://svn.php.net/viewvc/pecl/. To download straight + from SVN, the following sequence of commands may be used: + $ svn checkout http://svn.php.net/repository/pecl/extname/trunk + extname + * Windows downloads At this time the PHP project does not compile + Windows binaries for PECL extensions. However, to compile PHP under + Windows see the chapter titled building PHP for Windows. + __________________________________________________________________ + __________________________________________________________________ + +Installing a PHP extension on Windows + + On Windows, you have two ways to load a PHP extension: either compile + it into PHP, or load the DLL. Loading a pre-compiled extension is the + easiest and preferred way. + + To load an extension, you need to have it available as a ".dll" file on + your system. All the extensions are automatically and periodically + compiled by the PHP Group (see next section for the download). + + To compile an extension into PHP, please refer to building from source + documentation. + + To compile a standalone extension (aka a DLL file), please refer to + building from source documentation. If the DLL file is available + neither with your PHP distribution nor in PECL, you may have to compile + it before you can start using the extension. + +Where to find an extension? + + PHP extensions are usually called "php_*.dll" (where the star + represents the name of the extension) and they are located under the + "PHP\ext" ("PHP\extensions" in PHP 4) folder. + + PHP ships with the extensions most useful to the majority of + developers. They are called "core" extensions. + + However, if you need functionality not provided by any core extension, + you may still be able to find one in PECL. The PHP Extension Community + Library (PECL) is a repository for PHP Extensions, providing a + directory of all known extensions and hosting facilities for + downloading and development of PHP extensions. + + If you have developed an extension for your own uses, you might want to + think about hosting it on PECL so that others with the same needs can + benefit from your time. A nice side effect is that you give them a good + chance to give you feedback, (hopefully) thanks, bug reports and even + fixes/patches. Before you submit your extension for hosting on PECL, + please read http://pecl.php.net/package-new.php. + +Which extension to download? + + Many times, you will find several versions of each DLL: + * Different version numbers (at least the first two numbers should + match) + * Different thread safety settings + * Different processor architecture (x86, x64, ...) + * Different debugging settings + * etc. + + You should keep in mind that your extension settings should match all + the settings of the PHP executable you are using. The following PHP + script will tell you all about your PHP settings: + + Example #1 phpinfo() call + <?php + phpinfo(); + ?> + + Or from the command line, run: +drive:\\path\to\php\executable\php.exe -i + +Loading an extension + + The most common way to load a PHP extension is to include it in your + php.ini configuration file. Please note that many extensions are + already present in your php.ini and that you only need to remove the + semicolon to activate them. +;extension=php_extname.dll + +extension=php_extname.dll + + However, some web servers are confusing because they do not use the + php.ini located alongside your PHP executable. To find out where your + actual php.ini resides, look for its path in phpinfo(): +Configuration File (php.ini) Path C:\WINDOWS + +Loaded Configuration File C:\Program Files\PHP\5.2\php.ini + + After activating an extension, save php.ini, restart the web server and + check phpinfo() again. The new extension should now have its own + section. + +Resolving problems + + If the extension does not appear in phpinfo(), you should check your + logs to learn where the problem comes from. + + If you are using PHP from the command line (CLI), the extension loading + error can be read directly on screen. + + If you are using PHP with a web server, the location and format of the + logs vary depending on your software. Please read your web server + documentation to locate the logs, as it does not have anything to do + with PHP itself. + + Common problems are the location of the DLL, the value of the " + extension_dir" setting inside php.ini and compile-time setting + mismatches. + + If the problem lies in a compile-time setting mismatch, you probably + didn't download the right DLL. Try downloading again the extension with + the right settings. Again, phpinfo() can be of great help. + __________________________________________________________________ + __________________________________________________________________ + +Compiling shared PECL extensions with the pecl command + + PECL makes it easy to create shared PHP extensions. Using the » pecl + command, do the following: + + $ pecl install extname + + This will download the source for extname, compile, and install + extname.so into your extension_dir. extname.so may then be loaded via + php.ini + + By default, the pecl command will not install packages that are marked + with the alpha or beta state. If no stable packages are available, you + may install a beta package using the following command: + + $ pecl install extname-beta + + You may also install a specific version using this variant: + + $ pecl install extname-0.1 + + Note: + + After enabling the extension in php.ini, restarting the web service + is required for the changes to be picked up. + __________________________________________________________________ + __________________________________________________________________ + +Compiling shared PECL extensions with phpize + + Sometimes, using the pecl installer is not an option. This could be + because you're behind a firewall, or it could be because the extension + you want to install is not available as a PECL compatible package, such + as unreleased extensions from SVN. If you need to build such an + extension, you can use the lower-level build tools to perform the build + manually. + + The phpize command is used to prepare the build environment for a PHP + extension. In the following sample, the sources for an extension are in + a directory named extname: + +$ cd extname +$ phpize +$ ./configure +$ make +# make install + + A successful install will have created extname.so and put it into the + PHP extensions directory. You'll need to and adjust php.ini and add an + extension=extname.so line before you can use the extension. + + If the system is missing the phpize command, and precompiled packages + (like RPM's) are used, be sure to also install the appropriate devel + version of the PHP package as they often include the phpize command + along with the appropriate header files to build PHP and its + extensions. + + Execute phpize --help to display additional usage information. + __________________________________________________________________ + __________________________________________________________________ + +php-config + + php-config is a simple shell script for obtaining information about the + installed PHP configuration. + + When compiling extensions, if you have multiple PHP versions installed, + you may specify for which installation you'd like to build by using the + --with-php-config option during configuration, specifying the path of + the respective php-config script. + + The list of command line options provided by the php-config script can + be queried anytime by running php-config with the -h switch: +Usage: /usr/local/bin/php-config [OPTION] +Options: + --prefix [...] + --includes [...] + --ldflags [...] + --libs [...] + --extension-dir [...] + --include-dir [...] + --php-binary [...] + --php-sapis [...] + --configure-options [...] + --version [...] + --vernum [...] + + CAPTION: Command line options + + Option Description + --prefix Directory prefix where PHP is installed, e.g. /usr/local + --includes List of -I options with all include files + --ldflags LD Flags which PHP was compiled with + --libs Extra libraries which PHP was compiled with + --extension-dir Directory where extensions are searched by default + --include-dir Directory prefix where header files are installed by + default + --php-binary Full path to php CLI or CGI binary + --php-sapis Show all SAPI modules available + --configure-options Configure options to recreate configuration of + current PHP installation + --version PHP version + --vernum PHP version as integer + __________________________________________________________________ + __________________________________________________________________ + +Compiling PECL extensions statically into PHP + + You might find that you need to build a PECL extension statically into + your PHP binary. To do this, you'll need to place the extension source + under the php-src/ext/ directory and tell the PHP build system to + regenerate its configure script. + +$ cd /your/phpsrcdir/ext +$ pecl download extname +$ gzip -d < extname.tgz | tar -xvf - +$ mv extname-x.x.x extname + + This will result in the following directory: + + /your/phpsrcdir/ext/extname + + From here, force PHP to rebuild the configure script, and then build + PHP as normal: + + $ cd /your/phpsrcdir + $ rm configure + $ ./buildconf --force + $ ./configure --help + $ ./configure --with-extname --enable-someotherext --with-foobar + $ make + $ make install + + Note: To run the 'buildconf' script you need autoconf 2.13 and + automake 1.4+ (newer versions of autoconf may work, but are not + supported). + + Whether --enable-extname or --with-extname is used depends on the + extension. Typically an extension that does not require external + libraries uses --enable. To be sure, run the following after buildconf: + + $ ./configure --help | grep extname + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + +Problems? + +Table of Contents + + * Read the FAQ + * Other problems + * Bug reports + __________________________________________________________________ + +Read the FAQ + + Some problems are more common than others. The most common ones are + listed in the PHP FAQ, part of this manual. + __________________________________________________________________ + __________________________________________________________________ + +Other problems + + If you are still stuck, someone on the PHP installation mailing list + may be able to help you. You should check out the archive first, in + case someone already answered someone else who had the same problem as + you. The archives are available from the support page on + » http://www.php.net/support.php. To subscribe to the PHP installation + mailing list, send an empty mail to + » php-install-subscribe@lists.php.net. The mailing list address is + » php-install@lists.php.net. + + If you want to get help on the mailing list, please try to be precise + and give the necessary details about your environment (which operating + system, what PHP version, what web server, if you are running PHP as + CGI or a server module, safe mode, etc.), and preferably enough code to + make others able to reproduce and test your problem. + __________________________________________________________________ + __________________________________________________________________ + +Bug reports + + If you think you have found a bug in PHP, please report it. The PHP + developers probably don't know about it, and unless you report it, + chances are it won't be fixed. You can report bugs using the + bug-tracking system at » http://bugs.php.net/. Please do not send bug + reports in mailing list or personal letters. The bug system is also + suitable to submit feature requests. + + Read the » How to report a bug document before submitting any bug + reports! + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + +Runtime Configuration + +Table of Contents + + * The configuration file + * .user.ini files + * Where a configuration setting may be set + * How to change configuration settings + __________________________________________________________________ + +The configuration file + + The configuration file (php.ini) is read when PHP starts up. For the + server module versions of PHP, this happens only once when the web + server is started. For the CGI and CLI versions, it happens on every + invocation. + + php.ini is searched for in these locations (in order): + * SAPI module specific location (PHPIniDir directive in Apache 2, -c + command line option in CGI and CLI, php_ini parameter in NSAPI, + PHP_INI_PATH environment variable in THTTPD) + * The PHPRC environment variable. Before PHP 5.2.0, this was checked + after the registry key mentioned below. + * As of PHP 5.2.0, the location of the php.ini file can be set for + different versions of PHP. The following registry keys are examined + in order: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z], + [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] and + [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], where x, y and z mean the PHP + major, minor and release versions. If there is a value for + IniFilePath in any of these keys, the first one found will be used + as the location of the php.ini (Windows only). + * [HKEY_LOCAL_MACHINE\SOFTWARE\PHP], value of IniFilePath (Windows + only). + * Current working directory (except CLI). + * The web server's directory (for SAPI modules), or directory of PHP + (otherwise in Windows). + * Windows directory (C:\windows or C:\winnt) (for Windows), or + --with-config-file-path compile time option. + + If php-SAPI.ini exists (where SAPI is the SAPI in use, so, for example, + php-cli.ini or php-apache.ini), it is used instead of php.ini. The SAPI + name can be determined with php_sapi_name(). + + Note: + + The Apache web server changes the directory to root at startup, + causing PHP to attempt to read php.ini from the root filesystem if + it exists. + + The php.ini directives handled by extensions are documented on the + respective pages of the extensions themselves. A list of the core + directives is available in the appendix. Not all PHP directives are + necessarily documented in this manual: for a complete list of + directives available in your PHP version, please read your well + commented php.ini file. Alternatively, you may find » the latest + php.ini from Git helpful too. + + Example #1 php.ini example +; any text on a line after an unquoted semicolon (;) is ignored +[php] ; section markers (text within square brackets) are also ignored +; Boolean values can be set to either: +; true, on, yes +; or false, off, no, none +register_globals = off +track_errors = yes + +; you can enclose strings in double-quotes +include_path = ".:/usr/local/lib/php" + +; backslashes are treated the same as any other character +include_path = ".;c:\php\lib" + + Since PHP 5.1.0, it is possible to refer to existing .ini variables + from within .ini files. Example: open_basedir = ${open_basedir} + ":/new/dir". + __________________________________________________________________ + __________________________________________________________________ + +.user.ini files + + Since PHP 5.3.0, PHP includes support for .htaccess-style INI files on + a per-directory basis. These files are processed only by the + CGI/FastCGI SAPI. This functionality obsoletes the PECL htscanner + extension. If you are using Apache, use .htaccess files for the same + effect. + + In addition to the main php.ini file, PHP scans for INI files in each + directory, starting with the directory of the requested PHP file, and + working its way up to the current document root (as set in + $_SERVER['DOCUMENT_ROOT']). In case the PHP file is outside the + document root, only its directory is scanned. + + Only INI settings with the modes PHP_INI_PERDIR and PHP_INI_USER will + be recognized in .user.ini-style INI files. + + Two new INI directives, user_ini.filename and user_ini.cache_ttl + control the use of user INI files. + + user_ini.filename sets the name of the file PHP looks for in each + directory; if set to an empty string, PHP doesn't scan at all. The + default is .user.ini. + + user_ini.cache_ttl controls how often user INI files are re-read. The + default is 300 seconds (5 minutes). + __________________________________________________________________ + __________________________________________________________________ + +Where a configuration setting may be set + + These modes determine when and where a PHP directive may or may not be + set, and each directive within the manual refers to one of these modes. + For example, some settings may be set within a PHP script using + ini_set(), whereas others may require php.ini or httpd.conf. + + For example, the output_buffering setting is PHP_INI_PERDIR therefore + it may not be set using ini_set(). However, the display_errors + directive is PHP_INI_ALL therefore it may be set anywhere, including + with ini_set(). + + CAPTION: Definition of PHP_INI_* modes + + Mode Meaning + PHP_INI_USER Entry can be set in user scripts (like with ini_set()) or + in the Windows registry. Since PHP 5.3, entry can be set in .user.ini + PHP_INI_PERDIR Entry can be set in php.ini, .htaccess, httpd.conf or + .user.ini (since PHP 5.3) + PHP_INI_SYSTEM Entry can be set in php.ini or httpd.conf + PHP_INI_ALL Entry can be set anywhere + __________________________________________________________________ + __________________________________________________________________ + +How to change configuration settings + +Running PHP as an Apache module + + When using PHP as an Apache module, you can also change the + configuration settings using directives in Apache configuration files + (e.g. httpd.conf) and .htaccess files. You will need "AllowOverride + Options" or "AllowOverride All" privileges to do so. + + There are several Apache directives that allow you to change the PHP + configuration from within the Apache configuration files. For a listing + of which directives are PHP_INI_ALL, PHP_INI_PERDIR, or PHP_INI_SYSTEM, + have a look at the List of php.ini directives appendix. + + php_value name value + Sets the value of the specified directive. Can be used only with + PHP_INI_ALL and PHP_INI_PERDIR type directives. To clear a + previously set value use none as the value. + + Note: Don't use php_value to set boolean values. php_flag (see + below) should be used instead. + + php_flag name on|off + Used to set a boolean configuration directive. Can be used only + with PHP_INI_ALL and PHP_INI_PERDIR type directives. + + php_admin_value name value + Sets the value of the specified directive. This can not be used + in .htaccess files. Any directive type set with php_admin_value + can not be overridden by .htaccess or ini_set(). To clear a + previously set value use none as the value. + + php_admin_flag name on|off + Used to set a boolean configuration directive. This can not be + used in .htaccess files. Any directive type set with + php_admin_flag can not be overridden by .htaccess or ini_set(). + + Example #1 Apache configuration example +<IfModule mod_php5.c> + php_value include_path ".:/usr/local/lib/php" + php_admin_flag engine on +</IfModule> +<IfModule mod_php4.c> + php_value include_path ".:/usr/local/lib/php" + php_admin_flag engine on +</IfModule> + + Caution + + PHP constants do not exist outside of PHP. For example, in httpd.conf + you can not use PHP constants such as E_ALL or E_NOTICE to set the + error_reporting directive as they will have no meaning and will + evaluate to 0. Use the associated bitmask values instead. These + constants can be used in php.ini + +Changing PHP configuration via the Windows registry + + When running PHP on Windows, the configuration values can be modified + on a per-directory basis using the Windows registry. The configuration + values are stored in the registry key HKLM\SOFTWARE\PHP\Per Directory + Values, in the sub-keys corresponding to the path names. For example, + configuration values for the directory c:\inetpub\wwwroot would be + stored in the key HKLM\SOFTWARE\PHP\Per Directory + Values\c\inetpub\wwwroot. The settings for the directory would be + active for any script running from this directory or any subdirectory + of it. The values under the key should have the name of the PHP + configuration directive and the string value. PHP constants in the + values are not parsed. However, only configuration values changeable in + PHP_INI_USER can be set this way, PHP_INI_PERDIR values can not. + +Other interfaces to PHP + + Regardless of how you run PHP, you can change certain values at runtime + of your scripts through ini_set(). See the documentation on the + ini_set() page for more information. + + If you are interested in a complete list of configuration settings on + your system with their current values, you can execute the phpinfo() + function, and review the resulting page. You can also access the values + of individual configuration directives at runtime using ini_get() or + get_cfg_var(). + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + +Installation + + This section holds common questions about the way to install PHP. PHP + is available for almost any OS (except maybe for MacOS before OSX), and + almost any web server. + + To install PHP, follow the instructions in Installing PHP. + 1. Why shouldn't I use Apache2 with a threaded MPM in a production + environment? + 2. Unix/Windows: Where should my php.ini file be located? + 3. Unix: I installed PHP, but every time I load a document, I get the + message 'Document Contains No Data'! What's going on here? + 4. Unix: I installed PHP using RPMS, but Apache isn't processing the + PHP pages! What's going on here? + 5. Unix: I patched Apache with the FrontPage extensions patch, and + suddenly PHP stopped working. Is PHP incompatible with the Apache + FrontPage extensions? + 6. Unix/Windows: I have installed PHP, but when I try to access a PHP + script file via my browser, I get a blank screen. + 7. Unix/Windows: I have installed PHP, but when try to access a PHP + script file via my browser, I get a server 500 error. + 8. Some operating systems: I have installed PHP without errors, but + when I try to start Apache I get undefined symbol errors: + [mybox:user /src/php5] root# apachectl configtest apachectl: + /usr/local/apache/bin/httpd Undefined symbols: _compress + _uncompress + 9. Windows: I have installed PHP, but when I try to access a PHP + script file via my browser, I get the error: cgi error: The + specified CGI application misbehaved by not returning a complete + set of HTTP headers. The headers it did return are: + 10. Windows: I've followed all the instructions, but still can't get + PHP and IIS to work together! + 11. When running PHP as CGI with IIS, PWS, OmniHTTPD or Xitami, I get + the following error: Security Alert! PHP CGI cannot be accessed + directly.. + 12. How do I know if my php.ini is being found and read? It seems like + it isn't as my changes aren't being implemented. + 13. How do I add my PHP directory to the PATH on Windows? + 14. How do I make the php.ini file available to PHP on windows? + 15. Is it possible to use Apache content negotiation (MultiViews + option) with PHP? + 16. Is PHP limited to process GET and POST request methods only? + + Why shouldn't I use Apache2 with a threaded MPM in a production + environment? + PHP is glue. It is the glue used to build cool web applications + by sticking dozens of 3rd-party libraries together and making it + all appear as one coherent entity through an intuitive and easy + to learn language interface. The flexibility and power of PHP + relies on the stability and robustness of the underlying + platform. It needs a working OS, a working web server and + working 3rd-party libraries to glue together. When any of these + stop working PHP needs ways to identify the problems and fix + them quickly. When you make the underlying framework more + complex by not having completely separate execution threads, + completely separate memory segments and a strong sandbox for + each request to play in, further weaknesses are introduced into + PHP's system. + + If you want to use a threaded MPM, look at a FastCGI + configuration where PHP is running in its own memory space. + + Unix/Windows: Where should my php.ini file be located? + By default on Unix it should be in /usr/local/lib which is + <install-path>/lib. Most people will want to change this at + compile-time with the --with-config-file-path flag. You would, + for example, set it with something like: + +--with-config-file-path=/etc + + And then you would copy php.ini-development from the + distribution to /etc/php.ini and edit it to make any local + changes you want. + +--with-config-file-scan-dir=PATH + + On Windows the default path for the php.ini file is the Windows + directory. If you're using the Apache webserver, php.ini is + first searched in the Apaches install directory, e.g. c:\program + files\apache group\apache. This way you can have different + php.ini files for different versions of Apache on the same + machine. + + See also the chapter about the configuration file. + + Unix: I installed PHP, but every time I load a document, I get the + message 'Document Contains No Data'! What's going on here? + This probably means that PHP is having some sort of problem and + is core-dumping. Look in your server error log to see if this is + the case, and then try to reproduce the problem with a small + test case. If you know how to use 'gdb', it is very helpful when + you can provide a backtrace with your bug report to help the + developers pinpoint the problem. If you are using PHP as an + Apache module try something like: + + + Stop your httpd processes + + gdb httpd + + Stop your httpd processes + + > run -X -f /path/to/httpd.conf + + Then fetch the URL causing the problem with your browser + + > run -X -f /path/to/httpd.conf + + If you are getting a core dump, gdb should inform you of this + now + + type: bt + + You should include your backtrace in your bug report. This + should be submitted to » http://bugs.php.net/ + + If your script uses the regular expression functions + (preg_match() and friends), you should make sure that you + compiled PHP and Apache with the same regular expression + package. This should happen automatically with PHP and Apache + 1.3.x + + Unix: I installed PHP using RPMS, but Apache isn't processing the PHP + pages! What's going on here? + Assuming you installed both Apache and PHP from RPM packages, + you need to uncomment or add some or all of the following lines + in your httpd.conf file: + +# Extra Modules +AddModule mod_php.c +AddModule mod_perl.c + +# Extra Modules +LoadModule php_module modules/mod_php.so +LoadModule php5_module modules/libphp5.so +LoadModule perl_module modules/libperl.so + + And add: + +AddType application/x-httpd-php .php + + ... to the global properties, or to the properties of the + VirtualDomain you want to have PHP support added to. + + Unix: I patched Apache with the FrontPage extensions patch, and + suddenly PHP stopped working. Is PHP incompatible with the + Apache FrontPage extensions? + No, PHP works fine with the FrontPage extensions. The problem is + that the FrontPage patch modifies several Apache structures, + that PHP relies on. Recompiling PHP (using 'make clean ; make') + after the FP patch is applied would solve the problem. + + Unix/Windows: I have installed PHP, but when I try to access a PHP + script file via my browser, I get a blank screen. + Do a 'view source' in the web browser and you will probably find + that you can see the source code of your PHP script. This means + that the web server did not send the script to PHP for + interpretation. Something is wrong with the server configuration + - double check the server configuration against the PHP + installation instructions. + + Unix/Windows: I have installed PHP, but when try to access a PHP script + file via my browser, I get a server 500 error. + Something went wrong when the server tried to run PHP. To get to + see a sensible error message, from the command line, change to + the directory containing the PHP executable (php.exe on Windows) + and run php -i. If PHP has any problems running, then a suitable + error message will be displayed which will give you a clue as to + what needs to be done next. If you get a screen full of HTML + codes (the output of the phpinfo() function) then PHP is + working, and your problem may be related to your server + configuration which you should double check. + + Some operating systems: I have installed PHP without errors, but when I + try to start Apache I get undefined symbol errors: + +[mybox:user /src/php5] root# apachectl configtest + apachectl: /usr/local/apache/bin/httpd Undefined symbols: + _compress + _uncompress + + This has actually nothing to do with PHP, but with the MySQL + client libraries. Some need --with-zlib , others do not. This is + also covered in the MySQL FAQ. + + Windows: I have installed PHP, but when I try to access a PHP script + file via my browser, I get the error: + +cgi error: + The specified CGI application misbehaved by not + returning a complete set of HTTP headers. + The headers it did return are: + + This error message means that PHP failed to output anything at + all. To get to see a sensible error message, from the command + line, change to the directory containing the PHP executable + (php.exe on Windows) and run php -i. If PHP has any problems + running, then a suitable error message will be displayed which + will give you a clue as to what needs to be done next. If you + get a screen full of HTML codes (the output of the phpinfo() + function) then PHP is working. + + Once PHP is working at the command line, try accessing the + script via the browser again. If it still fails then it could be + one of the following: + + + File permissions on your PHP script, php.exe, php5ts.dll, + php.ini or any PHP extensions you are trying to load are such + that the anonymous internet user ISUR_<machinename> cannot + access them. + + The script file does not exist (or possibly isn't where you + think it is relative to your web root directory). Note that + for IIS you can trap this error by ticking the 'check file + exists' box when setting up the script mappings in the + Internet Services Manager. If a script file does not exist + then the server will return a 404 error instead. There is also + the additional benefit that IIS will do any authentication + required for you based on the NTLanMan permissions on your + script file. + + Windows: I've followed all the instructions, but still can't get PHP + and IIS to work together! + Make sure any user who needs to run a PHP script has the rights + to run php.exe! IIS uses an anonymous user which is added at the + time IIS is installed. This user needs rights to php.exe. Also, + any authenticated user will also need rights to execute php.exe. + And for IIS4 you need to tell it that PHP is a script engine. + Also, you will want to read this faq. + + When running PHP as CGI with IIS, PWS, OmniHTTPD or Xitami, I get the + following error: Security Alert! PHP CGI cannot be accessed + directly.. + You must set the cgi.force_redirect directive to 0. It defaults + to 1 so be sure the directive isn't commented out (with a ;). + Like all directives, this is set in php.ini + + Because the default is 1, it's critical that you're 100% sure + that the correct php.ini file is being read. Read this faq for + details. + + How do I know if my php.ini is being found and read? It seems like it + isn't as my changes aren't being implemented. + To be sure your php.ini is being read by PHP, make a call to + phpinfo(). Near the top, there will be a listing called + Configuration File (php.ini). This will tell you where PHP is + looking for php.ini and whether or not it's being read. If just + a directory PATH exists, then it's not being read, and you + should put your php.ini in that directory. If php.ini is + included within the PATH, it is being read. + + If php.ini is being read and you're running PHP as a module, + then be sure to restart your web server after making changes to + php.ini + + See also php_ini_loaded_file(). + + How do I add my PHP directory to the PATH on Windows? + On Windows NT+ and Windows Server 2000+: + + + Go to Control Panel and open the System icon (Start -> + Settings -> Control Panel -> System, or just Start -> Control + Panel -> System for Windows XP/2003+) + + Go to the Advanced tab + + Click on the 'Environment Variables' button + + Look into the 'System Variables' pane + + Find the Path entry (you may need to scroll to find it) + + Double click on the Path entry + + Enter your PHP directory at the end, including ';' before + (e.g. ;C:\php) + + Press OK + + On Windows 98/Me you need to edit the autoexec.bat file: + + + Open the Notepad (Start -> Run and enter notepad) + + Open the C:\autoexec.bat file + + Locate the line with PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... + and add: ;C:\php to the end of the line + + Save the file and restart your computer + + Note: Be sure to reboot after following the steps above to ensure + that the PATH changes are applied. + + The PHP manual used to promote the copying of files into the + Windows system directory, this is because this directory + (C:\Windows, C:\WINNT, etc.) is by default in the systems PATH. + Copying files into the Windows system directory has long since + been deprecated and may cause problems. + + How do I make the php.ini file available to PHP on windows? + There are several ways of doing this. If you are using Apache, + read their installation specific instructions (Apache 1, Apache + 2), otherwise you must set the PHPRC environment variable: + + On Windows NT, 2000, XP and 2003: + + + Go to Control Panel and open the System icon (Start -> + Settings -> Control Panel -> System, or just Start -> Control + Panel -> System for Windows XP/2003) + + Go to the Advanced tab + + Click on the 'Environment Variables' button + + Look into the 'System variables' pane + + Click on 'New' and enter 'PHPRC' as the variable name and the + directory where php.ini is located as the variable value (e.g. + C:\php) + + Press OK and restart your computer + + On Windows 98/Me you need to edit the autoexec.bat file: + + + Open the Notepad (Start -> Run and enter notepad) + + Open the C:\autoexec.bat file + + Add a new line to the end of the file: set PHPRC=C:\php + (replace C:\php with the directory where php.ini is located). + Please note that the path cannot contain spaces. For instance, + if you have installed PHP in C:\Program Files\PHP, you would + enter C:\PROGRA~1\PHP instead. + + Save the file and restart your computer + + Is it possible to use Apache content negotiation (MultiViews option) + with PHP? + If links to PHP files include extension, everything works + perfect. This FAQ is only for the case when links to PHP files + don't include extension and you want to use content negotiation + to choose PHP files from URL with no extension. In this case, + replace the line AddType application/x-httpd-php .php with: + +AddHandler php5-script php +AddType text/html php + + This solution doesn't work for Apache 1 as PHP module doesn't + catch php-script. + + Is PHP limited to process GET and POST request methods only? + No, it is possible to handle any request method, e.g. CONNECT. + Proper response status can be sent with header(). If only GET + and POST methods should be handled, it can be achieved with this + Apache configuration: + +<LimitExcept GET POST> +Deny from all +</LimitExcept> |