12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120 |
- __________________________________________________________________
- 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 described 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, 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, 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>
|