Annotation of embedaddon/php/INSTALL, revision 1.1
1.1 ! misho 1: __________________________________________________________________
! 2:
! 3: Installing PHP
! 4: __________________________________________________________________
! 5:
! 6: * General Installation Considerations
! 7: * Installation on Unix systems
! 8: + Apache 1.3.x on Unix systems
! 9: + Apache 2.x on Unix systems
! 10: + Lighttpd 1.4 on Unix systems
! 11: + Sun, iPlanet and Netscape servers on Sun Solaris
! 12: + CGI and command line setups
! 13: + HP-UX specific installation notes
! 14: + OpenBSD installation notes
! 15: + Solaris specific installation tips
! 16: + Debian GNU/Linux installation notes
! 17: * Installation on Mac OS X
! 18: + Using Packages
! 19: + Using the bundled PHP
! 20: + Compiling PHP on Mac OS X
! 21: * Installation of PECL extensions
! 22: + Introduction to PECL Installations
! 23: + Downloading PECL extensions
! 24: + Installing a PHP extension on Windows
! 25: + Compiling shared PECL extensions with the pecl command
! 26: + Compiling shared PECL extensions with phpize
! 27: + Compiling PECL extensions statically into PHP
! 28: * Problems?
! 29: + Read the FAQ
! 30: + Other problems
! 31: + Bug reports
! 32: * Runtime Configuration
! 33: + The configuration file
! 34: + .user.ini files
! 35: + Where a configuration setting may be set
! 36: + How to change configuration settings
! 37: * Installation
! 38: __________________________________________________________________
! 39:
! 40: __________________________________________________________________
! 41:
! 42: Preface
! 43:
! 44: These installation instructions were generated from the HTML version of
! 45: the PHP Manual so formatting and linking have been altered. See the
! 46: online and updated version at: http://php.net/install.unix
! 47: __________________________________________________________________
! 48:
! 49: General Installation Considerations
! 50:
! 51: Before starting the installation, first you need to know what do you
! 52: want to use PHP for. There are three main fields you can use PHP, as
! 53: described in the What can PHP do? section:
! 54: * Websites and web applications (server-side scripting)
! 55: * Command line scripting
! 56: * Desktop (GUI) applications
! 57:
! 58: For the first and most common form, you need three things: PHP itself,
! 59: a web server and a web browser. You probably already have a web
! 60: browser, and depending on your operating system setup, you may also
! 61: have a web server (e.g. Apache on Linux and MacOS X; IIS on Windows).
! 62: You may also rent webspace at a company. This way, you don't need to
! 63: set up anything on your own, only write your PHP scripts, upload it to
! 64: the server you rent, and see the results in your browser.
! 65:
! 66: In case of setting up the server and PHP on your own, you have two
! 67: choices for the method of connecting PHP to the server. For many
! 68: servers PHP has a direct module interface (also called SAPI). These
! 69: servers include Apache, Microsoft Internet Information Server, Netscape
! 70: and iPlanet servers. Many other servers have support for ISAPI, the
! 71: Microsoft module interface (OmniHTTPd for example). If PHP has no
! 72: module support for your web server, you can always use it as a CGI or
! 73: FastCGI processor. This means you set up your server to use the CGI
! 74: executable of PHP to process all PHP file requests on the server.
! 75:
! 76: If you are also interested to use PHP for command line scripting (e.g.
! 77: write scripts autogenerating some images for you offline, or processing
! 78: text files depending on some arguments you pass to them), you always
! 79: need the command line executable. For more information, read the
! 80: section about writing command line PHP applications. In this case, you
! 81: need no server and no browser.
! 82:
! 83: With PHP you can also write desktop GUI applications using the PHP-GTK
! 84: extension. This is a completely different approach than writing web
! 85: pages, as you do not output any HTML, but manage windows and objects
! 86: within them. For more information about PHP-GTK, please » visit the
! 87: site dedicated to this extension. PHP-GTK is not included in the
! 88: official PHP distribution.
! 89:
! 90: From now on, this section deals with setting up PHP for web servers on
! 91: Unix and Windows with server module interfaces and CGI executables. You
! 92: will also find information on the command line executable in the
! 93: following sections.
! 94:
! 95: PHP source code and binary distributions for Windows can be found at »
! 96: http://www.php.net/downloads.php. We recommend you to choose a » mirror
! 97: nearest to you for downloading the distributions.
! 98: __________________________________________________________________
! 99: __________________________________________________________________
! 100:
! 101: Installation on Unix systems
! 102:
! 103: Table of Contents
! 104:
! 105: * Apache 1.3.x on Unix systems
! 106: * Apache 2.x on Unix systems
! 107: * Lighttpd 1.4 on Unix systems
! 108: * Sun, iPlanet and Netscape servers on Sun Solaris
! 109: * CGI and command line setups
! 110: * HP-UX specific installation notes
! 111: * OpenBSD installation notes
! 112: * Solaris specific installation tips
! 113: * Debian GNU/Linux installation notes
! 114:
! 115: This section will guide you through the general configuration and
! 116: installation of PHP on Unix systems. Be sure to investigate any
! 117: sections specific to your platform or web server before you begin the
! 118: process.
! 119:
! 120: As our manual outlines in the General Installation Considerations
! 121: section, we are mainly dealing with web centric setups of PHP in this
! 122: section, although we will cover setting up PHP for command line usage
! 123: as well.
! 124:
! 125: There are several ways to install PHP for the Unix platform, either
! 126: with a compile and configure process, or through various pre-packaged
! 127: methods. This documentation is mainly focused around the process of
! 128: compiling and configuring PHP. Many Unix like systems have some sort of
! 129: package installation system. This can assist in setting up a standard
! 130: configuration, but if you need to have a different set of features
! 131: (such as a secure server, or a different database driver), you may need
! 132: to build PHP and/or your web server. If you are unfamiliar with
! 133: building and compiling your own software, it is worth checking to see
! 134: whether somebody has already built a packaged version of PHP with the
! 135: features you need.
! 136:
! 137: Prerequisite knowledge and software for compiling:
! 138: * Basic Unix skills (being able to operate "make" and a C compiler)
! 139: * An ANSI C compiler
! 140: * A web server
! 141: * Any module specific components (such as GD, PDF libs, etc.)
! 142:
! 143: When building directly from SVN sources or after custom modifications
! 144: you might also need:
! 145: * autoconf: 2.13
! 146: * automake: 1.4+
! 147: * libtool: 1.4.x+ (except 1.4.2)
! 148: * re2c: Version 0.13.4 or newer
! 149: * flex: Version 2.5.4 (for PHP <= 5.2)
! 150: * bison: Version 1.28 (preferred), 1.35, or 1.75
! 151:
! 152: The initial PHP setup and configuration process is controlled by the
! 153: use of the command line options of the configure script. You could get
! 154: a list of all available options along with short explanations running
! 155: ./configure --help. Our manual documents the different options
! 156: separately. You will find the core options in the appendix, while the
! 157: different extension specific options are descibed on the reference
! 158: pages.
! 159:
! 160: When PHP is configured, you are ready to build the module and/or
! 161: executables. The command make should take care of this. If it fails and
! 162: you can't figure out why, see the Problems section.
! 163: __________________________________________________________________
! 164:
! 165: Apache 1.3.x on Unix systems
! 166:
! 167: This section contains notes and hints specific to Apache installs of
! 168: PHP on Unix platforms. We also have instructions and notes for Apache 2
! 169: on a separate page.
! 170:
! 171: You can select arguments to add to the configure on line 10 below from
! 172: the list of core configure options and from extension specific options
! 173: described at the respective places in the manual. The version numbers
! 174: have been omitted here, to ensure the instructions are not incorrect.
! 175: You will need to replace the 'xxx' here with the correct values from
! 176: your files.
! 177:
! 178: Example #1 Installation Instructions (Apache Shared Module Version) for
! 179: PHP
! 180: 1. gunzip apache_xxx.tar.gz
! 181: 2. tar -xvf apache_xxx.tar
! 182: 3. gunzip php-xxx.tar.gz
! 183: 4. tar -xvf php-xxx.tar
! 184: 5. cd apache_xxx
! 185: 6. ./configure --prefix=/www --enable-module=so
! 186: 7. make
! 187: 8. make install
! 188: 9. cd ../php-xxx
! 189:
! 190: 10. Now, configure your PHP. This is where you customize your PHP
! 191: with various options, like which extensions will be enabled. Do a
! 192: ./configure --help for a list of available options. In our example
! 193: we'll do a simple configure with Apache 1 and MySQL support. Your
! 194: path to apxs may differ from our example.
! 195:
! 196: ./configure --with-mysql --with-apxs=/www/bin/apxs
! 197:
! 198: 11. make
! 199: 12. make install
! 200:
! 201: If you decide to change your configure options after installation,
! 202: you only need to repeat the last three steps. You only need to
! 203: restart apache for the new module to take effect. A recompile of
! 204: Apache is not needed.
! 205:
! 206: Note that unless told otherwise, 'make install' will also install PEAR,
! 207: various PHP tools such as phpize, install the PHP CLI, and more.
! 208:
! 209: 13. Setup your php.ini file:
! 210:
! 211: cp php.ini-development /usr/local/lib/php.ini
! 212:
! 213: You may edit your .ini file to set PHP options. If you prefer your
! 214: php.ini in another location, use --with-config-file-path=/some/path in
! 215: step 10.
! 216:
! 217: If you instead choose php.ini-production, be certain to read the list
! 218: of changes within, as they affect how PHP behaves.
! 219:
! 220: 14. Edit your httpd.conf to load the PHP module. The path on the right hand
! 221: side of the LoadModule statement must point to the path of the PHP
! 222: module on your system. The make install from above may have already
! 223: added this for you, but be sure to check.
! 224:
! 225: LoadModule php5_module libexec/libphp5.so
! 226:
! 227: 15. And in the AddModule section of httpd.conf, somewhere under the
! 228: ClearModuleList, add this:
! 229:
! 230: AddModule mod_php5.c
! 231:
! 232: 16. Tell Apache to parse certain extensions as PHP. For example,
! 233: let's have Apache parse the .php extension as PHP. You could
! 234: have any extension(s) parse as PHP by simply adding more, with
! 235: each separated by a space. We'll add .phtml to demonstrate.
! 236:
! 237: AddType application/x-httpd-php .php .phtml
! 238:
! 239: It's also common to setup the .phps extension to show highlighted PHP
! 240: source, this can be done with:
! 241:
! 242: AddType application/x-httpd-php-source .phps
! 243:
! 244: 17. Use your normal procedure for starting the Apache server. (You must
! 245: stop and restart the server, not just cause the server to reload by
! 246: using a HUP or USR1 signal.)
! 247:
! 248: Alternatively, to install PHP as a static object:
! 249:
! 250: Example #2 Installation Instructions (Static Module Installation for
! 251: Apache) for PHP
! 252: 1. gunzip -c apache_1.3.x.tar.gz | tar xf -
! 253: 2. cd apache_1.3.x
! 254: 3. ./configure
! 255: 4. cd ..
! 256:
! 257: 5. gunzip -c php-5.x.y.tar.gz | tar xf -
! 258: 6. cd php-5.x.y
! 259: 7. ./configure --with-mysql --with-apache=../apache_1.3.x
! 260: 8. make
! 261: 9. make install
! 262:
! 263: 10. cd ../apache_1.3.x
! 264:
! 265: 11. ./configure --prefix=/www --activate-module=src/modules/php5/libphp5.a
! 266: (The above line is correct! Yes, we know libphp5.a does not exist at this
! 267: stage. It isn't supposed to. It will be created.)
! 268:
! 269: 12. make
! 270: (you should now have an httpd binary which you can copy to your Apache bin d
! 271: ir if
! 272: it is your first install then you need to "make install" as well)
! 273:
! 274: 13. cd ../php-5.x.y
! 275: 14. cp php.ini-development /usr/local/lib/php.ini
! 276:
! 277: 15. You can edit /usr/local/lib/php.ini file to set PHP options.
! 278: Edit your httpd.conf or srm.conf file and add:
! 279: AddType application/x-httpd-php .php
! 280:
! 281: Depending on your Apache install and Unix variant, there are many
! 282: possible ways to stop and restart the server. Below are some typical
! 283: lines used in restarting the server, for different apache/unix
! 284: installations. You should replace /path/to/ with the path to these
! 285: applications on your systems.
! 286:
! 287: Example #3 Example commands for restarting Apache
! 288: 1. Several Linux and SysV variants:
! 289: /etc/rc.d/init.d/httpd restart
! 290:
! 291: 2. Using apachectl scripts:
! 292: /path/to/apachectl stop
! 293: /path/to/apachectl start
! 294:
! 295: 3. httpdctl and httpsdctl (Using OpenSSL), similar to apachectl:
! 296: /path/to/httpsdctl stop
! 297: /path/to/httpsdctl start
! 298:
! 299: 4. Using mod_ssl, or another SSL server, you may want to manually
! 300: stop and start:
! 301: /path/to/apachectl stop
! 302: /path/to/apachectl startssl
! 303:
! 304: The locations of the apachectl and http(s)dctl binaries often vary. If
! 305: your system has locate or whereis or which commands, these can assist
! 306: you in finding your server control programs.
! 307:
! 308: Different examples of compiling PHP for apache are as follows:
! 309: ./configure --with-apxs --with-pgsql
! 310:
! 311: This will create a libphp5.so shared library that is loaded into Apache
! 312: using a LoadModule line in Apache's httpd.conf file. The PostgreSQL
! 313: support is embedded into this library.
! 314:
! 315: ./configure --with-apxs --with-pgsql=shared
! 316:
! 317: This will create a libphp5.so shared library for Apache, but it will
! 318: also create a pgsql.so shared library that is loaded into PHP either by
! 319: using the extension directive in php.ini file or by loading it
! 320: explicitly in a script using the dl() function.
! 321:
! 322: ./configure --with-apache=/path/to/apache_source --with-pgsql
! 323:
! 324: This will create a libmodphp5.a library, a mod_php5.c and some
! 325: accompanying files and copy this into the src/modules/php5 directory in
! 326: the Apache source tree. Then you compile Apache using
! 327: --activate-module=src/modules/php5/libphp5.a and the Apache build
! 328: system will create libphp5.a and link it statically into the httpd
! 329: binary. The PostgreSQL support is included directly into this httpd
! 330: binary, so the final result here is a single httpd binary that includes
! 331: all of Apache and all of PHP.
! 332:
! 333: ./configure --with-apache=/path/to/apache_source --with-pgsql=shared
! 334:
! 335: Same as before, except instead of including PostgreSQL support directly
! 336: into the final httpd you will get a pgsql.so shared library that you
! 337: can load into PHP from either the php.ini file or directly using dl().
! 338:
! 339: When choosing to build PHP in different ways, you should consider the
! 340: advantages and drawbacks of each method. Building as a shared object
! 341: will mean that you can compile apache separately, and don't have to
! 342: recompile everything as you add to, or change, PHP. Building PHP into
! 343: apache (static method) means that PHP will load and run faster. For
! 344: more information, see the Apache » web page on DSO support.
! 345:
! 346: Note:
! 347:
! 348: Apache's default httpd.conf currently ships with a section that
! 349: looks like this:
! 350:
! 351: User nobody
! 352: Group "#-1"
! 353:
! 354: Unless you change that to "Group nogroup" or something like that
! 355: ("Group daemon" is also very common) PHP will not be able to open
! 356: files.
! 357:
! 358: Note:
! 359:
! 360: Make sure you specify the installed version of apxs when using
! 361: --with-apxs=/path/to/apxs . You must NOT use the apxs version that
! 362: is in the apache sources but the one that is actually installed on
! 363: your system.
! 364: __________________________________________________________________
! 365: __________________________________________________________________
! 366:
! 367: Apache 2.x on Unix systems
! 368:
! 369: This section contains notes and hints specific to Apache 2.x installs
! 370: of PHP on Unix systems.
! 371: Warning
! 372:
! 373: We do not recommend using a threaded MPM in production with Apache 2.
! 374: Use the prefork MPM, which is the default MPM with Apache 2.0 and 2.2.
! 375: For information on why, read the related FAQ entry on using Apache2
! 376: with a threaded MPM
! 377:
! 378: The » Apache Documentation is the most authoritative source of
! 379: information on the Apache 2.x server. More information about
! 380: installation options for Apache may be found there.
! 381:
! 382: The most recent version of Apache HTTP Server may be obtained from »
! 383: Apache download site, and a fitting PHP version from the above
! 384: mentioned places. This quick guide covers only the basics to get
! 385: started with Apache 2.x and PHP. For more information read the » Apache
! 386: Documentation. The version numbers have been omitted here, to ensure
! 387: the instructions are not incorrect. In the examples below, 'NN' should
! 388: be replaced with the specific version of Apache being used.
! 389:
! 390: There are currently two versions of Apache 2.x - there's 2.0 and 2.2.
! 391: While there are various reasons for choosing each, 2.2 is the current
! 392: latest version, and the one that is recommended, if that option is
! 393: available to you. However, the instructions here will work for either
! 394: 2.0 or 2.2.
! 395: 1. Obtain the Apache HTTP server from the location listed above, and
! 396: unpack it:
! 397: gzip -d httpd-2_x_NN.tar.gz
! 398: tar -xf httpd-2_x_NN.tar
! 399:
! 400: 2. Likewise, obtain and unpack the PHP source:
! 401: gunzip php-NN.tar.gz
! 402: tar -xf php-NN.tar
! 403:
! 404: 3. Build and install Apache. Consult the Apache install documentation
! 405: for more details on building Apache.
! 406: cd httpd-2_x_NN
! 407: ./configure --enable-so
! 408: make
! 409: make install
! 410:
! 411: 4. Now you have Apache 2.x.NN available under /usr/local/apache2,
! 412: configured with loadable module support and the standard MPM
! 413: prefork. To test the installation use your normal procedure for
! 414: starting the Apache server, e.g.:
! 415: /usr/local/apache2/bin/apachectl start
! 416:
! 417: and stop the server to go on with the configuration for PHP:
! 418: /usr/local/apache2/bin/apachectl stop
! 419:
! 420: 5. Now, configure and build PHP. This is where you customize PHP with
! 421: various options, like which extensions will be enabled. Run
! 422: ./configure --help for a list of available options. In our example
! 423: we'll do a simple configure with Apache 2 and MySQL support.
! 424: If you built Apache from source, as described above, the below
! 425: example will match your path for apxs, but if you installed Apache
! 426: some other way, you'll need to adjust the path to apxs accordingly.
! 427: Note that some distros may rename apxs to apxs2.
! 428: cd ../php-NN
! 429: ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql
! 430: make
! 431: make install
! 432:
! 433: If you decide to change your configure options after installation,
! 434: you'll need to re-run the configure, make, and make install steps.
! 435: You only need to restart apache for the new module to take effect.
! 436: A recompile of Apache is not needed.
! 437: Note that unless told otherwise, 'make install' will also install
! 438: PEAR, various PHP tools such as phpize, install the PHP CLI, and
! 439: more.
! 440: 6. Setup your php.ini
! 441: cp php.ini-development /usr/local/lib/php.ini
! 442:
! 443: You may edit your .ini file to set PHP options. If you prefer
! 444: having php.ini in another location, use
! 445: --with-config-file-path=/some/path in step 5.
! 446: If you instead choose php.ini-production, be certain to read the
! 447: list of changes within, as they affect how PHP behaves.
! 448: 7. Edit your httpd.conf to load the PHP module. The path on the right
! 449: hand side of the LoadModule statement must point to the path of the
! 450: PHP module on your system. The make install from above may have
! 451: already added this for you, but be sure to check.
! 452: LoadModule php5_module modules/libphp5.so
! 453: 8. Tell Apache to parse certain extensions as PHP. For example, let's
! 454: have Apache parse .php files as PHP. Instead of only using the
! 455: Apache AddType directive, we want to avoid potentially dangerous
! 456: uploads and created files such as exploit.php.jpg from being
! 457: executed as PHP. Using this example, you could have any
! 458: extension(s) parse as PHP by simply adding them. We'll add .php to
! 459: demonstrate.
! 460: <FilesMatch \.php$>
! 461: SetHandler application/x-httpd-php
! 462: </FilesMatch>
! 463: Or, if we wanted to allow .php, .php2, .php3, .php4, .php5, .php6,
! 464: and .phtml files to be executed as PHP, but nothing else, we'd use
! 465: this:
! 466: <FilesMatch "\.ph(p[2-6]?|tml)$">
! 467: SetHandler application/x-httpd-php
! 468: </FilesMatch>
! 469: And to allow .phps files to be handled by the php source filter,
! 470: and displayed as syntax-highlighted source code, use this:
! 471: <FilesMatch "\.phps$">
! 472: SetHandler application/x-httpd-php-source
! 473: </FilesMatch>
! 474: mod_rewrite may be used To allow any arbitrary .php file to be
! 475: displayed as syntax-highlighted source code, without having to
! 476: rename or copy it to a .phps file:
! 477: RewriteEngine On
! 478: RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
! 479: The php source filter should not be enabled on production systems,
! 480: where it may expose confidential or otherwise sensitive information
! 481: embedded in source code.
! 482: 9. Use your normal procedure for starting the Apache server, e.g.:
! 483: /usr/local/apache2/bin/apachectl start
! 484:
! 485: OR
! 486: service httpd restart
! 487:
! 488: Following the steps above you will have a running Apache2 web server
! 489: with support for PHP as a SAPI module. Of course there are many more
! 490: configuration options available Apache and PHP. For more information
! 491: type ./configure --help in the corresponding source tree.
! 492:
! 493: Apache may be built multithreaded by selecting the worker MPM, rather
! 494: than the standard prefork MPM, when Apache is built. This is done by
! 495: adding the following option to the argument passed to ./configure, in
! 496: step 3 above:
! 497: --with-mpm=worker
! 498:
! 499: This should not be undertaken without being aware of the consequences
! 500: of this decision, and having at least a fair understanding of the
! 501: implications. The Apache documentation regarding » MPM-Modules
! 502: discusses MPMs in a great deal more detail.
! 503:
! 504: Note:
! 505:
! 506: The Apache MultiViews FAQ discusses using multiviews with PHP.
! 507:
! 508: Note:
! 509:
! 510: To build a multithreaded version of Apache, the target system must
! 511: support threads. In this case, PHP should also be built with
! 512: experimental Zend Thread Safety (ZTS). Under this configuration, not
! 513: all extensions will be available. The recommended setup is to build
! 514: Apache with the default prefork MPM-Module.
! 515: __________________________________________________________________
! 516: __________________________________________________________________
! 517:
! 518: Lighttpd 1.4 on Unix systems
! 519:
! 520: This section contains notes and hints specific to Lighttpd 1.4 installs
! 521: of PHP on Unix systems.
! 522:
! 523: Please use the » Lighttpd trac to learn how to install Lighttpd
! 524: properly before continuing.
! 525:
! 526: Fastcgi is the preferred SAPI to connect PHP and Lighttpd. Fastcgi is
! 527: automagically enabled in php-cgi in PHP 5.3, but for older versions
! 528: configure PHP with --enable-fastcgi. To confirm that PHP has fastcgi
! 529: enabled, php -v should contain PHP 5.2.5 (cgi-fcgi) Before PHP 5.2.3,
! 530: fastcgi was enabled on the php binary (there was no php-cgi).
! 531:
! 532: Letting Lighttpd spawn php processes
! 533:
! 534: To configure Lighttpd to connect to php and spawn fastcgi processes,
! 535: edit lighttpd.conf. Sockets are preferred to connect to fastcgi
! 536: processes on the local system.
! 537:
! 538: Example #1 Partial lighttpd.conf
! 539: server.modules += ( "mod_fastcgi" )
! 540:
! 541: fastcgi.server = ( ".php" =>
! 542: ((
! 543: "socket" => "/tmp/php.socket",
! 544: "bin-path" => "/usr/local/bin/php-cgi",
! 545: "bin-environment" => (
! 546: "PHP_FCGI_CHILDREN" => "16",
! 547: "PHP_FCGI_MAX_REQUESTS" => "10000"
! 548: ),
! 549: "min-procs" => 1,
! 550: "max-procs" => 1,
! 551: "idle-timeout" => 20
! 552: ))
! 553: )
! 554:
! 555: The bin-path directive allows lighttpd to spawn fastcgi processes
! 556: dynamically. PHP will spawn children according to the PHP_FCGI_CHILDREN
! 557: environment variable. The "bin-environment" directive sets the
! 558: environment for the spawned processes. PHP will kill a child process
! 559: after the number of requests specified by PHP_FCGI_MAX_REQUESTS is
! 560: reached. The directives "min-procs" and "max-procs" should generally be
! 561: avoided with PHP. PHP manages its own children and opcode caches like
! 562: APC will only share among children managed by PHP. If "min-procs" is
! 563: set to something greater than 1, the total number of php responders
! 564: will be multiplied PHP_FCGI_CHILDREN (2 min-procs * 16 children gives
! 565: 32 responders).
! 566:
! 567: Spawning with spawn-fcgi
! 568:
! 569: Lighttpd provides a program called spawn-fcgi to ease the process of
! 570: spawning fastcgi processes easier.
! 571:
! 572: Spawning php-cgi
! 573:
! 574: It is possible to spawn processes without spawn-fcgi, though a bit of
! 575: heavy-lifting is required. Setting the PHP_FCGI_CHILDREN environment
! 576: var controls how many children PHP will spawn to handle incoming
! 577: requests. Setting PHP_FCGI_MAX_REQUESTS will determine how long (in
! 578: requests) each child will live. Here's a simple bash script to help
! 579: spawn php responders.
! 580:
! 581: Example #2 Spawning FastCGI Responders
! 582: #!/bin/sh
! 583:
! 584: # Location of the php-cgi binary
! 585: PHP=/usr/local/bin/php-cgi
! 586:
! 587: # PID File location
! 588: PHP_PID=/tmp/php.pid
! 589:
! 590: # Binding to an address
! 591: #FCGI_BIND_ADDRESS=10.0.1.1:10000
! 592: # Binding to a domain socket
! 593: FCGI_BIND_ADDRESS=/tmp/php.sock
! 594:
! 595: PHP_FCGI_CHILDREN=16
! 596: PHP_FCGI_MAX_REQUESTS=10000
! 597:
! 598: env -i PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN \
! 599: PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS \
! 600: $PHP -b $FCGI_BIND_ADDRESS &
! 601:
! 602: echo $! > "$PHP_PID"
! 603:
! 604:
! 605: Connecting to remote FCGI instances
! 606:
! 607: Fastcgi instances can be spawned on multiple remote machines in order
! 608: to scale applications.
! 609:
! 610: Example #3 Connecting to remote php-fastcgi instances
! 611: fastcgi.server = ( ".php" =>
! 612: (( "host" => "10.0.0.2", "port" => 1030 ),
! 613: ( "host" => "10.0.0.3", "port" => 1030 ))
! 614: )
! 615: __________________________________________________________________
! 616: __________________________________________________________________
! 617:
! 618: Sun, iPlanet and Netscape servers on Sun Solaris
! 619:
! 620: This section contains notes and hints specific to Sun Java System Web
! 621: Server, Sun ONE Web Server, iPlanet and Netscape server installs of PHP
! 622: on Sun Solaris.
! 623:
! 624: From PHP 4.3.3 on you can use PHP scripts with the NSAPI module to
! 625: generate custom directory listings and error pages. Additional
! 626: functions for Apache compatibility are also available. For support in
! 627: current web servers read the note about subrequests.
! 628:
! 629: You can find more information about setting up PHP for the Netscape
! 630: Enterprise Server (NES) here: »
! 631: http://benoit.noss.free.fr/php/install-php4.html
! 632:
! 633: To build PHP with Sun JSWS/Sun ONE WS/iPlanet/Netscape web servers,
! 634: enter the proper install directory for the --with-nsapi=[DIR] option.
! 635: The default directory is usually /opt/netscape/suitespot/. Please also
! 636: read /php-xxx-version/sapi/nsapi/nsapi-readme.txt.
! 637:
! 638: 1. Install the following packages from » http://www.sunfreeware.com/
! 639: or another download site:
! 640: + autoconf-2.13
! 641: + automake-1.4
! 642: + bison-1_25-sol26-sparc-local
! 643: + flex-2_5_4a-sol26-sparc-local
! 644: + gcc-2_95_2-sol26-sparc-local
! 645: + gzip-1.2.4-sol26-sparc-local
! 646: + m4-1_4-sol26-sparc-local
! 647: + make-3_76_1-sol26-sparc-local
! 648: + mysql-3.23.24-beta (if you want mysql support)
! 649: + perl-5_005_03-sol26-sparc-local
! 650: + tar-1.13 (GNU tar)
! 651: 2. Make sure your path includes the proper directories
! 652: PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin and make it
! 653: available to your system export PATH.
! 654: 3. gunzip php-x.x.x.tar.gz (if you have a .gz dist, otherwise go to
! 655: 4).
! 656: 4. tar xvf php-x.x.x.tar
! 657: 5. Change to your extracted PHP directory: cd ../php-x.x.x
! 658: 6. For the following step, make sure /opt/netscape/suitespot/ is where
! 659: your netscape server is installed. Otherwise, change to the correct
! 660: path and run:
! 661: ./configure --with-mysql=/usr/local/mysql \
! 662: --with-nsapi=/opt/netscape/suitespot/ \
! 663: --enable-libgcc
! 664: 7. Run make followed by make install.
! 665:
! 666: After performing the base install and reading the appropriate readme
! 667: file, you may need to perform some additional configuration steps.
! 668:
! 669: Configuration Instructions for Sun/iPlanet/Netscape
! 670:
! 671: Firstly you may need to add some paths to the LD_LIBRARY_PATH
! 672: environment for the server to find all the shared libs. This can best
! 673: done in the start script for your web server. The start script is often
! 674: located in: /path/to/server/https-servername/start. You may also need
! 675: to edit the configuration files that are located in:
! 676: /path/to/server/https-servername/config/.
! 677: 1. Add the following line to mime.types (you can do that by the
! 678: administration server):
! 679: type=magnus-internal/x-httpd-php exts=php
! 680:
! 681: 2. Edit magnus.conf (for servers >= 6) or obj.conf (for servers < 6)
! 682: and add the following, shlib will vary depending on your system, it
! 683: will be something like /opt/netscape/suitespot/bin/libphp4.so. You
! 684: should place the following lines after mime types init.
! 685: Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/op
! 686: t/netscape/suitespot/bin/libphp4.so"
! 687: Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_
! 688: ini="/path/to/php.ini"]
! 689:
! 690: (PHP >= 4.3.3) The php_ini parameter is optional but with it you
! 691: can place your php.ini in your web server config directory.
! 692: 3. Configure the default object in obj.conf (for virtual server
! 693: classes [version 6.0+] in their vserver.obj.conf):
! 694: <Object name="default">
! 695: .
! 696: .
! 697: .
! 698: .#NOTE this next line should happen after all 'ObjectType' and before all 'AddLo
! 699: g' lines
! 700: Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inike
! 701: y=value ...]
! 702: .
! 703: .
! 704: </Object>
! 705:
! 706: (PHP >= 4.3.3) As additional parameters you can add some special
! 707: php.ini-values, for example you can set a
! 708: docroot="/path/to/docroot" specific to the context php4_execute is
! 709: called. For boolean ini-keys please use 0/1 as value, not
! 710: "On","Off",... (this will not work correctly), e.g.
! 711: zlib.output_compression=1 instead of zlib.output_compression="On"
! 712: 4. This is only needed if you want to configure a directory that only
! 713: consists of PHP scripts (same like a cgi-bin directory):
! 714: <Object name="x-httpd-php">
! 715: ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
! 716: Service fn=php4_execute [inikey=value inikey=value ...]
! 717: </Object>
! 718:
! 719: After that you can configure a directory in the Administration
! 720: server and assign it the style x-httpd-php. All files in it will
! 721: get executed as PHP. This is nice to hide PHP usage by renaming
! 722: files to .html.
! 723: 5. Setup of authentication: PHP authentication cannot be used with any
! 724: other authentication. ALL AUTHENTICATION IS PASSED TO YOUR PHP
! 725: SCRIPT. To configure PHP Authentication for the entire server, add
! 726: the following line to your default object:
! 727: <Object name="default">
! 728: AuthTrans fn=php4_auth_trans
! 729: .
! 730: .
! 731: .
! 732: </Object>
! 733:
! 734: 6. To use PHP Authentication on a single directory, add the following:
! 735: <Object ppath="d:\path\to\authenticated\dir\*">
! 736: AuthTrans fn=php4_auth_trans
! 737: </Object>
! 738:
! 739: Note:
! 740:
! 741: The stacksize that PHP uses depends on the configuration of the web
! 742: server. If you get crashes with very large PHP scripts, it is
! 743: recommended to raise it with the Admin Server (in the section
! 744: "MAGNUS EDITOR").
! 745:
! 746: CGI environment and recommended modifications in php.ini
! 747:
! 748: Important when writing PHP scripts is the fact that Sun JSWS/Sun ONE
! 749: WS/iPlanet/Netscape is a multithreaded web server. Because of that all
! 750: requests are running in the same process space (the space of the web
! 751: server itself) and this space has only one environment. If you want to
! 752: get CGI variables like PATH_INFO, HTTP_HOST etc. it is not the correct
! 753: way to try this in the old PHP way with getenv() or a similar way
! 754: (register globals to environment, $_ENV). You would only get the
! 755: environment of the running web server without any valid CGI variables!
! 756:
! 757: Note:
! 758:
! 759: Why are there (invalid) CGI variables in the environment?
! 760:
! 761: Answer: This is because you started the web server process from the
! 762: admin server which runs the startup script of the web server, you
! 763: wanted to start, as a CGI script (a CGI script inside of the admin
! 764: server!). This is why the environment of the started web server has
! 765: some CGI environment variables in it. You can test this by starting
! 766: the web server not from the administration server. Use the command
! 767: line as root user and start it manually - you will see there are no
! 768: CGI-like environment variables.
! 769:
! 770: Simply change your scripts to get CGI variables in the correct way for
! 771: PHP 4.x by using the superglobal $_SERVER. If you have older scripts
! 772: which use $HTTP_HOST, etc., you should turn on register_globals in
! 773: php.ini and change the variable order too (important: remove "E" from
! 774: it, because you do not need the environment here):
! 775: variables_order = "GPCS"
! 776: register_globals = On
! 777:
! 778: Special use for error pages or self-made directory listings (PHP >= 4.3.3)
! 779:
! 780: You can use PHP to generate the error pages for "404 Not Found" or
! 781: similar. Add the following line to the object in obj.conf for every
! 782: error page you want to overwrite:
! 783: Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inik
! 784: ey=value...]
! 785:
! 786: where XXX is the HTTP error code. Please delete any other Error
! 787: directives which could interfere with yours. If you want to place a
! 788: page for all errors that could exist, leave the code parameter out.
! 789: Your script can get the HTTP status code with $_SERVER['ERROR_TYPE'].
! 790:
! 791: Another possibility is to generate self-made directory listings. Just
! 792: create a PHP script which displays a directory listing and replace the
! 793: corresponding default Service line for type="magnus-internal/directory"
! 794: in obj.conf with the following:
! 795: Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/scri
! 796: pt.php" [inikey=value inikey=value...]
! 797:
! 798: For both error and directory listing pages the original URI and
! 799: translated URI are in the variables $_SERVER['PATH_INFO'] and
! 800: $_SERVER['PATH_TRANSLATED'].
! 801:
! 802: Note about nsapi_virtual() and subrequests (PHP >= 4.3.3)
! 803:
! 804: The NSAPI module now supports the nsapi_virtual() function (alias:
! 805: virtual()) to make subrequests on the web server and insert the result
! 806: in the web page. This function uses some undocumented features from the
! 807: NSAPI library. On Unix the module automatically looks for the needed
! 808: functions and uses them if available. If not, nsapi_virtual() is
! 809: disabled.
! 810:
! 811: Note:
! 812:
! 813: But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!!
! 814: __________________________________________________________________
! 815: __________________________________________________________________
! 816:
! 817: CGI and command line setups
! 818:
! 819: By default, PHP is built as both a CLI and CGI program, which can be
! 820: used for CGI processing. If you are running a web server that PHP has
! 821: module support for, you should generally go for that solution for
! 822: performance reasons. However, the CGI version enables users to run
! 823: different PHP-enabled pages under different user-ids.
! 824: Warning
! 825:
! 826: A server deployed in CGI mode is open to several possible
! 827: vulnerabilities. Please read our CGI security section to learn how to
! 828: defend yourself from such attacks.
! 829:
! 830: Testing
! 831:
! 832: If you have built PHP as a CGI program, you may test your build by
! 833: typing make test. It is always a good idea to test your build. This way
! 834: you may catch a problem with PHP on your platform early instead of
! 835: having to struggle with it later.
! 836:
! 837: Using Variables
! 838:
! 839: Some server supplied environment variables are not defined in the
! 840: current » CGI/1.1 specification. Only the following variables are
! 841: defined there: AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE,
! 842: GATEWAY_INTERFACE, PATH_INFO, PATH_TRANSLATED, QUERY_STRING,
! 843: REMOTE_ADDR, REMOTE_HOST, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD,
! 844: SCRIPT_NAME, SERVER_NAME, SERVER_PORT, SERVER_PROTOCOL, and
! 845: SERVER_SOFTWARE. Everything else should be treated as 'vendor
! 846: extensions'.
! 847: __________________________________________________________________
! 848: __________________________________________________________________
! 849:
! 850: HP-UX specific installation notes
! 851:
! 852: This section contains notes and hints specific to installing PHP on
! 853: HP-UX systems.
! 854:
! 855: There are two main options for installing PHP on HP-UX systems. Either
! 856: compile it, or install a pre-compiled binary.
! 857:
! 858: Official pre-compiled packages are located here: »
! 859: http://software.hp.com/
! 860:
! 861: Until this manual section is rewritten, the documentation about
! 862: compiling PHP (and related extensions) on HP-UX systems has been
! 863: removed. For now, consider reading the following external resource: »
! 864: Building Apache and PHP on HP-UX 11.11
! 865: __________________________________________________________________
! 866: __________________________________________________________________
! 867:
! 868: OpenBSD installation notes
! 869:
! 870: This section contains notes and hints specific to installing PHP on »
! 871: OpenBSD 3.6.
! 872:
! 873: Using Binary Packages
! 874:
! 875: Using binary packages to install PHP on OpenBSD is the recommended and
! 876: simplest method. The core package has been separated from the various
! 877: modules, and each can be installed and removed independently from the
! 878: others. The files you need can be found on your OpenBSD CD or on the
! 879: FTP site.
! 880:
! 881: The main package you need to install is php4-core-4.3.8.tgz, which
! 882: contains the basic engine (plus gettext and iconv). Next, take a look
! 883: at the module packages, such as php4-mysql-4.3.8.tgz or
! 884: php4-imap-4.3.8.tgz. You need to use the phpxs command to activate and
! 885: deactivate these modules in your php.ini.
! 886:
! 887: Example #1 OpenBSD Package Install Example
! 888: # pkg_add php4-core-4.3.8.tgz
! 889: # /usr/local/sbin/phpxs -s
! 890: # cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini
! 891: (add in mysql)
! 892: # pkg_add php4-mysql-4.3.8.tgz
! 893: # /usr/local/sbin/phpxs -a mysql
! 894: (add in imap)
! 895: # pkg_add php4-imap-4.3.8.tgz
! 896: # /usr/local/sbin/phpxs -a imap
! 897: (remove mysql as a test)
! 898: # pkg_delete php4-mysql-4.3.8
! 899: # /usr/local/sbin/phpxs -r mysql
! 900: (install the PEAR libraries)
! 901: # pkg_add php4-pear-4.3.8.tgz
! 902:
! 903: Read the » packages(7) manual page for more information about binary
! 904: packages on OpenBSD.
! 905:
! 906: Using Ports
! 907:
! 908: You can also compile up PHP from source using the » ports tree.
! 909: However, this is only recommended for users familiar with OpenBSD. The
! 910: PHP 4 port is split into two sub-directories: core and extensions. The
! 911: extensions directory generates sub-packages for all of the supported
! 912: PHP modules. If you find you do not want to create some of these
! 913: modules, use the no_* FLAVOR. For example, to skip building the imap
! 914: module, set the FLAVOR to no_imap.
! 915:
! 916: Common Problems
! 917:
! 918: * The default install of Apache runs inside a » chroot(2) jail, which
! 919: will restrict PHP scripts to accessing files under /var/www. You
! 920: will therefore need to create a /var/www/tmp directory for PHP
! 921: session files to be stored, or use an alternative session backend.
! 922: In addition, database sockets need to be placed inside the jail or
! 923: listen on the localhost interface. If you use network functions,
! 924: some files from /etc such as /etc/resolv.conf and /etc/services
! 925: will need to be moved into /var/www/etc. The OpenBSD PEAR package
! 926: automatically installs into the correct chroot directories, so no
! 927: special modification is needed there. More information on the
! 928: OpenBSD Apache is available in the » OpenBSD FAQ.
! 929: * The OpenBSD 3.6 package for the » gd extension requires XFree86 to
! 930: be installed. If you do not wish to use some of the font features
! 931: that require X11, install the php4-gd-4.3.8-no_x11.tgz package
! 932: instead.
! 933:
! 934: Older Releases
! 935:
! 936: Older releases of OpenBSD used the FLAVORS system to compile up a
! 937: statically linked PHP. Since it is hard to generate binary packages
! 938: using this method, it is now deprecated. You can still use the old
! 939: stable ports trees if you wish, but they are unsupported by the OpenBSD
! 940: team. If you have any comments about this, the current maintainer for
! 941: the port is Anil Madhavapeddy (avsm at openbsd dot org).
! 942: __________________________________________________________________
! 943: __________________________________________________________________
! 944:
! 945: Solaris specific installation tips
! 946:
! 947: This section contains notes and hints specific to installing PHP on
! 948: Solaris systems.
! 949:
! 950: Required software
! 951:
! 952: Solaris installs often lack C compilers and their related tools. Read
! 953: this FAQ for information on why using GNU versions for some of these
! 954: tools is necessary. The required software is as follows:
! 955: * gcc (recommended, other C compilers may work)
! 956: * make
! 957: * flex
! 958: * bison
! 959: * m4
! 960: * autoconf
! 961: * automake
! 962: * perl
! 963: * gzip
! 964: * tar
! 965: * GNU sed
! 966:
! 967: In addition, you will need to install (and possibly compile) any
! 968: additional software specific to your configuration, such as Oracle or
! 969: MySQL.
! 970:
! 971: Using Packages
! 972:
! 973: You can simplify the Solaris install process by using pkgadd to install
! 974: most of your needed components.
! 975: __________________________________________________________________
! 976: __________________________________________________________________
! 977:
! 978: Debian GNU/Linux installation notes
! 979:
! 980: This section contains notes and hints specific to installing PHP on »
! 981: Debian GNU/Linux.
! 982: Warning
! 983:
! 984: Unofficial builds from third-parties are not supported here. Any bugs
! 985: should be reported to the Debian team unless they can be reproduced
! 986: using the latest builds from our » download area.
! 987:
! 988: While the instructions for building PHP on Unix apply to Debian as
! 989: well, this manual page contains specific information for other options,
! 990: such as using either the apt-get or aptitude commands. This manual page
! 991: uses these two commands interchangeably.
! 992:
! 993: Using APT
! 994:
! 995: First, note that other related packages may be desired like
! 996: libapache2-mod-php5 to integrate with Apache 2, and php-pear for PEAR.
! 997:
! 998: Second, before installing a package, it's wise to ensure the package
! 999: list is up to date. Typically, this is done by running the command
! 1000: apt-get update.
! 1001:
! 1002: Example #1 Debian Install Example with Apache 2
! 1003: # apt-get install php5-common libapache2-mod-php5 php5-cli
! 1004:
! 1005: APT will automatically install the PHP 5 module for Apache 2 and all of
! 1006: its dependencies, and then activate it. Apache should be restarted in
! 1007: order for the changes take place. For example:
! 1008:
! 1009: Example #2 Stopping and starting Apache once PHP is installed
! 1010: # /etc/init.d/apache2 stop
! 1011: # /etc/init.d/apache2 start
! 1012:
! 1013: Better control of configuration
! 1014:
! 1015: In the last section, PHP was installed with only core modules. It's
! 1016: very likely that additional modules will be desired, such as MySQL,
! 1017: cURL, GD, etc. These may also be installed via the apt-get command.
! 1018:
! 1019: Example #3 Methods for listing additional PHP 5 packages
! 1020: # apt-cache search php5
! 1021: # aptitude search php5
! 1022: # aptitude search php5 |grep -i mysql
! 1023:
! 1024: The examples will show a lot of packages including several PHP specific
! 1025: ones like php5-cgi, php5-cli and php5-dev. Determine which are needed
! 1026: and install them like any other with either apt-get or aptitude. And
! 1027: because Debian performs dependency checks, it'll prompt for those so
! 1028: for example to install MySQL and cURL:
! 1029:
! 1030: Example #4 Install PHP with MySQL, cURL
! 1031: # apt-get install php5-mysql php5-curl
! 1032:
! 1033: APT will automatically add the appropriate lines to the different
! 1034: php.ini related files like /etc/php5/apache2/php.ini,
! 1035: /etc/php5/conf.d/pdo.ini, etc. and depending on the extension will add
! 1036: entries similar to extension=foo.so. However, restarting the web server
! 1037: (like Apache) is required before these changes take affect.
! 1038:
! 1039: Common Problems
! 1040:
! 1041: * If the PHP scripts are not parsing via the web server, then it's
! 1042: likely that PHP was not added to the web server's configuration
! 1043: file, which on Debian may be /etc/apache2/apache2.conf or similar.
! 1044: See the Debian manual for further details.
! 1045: * If an extension was seemingly installed yet the functions are
! 1046: undefined, be sure that the appropriate ini file is being loaded
! 1047: and/or the web server was restarted after installation.
! 1048: * There are two basic commands for installing packages on Debian (and
! 1049: other linux variants): apt-get and aptitude. However, explaining
! 1050: the subtle differences between these commands goes beyond the scope
! 1051: of this manual.
! 1052: __________________________________________________________________
! 1053: __________________________________________________________________
! 1054: __________________________________________________________________
! 1055:
! 1056: Installation on Mac OS X
! 1057:
! 1058: Table of Contents
! 1059:
! 1060: * Using Packages
! 1061: * Using the bundled PHP
! 1062: * Compiling PHP on Mac OS X
! 1063:
! 1064: This section contains notes and hints specific to installing PHP on Mac
! 1065: OS X. PHP is bundled with Macs, and compiling is similar to the Unix
! 1066: installation guide.
! 1067: __________________________________________________________________
! 1068:
! 1069: Using Packages
! 1070:
! 1071: There are a few pre-packaged and pre-compiled versions of PHP for Mac
! 1072: OS X. This can help in setting up a standard configuration, but if you
! 1073: need to have a different set of features (such as a secure server, or a
! 1074: different database driver), you may need to build PHP and/or your web
! 1075: server yourself. If you are unfamiliar with building and compiling your
! 1076: own software, it's worth checking whether somebody has already built a
! 1077: packaged version of PHP with the features you need.
! 1078:
! 1079: The following resources offer easy to install packages and precompiled
! 1080: binaries for PHP on Mac OS:
! 1081:
! 1082: * MacPorts: » http://www.macports.org/
! 1083: * Entropy: » http://www.entropy.ch/software/macosx/php/
! 1084: * Fink: » http://www.finkproject.org/
! 1085: * Homebrew: » http://github.com/mxcl/homebrew
! 1086: __________________________________________________________________
! 1087: __________________________________________________________________
! 1088:
! 1089: Using the bundled PHP
! 1090:
! 1091: PHP has come standard with Macs since OS X version 10.0.0. Enabling PHP
! 1092: with the default web server requires uncommenting a few lines in the
! 1093: Apache configuration file httpd.conf whereas the CGI and/or CLI are
! 1094: enabled by default (easily accessible via the Terminal program).
! 1095:
! 1096: Enabling PHP using the instructions below is meant for quickly setting
! 1097: up a local development environment. It's highly recommended to always
! 1098: upgrade PHP to the newest version. Like most live software, newer
! 1099: versions are created to fix bugs and add features and PHP being is no
! 1100: different. See the appropriate MAC OS X installation documentation for
! 1101: further details. The following instructions are geared towards a
! 1102: beginner with details provided for getting a default setup to work. All
! 1103: users are encouraged to compile, or install a new packaged version.
! 1104:
! 1105: The standard installation type is using mod_php, and enabling the
! 1106: bundled mod_php on Mac OS X for the Apache web server (the default web
! 1107: server, that is accessible via System Preferences) involves the
! 1108: following steps:
! 1109:
! 1110: 1. Locate and open the Apache configuration file. By default, the
! 1111: location is as follows: /private/etc/apache2/httpd.conf Using
! 1112: Finder or Spotlight to find this file may prove difficult as by
! 1113: default it's private and owned by the root user.
! 1114:
! 1115: Note: One way to open this is by using a Unix based text editor in
! 1116: the Terminal, for example nano, and because the file is owned by
! 1117: root we'll use the sudo command to open it (as root) so for example
! 1118: type the following into the Terminal Application (after, it will
! 1119: prompt for a password): sudo nano /private/etc/apache2/httpd.conf
! 1120: Noteworthy nano commands: ^w (search), ^o (save), and ^x (exit)
! 1121: where ^ represents the Ctrl key.
! 1122:
! 1123: Note: Versions of Mac OS X prior to 10.5 were bundled with older
! 1124: versions of PHP and Apache. As such, the Apache configuration file
! 1125: on legacy machines may be /etc/httpd/httpd.conf.
! 1126: 2. With a text editor, uncomment the lines (by removing the #) that
! 1127: look similar to the following (these two lines are often not
! 1128: together, locate them both in the file):
! 1129: # LoadModule php5_module libexec/httpd/libphp5.so
! 1130:
! 1131: # AddModule mod_php5.c
! 1132:
! 1133: Notice the location/path. When building PHP in the future, the
! 1134: above files should be replaced or commented out.
! 1135: 3. Be sure the desired extensions will parse as PHP (examples: .php
! 1136: .html and .inc)
! 1137: Due to the following statement already existing in httpd.conf (as
! 1138: of Mac Panther), once PHP is enabled the .php files will
! 1139: automatically parse as PHP.
! 1140: <IfModule mod_php5.c>
! 1141: # If php is turned on, we respect .php and .phps files.
! 1142: AddType application/x-httpd-php .php
! 1143: AddType application/x-httpd-php-source .phps
! 1144:
! 1145: # Since most users will want index.php to work we
! 1146: # also automatically enable index.php
! 1147: <IfModule mod_dir.c>
! 1148: DirectoryIndex index.html index.php
! 1149: </IfModule>
! 1150: </IfModule>
! 1151:
! 1152: Note:
! 1153: Before OS X 10.5 (Leopard), PHP 4 was bundled instead of PHP 5 in
! 1154: which case the above instructions will differ slightly by changing
! 1155: 5's to 4's.
! 1156: 4. Be sure the DirectoryIndex loads the desired default index file
! 1157: This is also set in httpd.conf. Typically index.php and index.html
! 1158: are used. By default index.php is enabled because it's also in the
! 1159: PHP check shown above. Adjust accordingly.
! 1160: 5. Set the php.ini location or use the default A typical default
! 1161: location on Mac OS X is /usr/local/php/php.ini and a call to
! 1162: phpinfo() will reveal this information. If a php.ini is not used,
! 1163: PHP will use all default values. See also the related FAQ on
! 1164: finding php.ini.
! 1165: 6. Locate or set the DocumentRoot This is the root directory for all
! 1166: the web files. Files in this directory are served from the web
! 1167: server so the PHP files will parse as PHP before outputting them to
! 1168: the browser. A typical default path is /Library/WebServer/Documents
! 1169: but this can be set to anything in httpd.conf. Alternatively, the
! 1170: default DocumentRoot for individual users is
! 1171: /Users/yourusername/Sites
! 1172: 7. Create a phpinfo() file
! 1173: The phpinfo() function will display information about PHP. Consider
! 1174: creating a file in the DocumentRoot with the following PHP code:
! 1175: <?php phpinfo(); ?>
! 1176: 8. Restart Apache, and load the PHP file created above To restart,
! 1177: either execute sudo apachectl graceful in the shell or stop/start
! 1178: the "Personal Web Server" option in the OS X System Preferences. By
! 1179: default, loading local files in the browser will have an URL like
! 1180: so: http://localhost/info.php Or using the DocumentRoot in the user
! 1181: directory is another option and would end up looking like:
! 1182: http://localhost/~yourusername/info.php
! 1183:
! 1184: The CLI (or CGI in older versions) is appropriately named php and
! 1185: likely exists as /usr/bin/php. Open up the terminal, read the command
! 1186: line section of the PHP manual, and execute php -v to check the PHP
! 1187: version of this PHP binary. A call to phpinfo() will also reveal this
! 1188: information.
! 1189: __________________________________________________________________
! 1190: __________________________________________________________________
! 1191:
! 1192: Compiling PHP on Mac OS X
! 1193:
! 1194: Use the Unix installation guide to compile PHP on Mac OS X.
! 1195: __________________________________________________________________
! 1196: __________________________________________________________________
! 1197: __________________________________________________________________
! 1198:
! 1199: Installation of PECL extensions
! 1200:
! 1201: Table of Contents
! 1202:
! 1203: * Introduction to PECL Installations
! 1204: * Downloading PECL extensions
! 1205: * Installing a PHP extension on Windows
! 1206: * Compiling shared PECL extensions with the pecl command
! 1207: * Compiling shared PECL extensions with phpize
! 1208: * Compiling PECL extensions statically into PHP
! 1209: __________________________________________________________________
! 1210:
! 1211: Introduction to PECL Installations
! 1212:
! 1213: » PECL is a repository of PHP extensions that are made available to you
! 1214: via the » PEAR packaging system. This section of the manual is intended
! 1215: to demonstrate how to obtain and install PECL extensions.
! 1216:
! 1217: These instructions assume /your/phpsrcdir/ is the path to the PHP
! 1218: source distribution, and that extname is the name of the PECL
! 1219: extension. Adjust accordingly. These instructions also assume a
! 1220: familiarity with the » pear command. The information in the PEAR manual
! 1221: for the pear command also applies to the pecl command.
! 1222:
! 1223: To be useful, a shared extension must be built, installed, and loaded.
! 1224: The methods described below provide you with various instructions on
! 1225: how to build and install the extensions, but they do not automatically
! 1226: load them. Extensions can be loaded by adding an extension directive.
! 1227: To this php.ini file, or through the use of the dl() function.
! 1228:
! 1229: When building PHP modules, it's important to have known-good versions
! 1230: of the required tools (autoconf, automake, libtool, etc.) See the »
! 1231: Anonymous SVN Instructions for details on the required tools, and
! 1232: required versions.
! 1233: __________________________________________________________________
! 1234: __________________________________________________________________
! 1235:
! 1236: Downloading PECL extensions
! 1237:
! 1238: There are several options for downloading PECL extensions, such as:
! 1239: * The pecl install extname command downloads the extensions code
! 1240: automatically, so in this case there is no need for a separate
! 1241: download.
! 1242: * » http://pecl.php.net/ The PECL web site contains information about
! 1243: the different extensions that are offered by the PHP Development
! 1244: Team. The information available here includes: ChangeLog, release
! 1245: notes, requirements and other similar details.
! 1246: * pecl download extname PECL extensions that have releases listed on
! 1247: the PECL web site are available for download and installation using
! 1248: the » pecl command. Specific revisions may also be specified.
! 1249: * SVN Most PECL extensions also reside in SVN. A web-based view may
! 1250: be seen at » http://svn.php.net/viewvc/pecl/. To download straight
! 1251: from SVN, the following sequence of commands may be used:
! 1252: $ svn checkout http://svn.php.net/repository/pecl/extname/trunk
! 1253: extname
! 1254: * Windows downloads At this time the PHP project does not compile
! 1255: Windows binaries for PECL extensions. However, to compile PHP under
! 1256: Windows see the chapter titled building PHP for Windows.
! 1257: __________________________________________________________________
! 1258: __________________________________________________________________
! 1259:
! 1260: Installing a PHP extension on Windows
! 1261:
! 1262: On Windows, you have two ways to load a PHP extension: either compile
! 1263: it into PHP, or load the DLL. Loading a pre-compiled extension is the
! 1264: easiest and preferred way.
! 1265:
! 1266: To load an extension, you need to have it available as a ".dll" file on
! 1267: your system. All the extensions are automatically and periodically
! 1268: compiled by the PHP Group (see next section for the download).
! 1269:
! 1270: To compile an extension into PHP, please refer to building from source
! 1271: documentation.
! 1272:
! 1273: To compile a standalone extension (aka a DLL file), please refer to
! 1274: building from source documentation. If the DLL file is available
! 1275: neither with your PHP distribution nor in PECL, you may have to compile
! 1276: it before you can start using the extension.
! 1277:
! 1278: Where to find an extension?
! 1279:
! 1280: PHP extensions are usually called "php_*.dll" (where the star
! 1281: represents the name of the extension) and they are located under the
! 1282: "PHP\ext" ("PHP\extensions" in PHP4) folder.
! 1283:
! 1284: PHP ships with the extensions most useful to the majority of
! 1285: developers. They are called "core" extensions.
! 1286:
! 1287: However, if you need functionality not provided by any core extension,
! 1288: you may still be able to find one in PECL. The PHP Extension Community
! 1289: Library (PECL) is a repository for PHP Extensions, providing a
! 1290: directory of all known extensions and hosting facilities for
! 1291: downloading and development of PHP extensions.
! 1292:
! 1293: If you have developed an extension for your own uses, you might want to
! 1294: think about hosting it on PECL so that others with the same needs can
! 1295: benefit from your time. A nice side effect is that you give them a good
! 1296: chance to give you feedback, (hopefully) thanks, bug reports and even
! 1297: fixes/patches. Before you submit your extension for hosting on PECL,
! 1298: please read http://pecl.php.net/package-new.php.
! 1299:
! 1300: Which extension to download?
! 1301:
! 1302: Many times, you will find several versions of each DLL:
! 1303: * Different version numbers (at least the first two numbers should
! 1304: match)
! 1305: * Different thread safety settings
! 1306: * Different processor architecture (x86, x64, ...)
! 1307: * Different debugging settings
! 1308: * etc.
! 1309:
! 1310: You should keep in mind that your extension settings should match all
! 1311: the settings of the PHP executable you are using. The following PHP
! 1312: script will tell you all about your PHP settings:
! 1313:
! 1314: Example #1 phpinfo() call
! 1315: <?php
! 1316: phpinfo();
! 1317: ?>
! 1318:
! 1319: Or from the command line, run:
! 1320: drive:\\path\to\php\executable\php.exe -i
! 1321:
! 1322: Loading an extension
! 1323:
! 1324: The most common way to load a PHP extension is to include it in your
! 1325: php.ini configuration file. Please note that many extensions are
! 1326: already present in your php.ini and that you only need to remove the
! 1327: semicolon to activate them.
! 1328: ;extension=php_extname.dll
! 1329:
! 1330: extension=php_extname.dll
! 1331:
! 1332: However, some web servers are confusing because they do not use the
! 1333: php.ini located alongside your PHP executable. To find out where your
! 1334: actual php.ini resides, look for its path in phpinfo():
! 1335: Configuration File (php.ini) Path C:\WINDOWS
! 1336:
! 1337: Loaded Configuration File C:\Program Files\PHP\5.2\php.ini
! 1338:
! 1339: After activating an extension, save php.ini, restart the web server and
! 1340: check phpinfo() again. The new extension should now have its own
! 1341: section.
! 1342:
! 1343: Resolving problems
! 1344:
! 1345: If the extension does not appear in phpinfo(), you should check your
! 1346: logs to learn where the problem comes from.
! 1347:
! 1348: If you are using PHP from the command line (CLI), the extension loading
! 1349: error can be read directly on screen.
! 1350:
! 1351: If you are using PHP with a web server, the location and format of the
! 1352: logs vary depending on your software. Please read your web server
! 1353: documentation to locate the logs, as it does not have anything to do
! 1354: with PHP itself.
! 1355:
! 1356: Common problems are the location of the DLL, the value of the "
! 1357: extension_dir" setting inside php.ini and compile-time setting
! 1358: mismatches.
! 1359:
! 1360: If the problem lies in a compile-time setting mismatch, you probably
! 1361: didn't download the right DLL. Try downloading again the extension with
! 1362: the right settings. Again, phpinfo() can be of great help.
! 1363: __________________________________________________________________
! 1364: __________________________________________________________________
! 1365:
! 1366: Compiling shared PECL extensions with the pecl command
! 1367:
! 1368: PECL makes it easy to create shared PHP extensions. Using the » pecl
! 1369: command, do the following:
! 1370:
! 1371: $ pecl install extname
! 1372:
! 1373: This will download the source for extname, compile, and install
! 1374: extname.so into your extension_dir. extname.so may then be loaded via
! 1375: php.ini
! 1376:
! 1377: By default, the pecl command will not install packages that are marked
! 1378: with the alpha or beta state. If no stable packages are available, you
! 1379: may install a beta package using the following command:
! 1380:
! 1381: $ pecl install extname-beta
! 1382:
! 1383: You may also install a specific version using this variant:
! 1384:
! 1385: $ pecl install extname-0.1
! 1386:
! 1387: Note:
! 1388:
! 1389: After enabling the extension in php.ini, restarting the web service
! 1390: is required for the changes to be picked up.
! 1391: __________________________________________________________________
! 1392: __________________________________________________________________
! 1393:
! 1394: Compiling shared PECL extensions with phpize
! 1395:
! 1396: Sometimes, using the pecl installer is not an option. This could be
! 1397: because you're behind a firewall, or it could be because the extension
! 1398: you want to install is not available as a PECL compatible package, such
! 1399: as unreleased extensions from SVN. If you need to build such an
! 1400: extension, you can use the lower-level build tools to perform the build
! 1401: manually.
! 1402:
! 1403: The phpize command is used to prepare the build environment for a PHP
! 1404: extension. In the following sample, the sources for an extension are in
! 1405: a directory named extname:
! 1406:
! 1407: $ cd extname
! 1408: $ phpize
! 1409: $ ./configure
! 1410: $ make
! 1411: # make install
! 1412:
! 1413: A successful install will have created extname.so and put it into the
! 1414: PHP extensions directory. You'll need to and adjust php.ini and add an
! 1415: extension=extname.so line before you can use the extension.
! 1416:
! 1417: If the system is missing the phpize command, and precompiled packages
! 1418: (like RPM's) are used, be sure to also install the appropriate devel
! 1419: version of the PHP package as they often include the phpize command
! 1420: along with the appropriate header files to build PHP and its
! 1421: extensions.
! 1422:
! 1423: Execute phpize --help to display additional usage information.
! 1424: __________________________________________________________________
! 1425: __________________________________________________________________
! 1426:
! 1427: Compiling PECL extensions statically into PHP
! 1428:
! 1429: You might find that you need to build a PECL extension statically into
! 1430: your PHP binary. To do this, you'll need to place the extension source
! 1431: under the php-src/ext/ directory and tell the PHP build system to
! 1432: regenerate its configure script.
! 1433:
! 1434: $ cd /your/phpsrcdir/ext
! 1435: $ pecl download extname
! 1436: $ gzip -d < extname.tgz | tar -xvf -
! 1437: $ mv extname-x.x.x extname
! 1438:
! 1439: This will result in the following directory:
! 1440:
! 1441: /your/phpsrcdir/ext/extname
! 1442:
! 1443: From here, force PHP to rebuild the configure script, and then build
! 1444: PHP as normal:
! 1445:
! 1446: $ cd /your/phpsrcdir
! 1447: $ rm configure
! 1448: $ ./buildconf --force
! 1449: $ ./configure --help
! 1450: $ ./configure --with-extname --enable-someotherext --with-foobar
! 1451: $ make
! 1452: $ make install
! 1453:
! 1454: Note: To run the 'buildconf' script you need autoconf 2.13 and
! 1455: automake 1.4+ (newer versions of autoconf may work, but are not
! 1456: supported).
! 1457:
! 1458: Whether --enable-extname or --with-extname is used depends on the
! 1459: extension. Typically an extension that does not require external
! 1460: libraries uses --enable. To be sure, run the following after buildconf:
! 1461:
! 1462: $ ./configure --help | grep extname
! 1463: __________________________________________________________________
! 1464: __________________________________________________________________
! 1465: __________________________________________________________________
! 1466:
! 1467: Problems?
! 1468:
! 1469: Table of Contents
! 1470:
! 1471: * Read the FAQ
! 1472: * Other problems
! 1473: * Bug reports
! 1474: __________________________________________________________________
! 1475:
! 1476: Read the FAQ
! 1477:
! 1478: Some problems are more common than others. The most common ones are
! 1479: listed in the PHP FAQ, part of this manual.
! 1480: __________________________________________________________________
! 1481: __________________________________________________________________
! 1482:
! 1483: Other problems
! 1484:
! 1485: If you are still stuck, someone on the PHP installation mailing list
! 1486: may be able to help you. You should check out the archive first, in
! 1487: case someone already answered someone else who had the same problem as
! 1488: you. The archives are available from the support page on »
! 1489: http://www.php.net/support.php. To subscribe to the PHP installation
! 1490: mailing list, send an empty mail to »
! 1491: php-install-subscribe@lists.php.net. The mailing list address is »
! 1492: php-install@lists.php.net.
! 1493:
! 1494: If you want to get help on the mailing list, please try to be precise
! 1495: and give the necessary details about your environment (which operating
! 1496: system, what PHP version, what web server, if you are running PHP as
! 1497: CGI or a server module, safe mode, etc.), and preferably enough code to
! 1498: make others able to reproduce and test your problem.
! 1499: __________________________________________________________________
! 1500: __________________________________________________________________
! 1501:
! 1502: Bug reports
! 1503:
! 1504: If you think you have found a bug in PHP, please report it. The PHP
! 1505: developers probably don't know about it, and unless you report it,
! 1506: chances are it won't be fixed. You can report bugs using the
! 1507: bug-tracking system at » http://bugs.php.net/. Please do not send bug
! 1508: reports in mailing list or personal letters. The bug system is also
! 1509: suitable to submit feature requests.
! 1510:
! 1511: Read the » How to report a bug document before submitting any bug
! 1512: reports!
! 1513: __________________________________________________________________
! 1514: __________________________________________________________________
! 1515: __________________________________________________________________
! 1516:
! 1517: Runtime Configuration
! 1518:
! 1519: Table of Contents
! 1520:
! 1521: * The configuration file
! 1522: * .user.ini files
! 1523: * Where a configuration setting may be set
! 1524: * How to change configuration settings
! 1525: __________________________________________________________________
! 1526:
! 1527: The configuration file
! 1528:
! 1529: The configuration file (php.ini) is read when PHP starts up. For the
! 1530: server module versions of PHP, this happens only once when the web
! 1531: server is started. For the CGI and CLI version, it happens on every
! 1532: invocation.
! 1533:
! 1534: php.ini is searched in these locations (in order):
! 1535: * SAPI module specific location (PHPIniDir directive in Apache 2, -c
! 1536: command line option in CGI and CLI, php_ini parameter in NSAPI,
! 1537: PHP_INI_PATH environment variable in THTTPD)
! 1538: * The PHPRC environment variable. Before PHP 5.2.0 this was checked
! 1539: after the registry key mentioned below.
! 1540: * As of PHP 5.2.0, the location of the php.ini file can be set for
! 1541: different versions of PHP. The following registry keys are examined
! 1542: in order: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z],
! 1543: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] and
! 1544: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], where x, y and z mean the PHP
! 1545: major, minor and release versions. If there is a value for
! 1546: IniFilePath in these keys, then the first one found will be used as
! 1547: the location of the php.ini (Windows only).
! 1548: * [HKEY_LOCAL_MACHINE\SOFTWARE\PHP], value of IniFilePath (Windows
! 1549: only).
! 1550: * Current working directory (except CLI)
! 1551: * The web server's directory (for SAPI modules), or directory of PHP
! 1552: (otherwise in Windows)
! 1553: * Windows directory (C:\windows or C:\winnt) (for Windows), or
! 1554: --with-config-file-path compile time option
! 1555:
! 1556: If php-SAPI.ini exists (where SAPI is used SAPI, so the filename is
! 1557: e.g. php-cli.ini or php-apache.ini), it's used instead of php.ini. SAPI
! 1558: name can be determined by php_sapi_name().
! 1559:
! 1560: Note:
! 1561:
! 1562: The Apache web server changes the directory to root at startup
! 1563: causing PHP to attempt to read php.ini from the root filesystem if
! 1564: it exists.
! 1565:
! 1566: The php.ini directives handled by extensions are documented
! 1567: respectively on the pages of the extensions themselves. The list of the
! 1568: core directives is available in the appendix. Probably not all PHP
! 1569: directives are documented in the manual though. For a complete list of
! 1570: directives available in your PHP version, please read your well
! 1571: commented php.ini file. Alternatively, you may find the » the latest
! 1572: php.ini from SVN helpful too.
! 1573:
! 1574: Example #1 php.ini example
! 1575: ; any text on a line after an unquoted semicolon (;) is ignored
! 1576: [php] ; section markers (text within square brackets) are also ignored
! 1577: ; Boolean values can be set to either:
! 1578: ; true, on, yes
! 1579: ; or false, off, no, none
! 1580: register_globals = off
! 1581: track_errors = yes
! 1582:
! 1583: ; you can enclose strings in double-quotes
! 1584: include_path = ".:/usr/local/lib/php"
! 1585:
! 1586: ; backslashes are treated the same as any other character
! 1587: include_path = ".;c:\php\lib"
! 1588:
! 1589: Since PHP 5.1.0, it is possible to refer to existing .ini variables
! 1590: from within .ini files. Example: open_basedir = ${open_basedir}
! 1591: ":/new/dir".
! 1592: __________________________________________________________________
! 1593: __________________________________________________________________
! 1594:
! 1595: .user.ini files
! 1596:
! 1597: Since PHP 5.3.0, PHP includes support for .htaccess-style INI files on
! 1598: a per-directory basis. These files are processed only by the
! 1599: CGI/FastCGI SAPI. This functionality obsoletes the PECL htscanner
! 1600: extension. If you are using Apache, use .htaccess files for the same
! 1601: effect.
! 1602:
! 1603: In addition to the main php.ini file, PHP scans for INI files in each
! 1604: directory, starting with the directory of the requested PHP file, and
! 1605: working its way up to the current document root (as set in
! 1606: $_SERVER['DOCUMENT_ROOT']). In case the PHP file is outside the
! 1607: document root, only its directory is scanned.
! 1608:
! 1609: Only INI settings with the modes PHP_INI_PERDIR and PHP_INI_USER will
! 1610: be recognized in .user.ini-style INI files.
! 1611:
! 1612: Two new INI directives, user_ini.filename and user_ini.cache_ttl
! 1613: control the use of user INI files.
! 1614:
! 1615: user_ini.filename sets the name of the file PHP looks for in each
! 1616: directory; if set to an empty string, PHP doesn't scan at all. The
! 1617: default is .user.ini.
! 1618:
! 1619: user_ini.cache_ttl controls how often user INI files are re-read. The
! 1620: default is 300 seconds (5 minutes).
! 1621: __________________________________________________________________
! 1622: __________________________________________________________________
! 1623:
! 1624: Where a configuration setting may be set
! 1625:
! 1626: These modes determine when and where a PHP directive may or may not be
! 1627: set, and each directive within the manual refers to one of these modes.
! 1628: For example, some settings may be set within a PHP script using
! 1629: ini_set(), whereas others may require php.ini or httpd.conf.
! 1630:
! 1631: For example, the output_buffering setting is PHP_INI_PERDIR therefore
! 1632: it may not be set using ini_set(). However, the display_errors
! 1633: directive is PHP_INI_ALL therefore it may be set anywhere, including
! 1634: with ini_set().
! 1635:
! 1636: CAPTION: Definition of PHP_INI_* modes
! 1637:
! 1638: Mode Value Meaning
! 1639: PHP_INI_USER 1 Entry can be set in user scripts (like with ini_set())
! 1640: or in the Windows registry
! 1641: PHP_INI_PERDIR 6 Entry can be set in php.ini, .htaccess or httpd.conf
! 1642: PHP_INI_SYSTEM 4 Entry can be set in php.ini or httpd.conf
! 1643: PHP_INI_ALL 7 Entry can be set anywhere
! 1644: __________________________________________________________________
! 1645: __________________________________________________________________
! 1646:
! 1647: How to change configuration settings
! 1648:
! 1649: Running PHP as an Apache module
! 1650:
! 1651: When using PHP as an Apache module, you can also change the
! 1652: configuration settings using directives in Apache configuration files
! 1653: (e.g. httpd.conf) and .htaccess files. You will need "AllowOverride
! 1654: Options" or "AllowOverride All" privileges to do so.
! 1655:
! 1656: There are several Apache directives that allow you to change the PHP
! 1657: configuration from within the Apache configuration files. For a listing
! 1658: of which directives are PHP_INI_ALL, PHP_INI_PERDIR, or PHP_INI_SYSTEM,
! 1659: have a look at the List of php.ini directives appendix.
! 1660:
! 1661: php_value name value
! 1662: Sets the value of the specified directive. Can be used only with
! 1663: PHP_INI_ALL and PHP_INI_PERDIR type directives. To clear a
! 1664: previously set value use none as the value.
! 1665:
! 1666: Note: Don't use php_value to set boolean values. php_flag (see
! 1667: below) should be used instead.
! 1668:
! 1669: php_flag name on|off
! 1670: Used to set a boolean configuration directive. Can be used only
! 1671: with PHP_INI_ALL and PHP_INI_PERDIR type directives.
! 1672:
! 1673: php_admin_value name value
! 1674: Sets the value of the specified directive. This can not be used
! 1675: in .htaccess files. Any directive type set with php_admin_value
! 1676: can not be overridden by .htaccess or ini_set(). To clear a
! 1677: previously set value use none as the value.
! 1678:
! 1679: php_admin_flag name on|off
! 1680: Used to set a boolean configuration directive. This can not be
! 1681: used in .htaccess files. Any directive type set with
! 1682: php_admin_flag can not be overridden by .htaccess or ini_set().
! 1683:
! 1684: Example #1 Apache configuration example
! 1685: <IfModule mod_php5.c>
! 1686: php_value include_path ".:/usr/local/lib/php"
! 1687: php_admin_flag engine on
! 1688: </IfModule>
! 1689: <IfModule mod_php4.c>
! 1690: php_value include_path ".:/usr/local/lib/php"
! 1691: php_admin_flag engine on
! 1692: </IfModule>
! 1693:
! 1694: Caution
! 1695:
! 1696: PHP constants do not exist outside of PHP. For example, in httpd.conf
! 1697: you can not use PHP constants such as E_ALL or E_NOTICE to set the
! 1698: error_reporting directive as they will have no meaning and will
! 1699: evaluate to 0. Use the associated bitmask values instead. These
! 1700: constants can be used in php.ini
! 1701:
! 1702: Changing PHP configuration via the Windows registry
! 1703:
! 1704: When running PHP on Windows, the configuration values can be modified
! 1705: on a per-directory basis using the Windows registry. The configuration
! 1706: values are stored in the registry key HKLM\SOFTWARE\PHP\Per Directory
! 1707: Values, in the sub-keys corresponding to the path names. For example,
! 1708: configuration values for the directory c:\inetpub\wwwroot would be
! 1709: stored in the key HKLM\SOFTWARE\PHP\Per Directory
! 1710: Values\c\inetpub\wwwroot. The settings for the directory would be
! 1711: active for any script running from this directory or any subdirectory
! 1712: of it. The values under the key should have the name of the PHP
! 1713: configuration directive and the string value. PHP constants in the
! 1714: values are not parsed. However, only configuration values changeable in
! 1715: PHP_INI_USER can be set this way, PHP_INI_PERDIR values can not.
! 1716:
! 1717: Other interfaces to PHP
! 1718:
! 1719: Regardless of how you run PHP, you can change certain values at runtime
! 1720: of your scripts through ini_set(). See the documentation on the
! 1721: ini_set() page for more information.
! 1722:
! 1723: If you are interested in a complete list of configuration settings on
! 1724: your system with their current values, you can execute the phpinfo()
! 1725: function, and review the resulting page. You can also access the values
! 1726: of individual configuration directives at runtime using ini_get() or
! 1727: get_cfg_var().
! 1728: __________________________________________________________________
! 1729: __________________________________________________________________
! 1730: __________________________________________________________________
! 1731:
! 1732: Installation
! 1733:
! 1734: This section holds common questions about the way to install PHP. PHP
! 1735: is available for almost any OS (except maybe for MacOS before OSX), and
! 1736: almost any web server.
! 1737:
! 1738: To install PHP, follow the instructions in Installing PHP.
! 1739: 1. Why shouldn't I use Apache2 with a threaded MPM in a production
! 1740: environment?
! 1741: 2. Unix/Windows: Where should my php.ini file be located?
! 1742: 3. Unix: I installed PHP, but every time I load a document, I get the
! 1743: message 'Document Contains No Data'! What's going on here?
! 1744: 4. Unix: I installed PHP using RPMS, but Apache isn't processing the
! 1745: PHP pages! What's going on here?
! 1746: 5. Unix: I patched Apache with the FrontPage extensions patch, and
! 1747: suddenly PHP stopped working. Is PHP incompatible with the Apache
! 1748: FrontPage extensions?
! 1749: 6. Unix/Windows: I have installed PHP, but when I try to access a PHP
! 1750: script file via my browser, I get a blank screen.
! 1751: 7. Unix/Windows: I have installed PHP, but when try to access a PHP
! 1752: script file via my browser, I get a server 500 error.
! 1753: 8. Some operating systems: I have installed PHP without errors, but
! 1754: when I try to start Apache I get undefined symbol errors:
! 1755: [mybox:user /src/php5] root# apachectl configtest apachectl:
! 1756: /usr/local/apache/bin/httpd Undefined symbols: _compress
! 1757: _uncompress
! 1758: 9. Windows: I have installed PHP, but when I try to access a PHP
! 1759: script file via my browser, I get the error: cgi error: The
! 1760: specified CGI application misbehaved by not returning a complete
! 1761: set of HTTP headers. The headers it did return are:
! 1762: 10. Windows: I've followed all the instructions, but still can't get
! 1763: PHP and IIS to work together!
! 1764: 11. When running PHP as CGI with IIS, PWS, OmniHTTPD or Xitami, I get
! 1765: the following error: Security Alert! PHP CGI cannot be accessed
! 1766: directly..
! 1767: 12. How do I know if my php.ini is being found and read? It seems like
! 1768: it isn't as my changes aren't being implemented.
! 1769: 13. How do I add my PHP directory to the PATH on Windows?
! 1770: 14. How do I make the php.ini file available to PHP on windows?
! 1771: 15. Is it possible to use Apache content negotiation (MultiViews
! 1772: option) with PHP?
! 1773: 16. Is PHP limited to process GET and POST request methods only?
! 1774:
! 1775: Why shouldn't I use Apache2 with a threaded MPM in a production
! 1776: environment?
! 1777: PHP is glue. It is the glue used to build cool web applications
! 1778: by sticking dozens of 3rd-party libraries together and making it
! 1779: all appear as one coherent entity through an intuitive and easy
! 1780: to learn language interface. The flexibility and power of PHP
! 1781: relies on the stability and robustness of the underlying
! 1782: platform. It needs a working OS, a working web server and
! 1783: working 3rd-party libraries to glue together. When any of these
! 1784: stop working PHP needs ways to identify the problems and fix
! 1785: them quickly. When you make the underlying framework more
! 1786: complex by not having completely separate execution threads,
! 1787: completely separate memory segments and a strong sandbox for
! 1788: each request to play in, further weaknesses are introduced into
! 1789: PHP's system.
! 1790:
! 1791: If you feel you have to use a threaded MPM, look at a FastCGI
! 1792: configuration where PHP is running in its own memory space.
! 1793:
! 1794: And finally, this warning against using a threaded MPM is not as
! 1795: strong for Windows systems because most libraries on that
! 1796: platform tend to be threadsafe.
! 1797:
! 1798: Unix/Windows: Where should my php.ini file be located?
! 1799: By default on Unix it should be in /usr/local/lib which is
! 1800: <install-path>/lib. Most people will want to change this at
! 1801: compile-time with the --with-config-file-path flag. You would,
! 1802: for example, set it with something like:
! 1803:
! 1804: --with-config-file-path=/etc
! 1805:
! 1806: And then you would copy php.ini-development from the
! 1807: distribution to /etc/php.ini and edit it to make any local
! 1808: changes you want.
! 1809:
! 1810: --with-config-file-scan-dir=PATH
! 1811:
! 1812: On Windows the default path for the php.ini file is the Windows
! 1813: directory. If you're using the Apache webserver, php.ini is
! 1814: first searched in the Apaches install directory, e.g. c:\program
! 1815: files\apache group\apache. This way you can have different
! 1816: php.ini files for different versions of Apache on the same
! 1817: machine.
! 1818:
! 1819: See also the chapter about the configuration file.
! 1820:
! 1821: Unix: I installed PHP, but every time I load a document, I get the
! 1822: message 'Document Contains No Data'! What's going on here?
! 1823: This probably means that PHP is having some sort of problem and
! 1824: is core-dumping. Look in your server error log to see if this is
! 1825: the case, and then try to reproduce the problem with a small
! 1826: test case. If you know how to use 'gdb', it is very helpful when
! 1827: you can provide a backtrace with your bug report to help the
! 1828: developers pinpoint the problem. If you are using PHP as an
! 1829: Apache module try something like:
! 1830:
! 1831: + Stop your httpd processes
! 1832: + gdb httpd
! 1833: + Stop your httpd processes
! 1834: + > run -X -f /path/to/httpd.conf
! 1835: + Then fetch the URL causing the problem with your browser
! 1836: + > run -X -f /path/to/httpd.conf
! 1837: + If you are getting a core dump, gdb should inform you of this
! 1838: now
! 1839: + type: bt
! 1840: + You should include your backtrace in your bug report. This
! 1841: should be submitted to » http://bugs.php.net/
! 1842:
! 1843: If your script uses the regular expression functions
! 1844: (preg_match() and friends), you should make sure that you
! 1845: compiled PHP and Apache with the same regular expression
! 1846: package. This should happen automatically with PHP and Apache
! 1847: 1.3.x
! 1848:
! 1849: Unix: I installed PHP using RPMS, but Apache isn't processing the PHP
! 1850: pages! What's going on here?
! 1851: Assuming you installed both Apache and PHP from RPM packages,
! 1852: you need to uncomment or add some or all of the following lines
! 1853: in your httpd.conf file:
! 1854:
! 1855: # Extra Modules
! 1856: AddModule mod_php.c
! 1857: AddModule mod_perl.c
! 1858:
! 1859: # Extra Modules
! 1860: LoadModule php_module modules/mod_php.so
! 1861: LoadModule php5_module modules/libphp5.so
! 1862: LoadModule perl_module modules/libperl.so
! 1863:
! 1864: And add:
! 1865:
! 1866: AddType application/x-httpd-php .php
! 1867:
! 1868: ... to the global properties, or to the properties of the
! 1869: VirtualDomain you want to have PHP support added to.
! 1870:
! 1871: Unix: I patched Apache with the FrontPage extensions patch, and
! 1872: suddenly PHP stopped working. Is PHP incompatible with the
! 1873: Apache FrontPage extensions?
! 1874: No, PHP works fine with the FrontPage extensions. The problem is
! 1875: that the FrontPage patch modifies several Apache structures,
! 1876: that PHP relies on. Recompiling PHP (using 'make clean ; make')
! 1877: after the FP patch is applied would solve the problem.
! 1878:
! 1879: Unix/Windows: I have installed PHP, but when I try to access a PHP
! 1880: script file via my browser, I get a blank screen.
! 1881: Do a 'view source' in the web browser and you will probably find
! 1882: that you can see the source code of your PHP script. This means
! 1883: that the web server did not send the script to PHP for
! 1884: interpretation. Something is wrong with the server configuration
! 1885: - double check the server configuration against the PHP
! 1886: installation instructions.
! 1887:
! 1888: Unix/Windows: I have installed PHP, but when try to access a PHP script
! 1889: file via my browser, I get a server 500 error.
! 1890: Something went wrong when the server tried to run PHP. To get to
! 1891: see a sensible error message, from the command line, change to
! 1892: the directory containing the PHP executable (php.exe on Windows)
! 1893: and run php -i. If PHP has any problems running, then a suitable
! 1894: error message will be displayed which will give you a clue as to
! 1895: what needs to be done next. If you get a screen full of HTML
! 1896: codes (the output of the phpinfo() function) then PHP is
! 1897: working, and your problem may be related to your server
! 1898: configuration which you should double check.
! 1899:
! 1900: Some operating systems: I have installed PHP without errors, but when I
! 1901: try to start Apache I get undefined symbol errors:
! 1902:
! 1903: [mybox:user /src/php5] root# apachectl configtest
! 1904: apachectl: /usr/local/apache/bin/httpd Undefined symbols:
! 1905: _compress
! 1906: _uncompress
! 1907:
! 1908: This has actually nothing to do with PHP, but with the MySQL
! 1909: client libraries. Some need --with-zlib , others do not. This is
! 1910: also covered in the MySQL FAQ.
! 1911:
! 1912: Windows: I have installed PHP, but when I try to access a PHP script
! 1913: file via my browser, I get the error:
! 1914:
! 1915: cgi error:
! 1916: The specified CGI application misbehaved by not
! 1917: returning a complete set of HTTP headers.
! 1918: The headers it did return are:
! 1919:
! 1920: This error message means that PHP failed to output anything at
! 1921: all. To get to see a sensible error message, from the command
! 1922: line, change to the directory containing the PHP executable
! 1923: (php.exe on Windows) and run php -i. If PHP has any problems
! 1924: running, then a suitable error message will be displayed which
! 1925: will give you a clue as to what needs to be done next. If you
! 1926: get a screen full of HTML codes (the output of the phpinfo()
! 1927: function) then PHP is working.
! 1928:
! 1929: Once PHP is working at the command line, try accessing the
! 1930: script via the browser again. If it still fails then it could be
! 1931: one of the following:
! 1932:
! 1933: + File permissions on your PHP script, php.exe, php5ts.dll,
! 1934: php.ini or any PHP extensions you are trying to load are such
! 1935: that the anonymous internet user ISUR_<machinename> cannot
! 1936: access them.
! 1937: + The script file does not exist (or possibly isn't where you
! 1938: think it is relative to your web root directory). Note that
! 1939: for IIS you can trap this error by ticking the 'check file
! 1940: exists' box when setting up the script mappings in the
! 1941: Internet Services Manager. If a script file does not exist
! 1942: then the server will return a 404 error instead. There is also
! 1943: the additional benefit that IIS will do any authentication
! 1944: required for you based on the NTLanMan permissions on your
! 1945: script file.
! 1946:
! 1947: Windows: I've followed all the instructions, but still can't get PHP
! 1948: and IIS to work together!
! 1949: Make sure any user who needs to run a PHP script has the rights
! 1950: to run php.exe! IIS uses an anonymous user which is added at the
! 1951: time IIS is installed. This user needs rights to php.exe. Also,
! 1952: any authenticated user will also need rights to execute php.exe.
! 1953: And for IIS4 you need to tell it that PHP is a script engine.
! 1954: Also, you will want to read this faq.
! 1955:
! 1956: When running PHP as CGI with IIS, PWS, OmniHTTPD or Xitami, I get the
! 1957: following error: Security Alert! PHP CGI cannot be accessed
! 1958: directly..
! 1959: You must set the cgi.force_redirect directive to 0. It defaults
! 1960: to 1 so be sure the directive isn't commented out (with a ;).
! 1961: Like all directives, this is set in php.ini
! 1962:
! 1963: Because the default is 1, it's critical that you're 100% sure
! 1964: that the correct php.ini file is being read. Read this faq for
! 1965: details.
! 1966:
! 1967: How do I know if my php.ini is being found and read? It seems like it
! 1968: isn't as my changes aren't being implemented.
! 1969: To be sure your php.ini is being read by PHP, make a call to
! 1970: phpinfo(). Near the top, there will be a listing called
! 1971: Configuration File (php.ini). This will tell you where PHP is
! 1972: looking for php.ini and whether or not it's being read. If just
! 1973: a directory PATH exists, then it's not being read, and you
! 1974: should put your php.ini in that directory. If php.ini is
! 1975: included within the PATH, it is being read.
! 1976:
! 1977: If php.ini is being read and you're running PHP as a module,
! 1978: then be sure to restart your web server after making changes to
! 1979: php.ini
! 1980:
! 1981: See also php_ini_loaded_file().
! 1982:
! 1983: How do I add my PHP directory to the PATH on Windows?
! 1984: On Windows NT+ and Windows Server 2000+:
! 1985:
! 1986: + Go to Control Panel and open the System icon (Start ->
! 1987: Settings -> Control Panel -> System, or just Start -> Control
! 1988: Panel -> System for Windows XP/2003+)
! 1989: + Go to the Advanced tab
! 1990: + Click on the 'Environment Variables' button
! 1991: + Look into the 'System Variables' pane
! 1992: + Find the Path entry (you may need to scroll to find it)
! 1993: + Double click on the Path entry
! 1994: + Enter your PHP directory at the end, including ';' before
! 1995: (e.g. ;C:\php)
! 1996: + Press OK
! 1997:
! 1998: On Windows 98/Me you need to edit the autoexec.bat file:
! 1999:
! 2000: + Open the Notepad (Start -> Run and enter notepad)
! 2001: + Open the C:\autoexec.bat file
! 2002: + Locate the line with PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;.....
! 2003: and add: ;C:\php to the end of the line
! 2004: + Save the file and restart your computer
! 2005:
! 2006: Note: Be sure to reboot after following the steps above to ensure
! 2007: that the PATH changes are applied.
! 2008:
! 2009: The PHP manual used to promote the copying of files into the
! 2010: Windows system directory, this is because this directory
! 2011: (C:\Windows, C:\WINNT, etc.) is by default in the systems PATH.
! 2012: Copying files into the Windows system directory has long since
! 2013: been deprecated and may cause problems.
! 2014:
! 2015: How do I make the php.ini file available to PHP on windows?
! 2016: There are several ways of doing this. If you are using Apache,
! 2017: read their installation specific instructions (Apache 1, Apache
! 2018: 2), otherwise you must set the PHPRC environment variable:
! 2019:
! 2020: On Windows NT, 2000, XP and 2003:
! 2021:
! 2022: + Go to Control Panel and open the System icon (Start ->
! 2023: Settings -> Control Panel -> System, or just Start -> Control
! 2024: Panel -> System for Windows XP/2003)
! 2025: + Go to the Advanced tab
! 2026: + Click on the 'Environment Variables' button
! 2027: + Look into the 'System variables' pane
! 2028: + Click on 'New' and enter 'PHPRC' as the variable name and the
! 2029: directory where php.ini is located as the variable value (e.g.
! 2030: C:\php)
! 2031: + Press OK and restart your computer
! 2032:
! 2033: On Windows 98/Me you need to edit the autoexec.bat file:
! 2034:
! 2035: + Open the Notepad (Start -> Run and enter notepad)
! 2036: + Open the C:\autoexec.bat file
! 2037: + Add a new line to the end of the file: set PHPRC=C:\php
! 2038: (replace C:\php with the directory where php.ini is located).
! 2039: Please note that the path cannot contain spaces. For instance,
! 2040: if you have installed PHP in C:\Program Files\PHP, you would
! 2041: enter C:\PROGRA~1\PHP instead.
! 2042: + Save the file and restart your computer
! 2043:
! 2044: Is it possible to use Apache content negotiation (MultiViews option)
! 2045: with PHP?
! 2046: If links to PHP files include extension, everything works
! 2047: perfect. This FAQ is only for the case when links to PHP files
! 2048: don't include extension and you want to use content negotiation
! 2049: to choose PHP files from URL with no extension. In this case,
! 2050: replace the line AddType application/x-httpd-php .php with:
! 2051:
! 2052: AddHandler php5-script php
! 2053: AddType text/html php
! 2054:
! 2055: This solution doesn't work for Apache 1 as PHP module doesn't
! 2056: catch php-script.
! 2057:
! 2058: Is PHP limited to process GET and POST request methods only?
! 2059: No, it is possible to handle any request method, e.g. CONNECT.
! 2060: Proper response status can be sent with header(). If only GET
! 2061: and POST methods should be handled, it can be achieved with this
! 2062: Apache configuration:
! 2063:
! 2064: <LimitExcept GET POST>
! 2065: Deny from all
! 2066: </LimitExcept>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>