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