Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Imported Upstream version 5.0.4

  • Loading branch information...
commit 0e920280a2e04b110827bb766b9f29e3d581c4ee 0 parents
Mark A. Hershberger authored
Showing with 58,789 additions and 0 deletions.
  1. +359 −0 .gdbinit
  2. +272 −0 CODING_STANDARDS
  3. +2 −0  CREDITS
  4. +529 −0 EXTENSIONS
  5. +1,535 −0 INSTALL
  6. +68 −0 LICENSE
  7. +23 −0 Makefile.frag
  8. +76 −0 Makefile.global
  9. +928 −0 NEWS
  10. +115 −0 README.CVS-RULES
  11. +39 −0 README.EXTENSIONS
  12. +194 −0 README.EXT_SKEL
  13. +127 −0 README.PARAMETER_PARSING_API
  14. +155 −0 README.PHP4-TO-PHP5-THIN-CHANGES
  15. +57 −0 README.QNX
  16. +155 −0 README.SELF-CONTAINED-EXTENSIONS
  17. +379 −0 README.STREAMS
  18. +126 −0 README.SUBMITTING_PATCH
  19. +179 −0 README.TESTING
  20. +137 −0 README.TESTING2
  21. +123 −0 README.UNIX-BUILD-SYSTEM
  22. +174 −0 README.WIN32-BUILD-SYSTEM
  23. +112 −0 README.Zeus
  24. +193 −0 README.input_filter
  25. +155 −0 TODO
  26. +17 −0 TODO-5.1
  27. +109 −0 TODO-PHP5
  28. +3 −0  TODO.BUILDv5
  29. +26 −0 TSRM/LICENSE
  30. +6 −0 TSRM/Makefile.am
  31. +2 −0  TSRM/TODO
  32. +692 −0 TSRM/TSRM.c
  33. +186 −0 TSRM/TSRM.dsp
  34. +163 −0 TSRM/TSRM.h
  35. +1 −0  TSRM/acconfig.h
  36. +5 −0 TSRM/acinclude.m4
  37. +43 −0 TSRM/build.mk
  38. +33 −0 TSRM/buildconf
  39. +10 −0 TSRM/config.w32
  40. +31 −0 TSRM/configure.in
  41. +44 −0 TSRM/readdir.h
  42. +173 −0 TSRM/threads.m4
  43. +129 −0 TSRM/tsrm.m4
  44. +11 −0 TSRM/tsrm_config.nw.h
  45. +20 −0 TSRM/tsrm_config.w32.h
  46. +58 −0 TSRM/tsrm_config_common.h
  47. +240 −0 TSRM/tsrm_nw.c
  48. +29 −0 TSRM/tsrm_nw.h
  49. +63 −0 TSRM/tsrm_strtok_r.c
  50. +6 −0 TSRM/tsrm_strtok_r.h
  51. +934 −0 TSRM/tsrm_virtual_cwd.c
  52. +293 −0 TSRM/tsrm_virtual_cwd.h
  53. +388 −0 TSRM/tsrm_win32.c
  54. +106 −0 TSRM/tsrm_win32.h
  55. +17,629 −0 Zend/ChangeLog
  56. +186 −0 Zend/FlexLexer.h
  57. +56 −0 Zend/LICENSE
  58. +54 −0 Zend/Makefile.am
  59. +195 −0 Zend/OBJECTS2_HOWTO
  60. +136 −0 Zend/RFCs/001.txt
  61. +169 −0 Zend/RFCs/002.txt
  62. +72 −0 Zend/RFCs/003.txt
  63. +1,166 −0 Zend/ZEND_CHANGES
  64. +610 −0 Zend/Zend.dsp
  65. +281 −0 Zend/Zend.m4
  66. +258 −0 Zend/ZendCore.dep
  67. +743 −0 Zend/ZendTS.dsp
  68. +107 −0 Zend/acconfig.h
  69. +74 −0 Zend/acinclude.m4
  70. +43 −0 Zend/build.mk
  71. +33 −0 Zend/buildconf
  72. +51 −0 Zend/configure.in
  73. +1,648 −0 Zend/flex.skl
  74. +22 −0 Zend/tests/bug19859.phpt
  75. +43 −0 Zend/tests/bug20240.phpt
  76. +26 −0 Zend/tests/bug20242.phpt
  77. +37 −0 Zend/tests/bug21478.phpt
  78. +39 −0 Zend/tests/bug21888.phpt
  79. +31 −0 Zend/tests/bug22725.phpt
  80. +74 −0 Zend/tests/bug22836.phpt
  81. +12 −0 Zend/tests/bug23104.phpt
  82. +24 −0 Zend/tests/bug24436.phpt
  83. +30 −0 Zend/tests/bug24635.phpt
  84. +13 −0 Zend/tests/bug24699.phpt
  85. +9 −0 Zend/tests/bug24773.phpt
  86. +28 −0 Zend/tests/bug24884.phpt
  87. +19 −0 Zend/tests/bug26010.phpt
  88. +9 −0 Zend/tests/bug26077.phpt
  89. +67 −0 Zend/tests/bug26166.phpt
  90. +29 −0 Zend/tests/bug26229.phpt
  91. +13 −0 Zend/tests/bug26281.phpt
  92. +25 −0 Zend/tests/bug26695.phpt
  93. +22 −0 Zend/tests/bug26696.phpt
  94. +24 −0 Zend/tests/bug26697.phpt
  95. +73 −0 Zend/tests/bug26698.phpt
  96. +22 −0 Zend/tests/bug26801.phpt
  97. +37 −0 Zend/tests/bug26802.phpt
  98. +42 −0 Zend/tests/bug27641.phpt
  99. +10 −0 Zend/tests/bug27731.phpt
  100. +72 −0 Zend/tests/bug27798.phpt
  101. +65 −0 Zend/tests/bug28442.phpt
  102. +74 −0 Zend/tests/bug28444.phpt
  103. +34 −0 Zend/tests/bug29368.phpt
  104. +31 −0 Zend/tests/bug29505.phpt
  105. +35 −0 Zend/tests/bug29828.phpt
  106. +13 −0 Zend/tests/bug29883.phpt
  107. +32 −0 Zend/tests/bug30725.phpt
  108. +20 −0 Zend/tests/bug30856.phpt
  109. +13 −0 Zend/tests/bug30922.phpt
  110. +53 −0 Zend/tests/bug31098.phpt
  111. +97 −0 Zend/tests/bug31683.phpt
  112. +16 −0 Zend/tests/bug31720.phpt
  113. +36 −0 Zend/tests/bug32226.phpt
  114. +35 −0 Zend/tests/bug32290.phpt
  115. +28 −0 Zend/tests/bug_debug_backtrace.phpt
  116. +34 −0 Zend/tests/dtor_scope.phpt
  117. +275 −0 Zend/tests/zend2.php.txt
  118. +12 −0 Zend/tests/zend_operators.phpt
  119. +1,161 −0 Zend/zend.c
  120. +631 −0 Zend/zend.h
  121. BIN  Zend/zend.ico
  122. +2,051 −0 Zend/zend_API.c
  123. +548 −0 Zend/zend_API.h
  124. +795 −0 Zend/zend_alloc.c
  125. +203 −0 Zend/zend_alloc.h
  126. +27 −0 Zend/zend_arg_defs.c
  127. +1,903 −0 Zend/zend_builtin_functions.c
  128. +39 −0 Zend/zend_builtin_functions.h
  129. +3,780 −0 Zend/zend_compile.c
  130. +853 −0 Zend/zend_compile.h
  131. +88 −0 Zend/zend_config.nw.h
  132. +108 −0 Zend/zend_config.w32.h
  133. +340 −0 Zend/zend_constants.c
  134. +77 −0 Zend/zend_constants.h
  135. +44 −0 Zend/zend_default_classes.c
  136. +72 −0 Zend/zend_dynamic_array.c
  137. +47 −0 Zend/zend_dynamic_array.h
  138. +49 −0 Zend/zend_errors.h
  139. +612 −0 Zend/zend_exceptions.c
  140. +58 −0 Zend/zend_exceptions.h
  141. +4,492 −0 Zend/zend_execute.c
  142. +186 −0 Zend/zend_execute.h
  143. +1,359 −0 Zend/zend_execute_API.c
  144. +295 −0 Zend/zend_extensions.c
  145. +132 −0 Zend/zend_extensions.h
  146. +142 −0 Zend/zend_fast_cache.h
  147. +319 −0 Zend/zend_globals.h
  148. +117 −0 Zend/zend_globals_macros.h
  149. +1,328 −0 Zend/zend_hash.c
  150. +361 −0 Zend/zend_hash.h
  151. +264 −0 Zend/zend_highlight.c
  152. +61 −0 Zend/zend_highlight.h
  153. +156 −0 Zend/zend_indent.c
  154. +37 −0 Zend/zend_indent.h
  155. +540 −0 Zend/zend_ini.c
  156. +215 −0 Zend/zend_ini.h
Sorry, we could not display the entire diff because too many files (3,707) changed.
359 .gdbinit
@@ -0,0 +1,359 @@
+set $zts = 0
+
+define ____executor_globals
+ if $zts
+ set $eg = ((zend_executor_globals) (*((void ***) tsrm_ls))[executor_globals_id-1])
+ else
+ set $eg = executor_globals
+ end
+end
+
+document ____executor_globals
+ portable way of accessing executor_globals
+ type "set $zts = 1" if you use --enable-maintainer-zts on your configure line
+end
+
+define dump_bt
+ set $t = $arg0
+ while $t
+ printf "[0x%08x] ", $t
+ if $t->function_state.function->common.function_name
+ printf "%s() ", $t->function_state.function->common.function_name
+ else
+ printf "??? "
+ end
+ if $t->op_array != 0
+ printf "%s:%d ", $t->op_array->filename, $t->opline->lineno
+ end
+ set $t = $t->prev_execute_data
+ printf "\n"
+ end
+end
+
+document dump_bt
+ dumps the current execution stack. usage: dump_bt executor_globals.current_execute_data
+end
+
+define printzv
+ set $ind = 1
+ ____printzv $arg0 0
+end
+
+document printzv
+ prints content of zval
+end
+
+define ____printzv_contents
+ ____executor_globals
+ set $zvalue = $arg0
+
+ if $zvalue.type == 0
+ set $typename = "NULL"
+ end
+ if $zvalue.type == 1
+ set $typename = "long"
+ end
+ if $zvalue.type == 2
+ set $typename = "double"
+ end
+ if $zvalue.type == 3
+ set $typename = "string"
+ end
+ if $zvalue.type == 4
+ set $typename = "array"
+ end
+ if $zvalue.type == 5
+ set $typename = "object"
+ end
+ if $zvalue.type == 6
+ set $typename = "bool"
+ end
+ if $zvalue.type == 7
+ set $typename = "resource"
+ end
+ if $zvalue.type == 8
+ set $typename = "constant"
+ end
+ if $zvalue.type == 9
+ set $typename = "const_array"
+ end
+
+ printf "(refcount=%d) %s: ", $zvalue.refcount, $typename
+ if $zvalue.type == 1
+ printf "%ld", $zvalue.value.lval
+ end
+ if $zvalue->type == 2
+ printf "%lf", $zvalue.value.dval
+ end
+ if $zvalue.type == 3
+ printf "\"%s\"(%d)", $zvalue.value.str.val, $zvalue.value.str.len
+ end
+ if $zvalue.type == 4
+ if ! $arg1
+ printf "{\n"
+ set $ind = $ind + 1
+ ____print_ht $zvalue.value.ht
+ set $ind = $ind - 1
+ set $i = $ind
+ while $i > 0
+ printf " "
+ set $i = $i - 1
+ end
+ printf "}"
+ end
+ end
+ if $zvalue.type == 5
+ if ! $arg1
+ printf "(prop examination disabled due to a gdb bug)"
+ if $zvalue.value.obj.handlers->get_properties
+# set $ht = $zvalue->value.obj.handlers->get_properties($zvalue)
+# printf "{\n"
+# set $ind = $ind + 1
+# ____print_ht $ht
+# set $ind = $ind - 1
+# set $i = $ind
+# while $i > 0
+# printf " "
+# set $i = $i - 1
+# end
+# printf "}"
+ end
+ end
+ end
+ if $zvalue.type == 6
+ if $zvalue.value.lval
+ printf "true"
+ else
+ printf "false"
+ end
+ end
+ if $zvalue.type == 7
+ printf "#%d", $zvalue.value.lval
+ end
+ printf "\n"
+end
+
+define ____printzv
+ ____executor_globals
+ set $zvalue = $arg0
+
+ printf "[0x%08x] ", $zvalue
+
+ if $zvalue == $eg.uninitialized_zval_ptr
+ printf "*uninitialized* "
+ end
+
+ set $zcontents = *(struct _zval_struct *) $zvalue
+ if $arg1
+ ____printzv_contents $zcontents $arg1
+ else
+ ____printzv_contents $zcontents 0
+ end
+end
+
+define ____print_const_table
+ set $ht = $arg0
+ set $p = $ht->pListHead
+
+ while $p != 0
+ set $const = *(zend_constant *) $p->pData
+
+ set $i = $ind
+ while $i > 0
+ printf " "
+ set $i = $i - 1
+ end
+
+ if $p->nKeyLength > 0
+ printf "\"%s\" => ", $p->arKey
+ else
+ printf "%d => ", $p->h
+ end
+
+ ____printzv_contents $const.value 0
+ set $p = $p->pListNext
+ end
+end
+
+define print_const_table
+ set $ind = 1
+ printf "[0x%08x] {\n", $arg0
+ ____print_const_table $arg0
+ printf "}\n"
+end
+
+define ____print_ht
+ set $ht = $arg0
+ set $p = $ht->pListHead
+
+ while $p != 0
+ set $zval = *(struct _zval_struct **)$p->pData
+
+ set $i = $ind
+ while $i > 0
+ printf " "
+ set $i = $i - 1
+ end
+
+ if $p->nKeyLength > 0
+ printf "\"%s\" => ", $p->arKey
+ else
+ printf "%d => ", $p->h
+ end
+
+ ____printzv $zval 1
+ set $p = $p->pListNext
+ end
+end
+
+define print_ht
+ set $ind = 1
+ printf "[0x%08x] {\n", $arg0
+ ____print_ht $arg0
+ printf "}\n"
+end
+
+document print_ht
+ dumps elements of HashTable made of zval
+end
+
+define printzn
+ ____executor_globals
+ set $ind = 0
+ set $znode = $arg0
+ if $znode->op_type == 1
+ set $optype = "IS_CONST"
+ end
+ if $znode->op_type == 2
+ set $optype = "IS_TMP_VAR"
+ end
+ if $znode->op_type == 4
+ set $optype = "IS_VAR"
+ end
+ if $znode->op_type == 8
+ set $optype = "IS_UNUSED"
+ end
+
+ printf "[0x%08x] %s", $znode, $optype
+
+ if $znode->op_type == 1
+ printf ": "
+ ____printzv &$znode->u.constant 0
+ end
+ if $znode->op_type == 2
+ printf ": "
+ set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var)
+ ____printzv ((union _temp_variable *)$tvar)->tmp_var 0
+ end
+ if $znode->op_type == 4
+ printf ": "
+ set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var)
+ ____printzv *$tvar->var.ptr_ptr 0
+ end
+ if $znode->op_type == 8
+ printf "\n"
+ end
+end
+
+document printzn
+ print type and content of znode.
+ usage: printzn &opline->op1
+end
+
+define printzops
+ printf "op1 => "
+ printzn &execute_data->opline.op1
+ printf "op2 => "
+ printzn &execute_data->opline.op2
+ printf "result => "
+ printzn &execute_data->opline.result
+end
+
+document printzops
+ dump operands of the current opline
+end
+
+define zbacktrace
+ ____executor_globals
+ dump_bt $eg.current_execute_data
+end
+
+document zbacktrace
+ prints backtrace.
+ This command is almost a short cut for
+ > (gdb) ____executor_globals
+ > (gdb) dump_bt $eg.current_execute_data
+end
+
+define zmemcheck
+ set $p = alloc_globals.head
+ set $stat = "?"
+ set $total_size = 0
+ if $arg0 != 0
+ set $not_found = 1
+ else
+ set $not_found = 0
+ end
+ printf " block size status file:line\n"
+ printf "-------------------------------------------------------------------------------\n"
+ while $p
+ set $aptr = $p + sizeof(struct _zend_mem_header) + sizeof(align_test)
+ if $arg0 == 0 || (void *)$aptr == (void *)$arg0
+ if $p->magic == 0x7312f8dc
+ set $stat = "OK"
+ end
+ if $p->magic == 0x99954317
+ set $stat = "FREED"
+ end
+ if $p->magic == 0xfb8277dc
+ set $stat = "CACHED"
+ end
+ set $filename = strrchr($p->filename, '/')
+ if !$filename
+ set $filename = $p->filename
+ else
+ set $filename = $filename + 1
+ end
+ printf " 0x%08x ", $aptr
+ if $p->size == sizeof(struct _zval_struct) && ((struct _zval_struct *)$aptr)->type >= 0 && ((struct _zval_struct *)$aptr)->type < 10
+ printf "ZVAL?(%-2d) ", $p->size
+ else
+ printf "%-9d ", $p->size
+ end
+ set $total_size = $total_size + $p->size
+ printf "%-06s %s:%d", $stat, $filename, $p->lineno
+ if $p->orig_filename
+ set $orig_filename = strrchr($p->orig_filename, '/')
+ if !$orig_filename
+ set $orig_filename = $p->orig_filename
+ else
+ set $orig_filename = $orig_filename + 1
+ end
+ printf " <= %s:%d\n", $orig_filename, $p->orig_lineno
+ else
+ printf "\n"
+ end
+ if $arg0 != 0
+ set $p = 0
+ set $not_found = 0
+ else
+ set $p = $p->pNext
+ end
+ else
+ set $p = $p->pNext
+ end
+ end
+ if $not_found
+ printf "no such block that begins at 0x%08x.\n", $aptr
+ end
+ if $arg0 == 0
+ printf "-------------------------------------------------------------------------------\n"
+ printf " total: %d bytes\n", $total_size
+ end
+end
+
+document zmemcheck
+ show status of a memory block.
+ usage: zmemcheck [ptr].
+ if ptr is 0, all blocks will be listed.
+end
272 CODING_STANDARDS
@@ -0,0 +1,272 @@
+PHP Coding Standards
+====================
+
+
+This file lists several standards that any programmer, adding or changing
+code in PHP, should follow. Since this file was added at a very late
+stage of the development of PHP v3.0, the code base does not (yet) fully
+follow it, but it's going in that general direction. Since we are now
+well into the version 4 releases, many sections have been recoded to use
+these rules.
+
+
+Code Implementation
+-------------------
+
+[0] Document your code in source files and the manual. [tm]
+
+[1] Functions that are given pointers to resources should not free them
+
+For instance, function int mail(char *to, char *from) should NOT free
+to and/or from.
+Exceptions:
+
+ - The function's designated behavior is freeing that resource. E.g. efree()
+ - The function is given a boolean argument, that controls whether or not
+ the function may free its arguments (if true - the function must free its
+ arguments, if false - it must not)
+ - Low-level parser routines, that are tightly integrated with the token
+ cache and the bison code for minimum memory copying overhead.
+
+[2] Functions that are tightly integrated with other functions within the
+ same module, and rely on each other non-trivial behavior, should be
+ documented as such and declared 'static'. They should be avoided if
+ possible.
+
+[3] Use definitions and macros whenever possible, so that constants have
+ meaningful names and can be easily manipulated. The only exceptions
+ to this rule are 0 and 1, when used as false and true (respectively).
+ Any other use of a numeric constant to specify different behavior
+ or actions should be done through a #define.
+
+[4] When writing functions that deal with strings, be sure to remember
+ that PHP holds the length property of each string, and that it
+ shouldn't be calculated with strlen(). Write your functions in a such
+ a way so that they'll take advantage of the length property, both
+ for efficiency and in order for them to be binary-safe.
+ Functions that change strings and obtain their new lengths while
+ doing so, should return that new length, so it doesn't have to be
+ recalculated with strlen() (e.g. php_addslashes())
+
+[5] NEVER USE strncat(). If you're absolutely sure you know what you're doing,
+ check its man page again, and only then, consider using it, and even then,
+ try avoiding it.
+
+[6] Use PHP_* macros in the PHP source, and ZEND_* macros in the Zend
+ part of the source. Although the PHP_* macro's are mostly aliased to the
+ ZEND_* macros it gives a better understanding on what kind of macro you're
+ calling.
+
+[7] When commenting out code using a #if statement, do NOT use 0 only. Instead
+ use "<cvs username here>_0". For example, #if FOO_0, where FOO is your
+ cvs user foo. This allows easier tracking of why code was commented out,
+ especially in bundled libraries.
+
+[8] Do not define functions that are not available. For instance, if a
+ library is missing a function, do not define the PHP version of the
+ function, and do not raise a run-time error about the function not
+ existing. End users should use function_exists() to test for the
+ existence of a function
+
+[9] Prefer emalloc(), efree(), estrdup(), etc. to their standard C library
+ counterparts. These functions implement an internal "safety-net"
+ mechanism that ensures the deallocation of any unfreed memory at the
+ end of a request. They also provide useful allocation and overflow
+ information while running in debug mode.
+
+ In almost all cases, memory returned to the engine must be allocated
+ using emalloc().
+
+ The use of malloc() should be limited to cases where a third-party
+ library may need to control or free the memory, or when the memory in
+ question needs to survive between multiple requests.
+
+Naming Conventions
+------------------
+
+[1] Function names for user-level functions should be enclosed with in
+ the PHP_FUNCTION() macro. They should be in lowercase, with words
+ underscore delimited, with care taken to minimize the letter count.
+ Abbreviations should not be used when they greatly decrease the
+ readability of the function name itself.
+
+ Good:
+ 'mcrypt_enc_self_test'
+ 'mysql_list_fields'
+
+ Ok:
+ 'mcrypt_module_get_algo_supported_key_sizes'
+ (could be 'mcrypt_mod_get_algo_sup_key_sizes'?)
+ 'get_html_translation_table'
+ (could be 'html_get_trans_table'?)
+
+ Bad:
+ 'hw_GetObjectByQueryCollObj'
+ 'pg_setclientencoding'
+ 'jf_n_s_i'
+
+[2] If they are part of a "parent set" of functions, that parent should
+ be included in the user function name, and should be clearly related
+ to the parent program or function family. This should be in the form
+ of parent_*.
+
+ A family of 'foo' functions, for example:
+ Good:
+ 'foo_select_bar'
+ 'foo_insert_baz'
+ 'foo_delete_baz'
+
+ Bad:
+ 'fooselect_bar'
+ 'fooinsertbaz'
+ 'delete_foo_baz'
+
+[3] Function names used by user functions should be prefixed
+ with "_php_", and followed by a word or an underscore-delimited list of
+ words, in lowercase letters, that describes the function. If applicable,
+ they should be declared 'static'.
+
+[4] Variable names must be meaningful. One letter variable names must be
+ avoided, except for places where the variable has no real meaning or
+ a trivial meaning (e.g. for (i=0; i<100; i++) ...).
+
+[5] Variable names should be in lowercase. Use underscores to separate
+ between words.
+
+[6] Method names follow the 'studlyCaps' (also referred to as 'bumpy case'
+ or 'camel caps') naming convention, with care taken to minimize the
+ letter count. The initial letter of the name is lowercase, and each
+ letter that starts a new 'word' is capitalized.
+
+ Good:
+ 'connect()'
+ 'getData()'
+ 'buildSomeWidget()'
+
+ Bad:
+ 'get_Data()'
+ 'buildsomewidget'
+ 'getI()'
+
+[7] Classes should be given descriptive names. Avoid using abbreviations
+ where possible. Each word in the class name should start with a capital
+ letter, with words underscore delimited. The class name should be prefixed
+ with the name of the 'parent set'.
+
+ Good:
+ 'Curl'
+ 'Foo_Bar'
+
+ Bad:
+ 'foobar'
+ 'foo_bar'
+ 'FooBar'
+
+
+Syntax and indentation
+----------------------
+
+[1] Never use C++ style comments (i.e. // comment). Always use C-style
+ comments instead. PHP is written in C, and is aimed at compiling
+ under any ANSI-C compliant compiler. Even though many compilers
+ accept C++-style comments in C code, you have to ensure that your
+ code would compile with other compilers as well.
+ The only exception to this rule is code that is Win32-specific,
+ because the Win32 port is MS-Visual C++ specific, and this compiler
+ is known to accept C++-style comments in C code.
+
+[2] Use K&R-style. Of course, we can't and don't want to
+ force anybody to use a style he or she is not used to, but,
+ at the very least, when you write code that goes into the core
+ of PHP or one of its standard modules, please maintain the K&R
+ style. This applies to just about everything, starting with
+ indentation and comment styles and up to function declaration
+ syntax.
+
+ (see also http://www.catb.org/~esr/jargon/html/I/indent-style.html)
+
+[3] Be generous with whitespace and braces. Always prefer:
+
+ if (foo) {
+ bar;
+ }
+
+ to:
+
+ if(foo)bar;
+
+ Keep one empty line between the variable declaration section and
+ the statements in a block, as well as between logical statement
+ groups in a block. Maintain at least one empty line between
+ two functions, preferably two.
+
+[4] When indenting, use the tab character. A tab is expected to represent
+ four spaces. It is important to maintain consistency in indenture so
+ that definitions, comments, and control structures line up correctly.
+
+[5] Preprocessor statements (#if and such) MUST start at column one. To
+ indent preprocessor directives you should put the # at the beginning
+ of a line, followed by any number of whitespace.
+
+Documentation and Folding Hooks
+-------------------------------
+
+In order to make sure that the online documentation stays in line with
+the code, each user-level function should have its user-level function
+prototype before it along with a brief one-line description of what the
+function does. It would look like this:
+
+/* {{{ proto int abs(int number)
+ Returns the absolute value of the number */
+PHP_FUNCTION(abs)
+{
+ ...
+}
+/* }}} */
+
+The {{{ symbols are the default folding symbols for the folding mode in
+Emacs and vim (set fdm=marker). Folding is very useful when dealing with
+large files because you can scroll through the file quickly and just unfold
+the function you wish to work on. The }}} at the end of each function marks
+the end of the fold, and should be on a separate line.
+
+The "proto" keyword there is just a helper for the doc/genfuncsummary script
+which generates a full function summary. Having this keyword in front of the
+function prototypes allows us to put folds elsewhere in the code without
+messing up the function summary.
+
+Optional arguments are written like this:
+
+/* {{{ proto object imap_header(int stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])
+ Returns a header object with the defined parameters */
+
+And yes, please keep the prototype on a single line, even if that line
+is massive.
+
+New and Experimental Functions
+-----------------------------------
+To reduce the problems normally associated with the first public
+implementation of a new set of functions, it has been suggested
+that the first implementation include a file labeled 'EXPERIMENTAL'
+in the function directory, and that the functions follow the
+standard prefixing conventions during their initial implementation.
+
+The file labelled 'EXPERIMENTAL' should include the following
+information:
+ Any authoring information (known bugs, future directions of the module).
+ Ongoing status notes which may not be appropriate for CVS comments.
+
+Aliases & Legacy Documentation
+-----------------------------------
+You may also have some deprecated aliases with close to duplicate
+names, for example, somedb_select_result and somedb_selectresult. For
+documentation purposes, these will only be documented by the most
+current name, with the aliases listed in the documentation for
+the parent function. For ease of reference, user-functions with
+completely different names, that alias to the same function (such as
+highlight_file and show_source), will be separately documented. The
+proto should still be included, describing which function is aliased.
+
+Backwards compatible functions and names should be maintained as long
+as the code can be reasonably be kept as part of the codebase. See
+/phpdoc/README for more information on documentation.
2  CREDITS
@@ -0,0 +1,2 @@
+For the list of people who've put work into PHP, please see
+http://www.php.net/credits.php
529 EXTENSIONS
@@ -0,0 +1,529 @@
+ List of PHP maintainers
+ =======================
+
+Maintenance legend
+------------------
+ Supported: Someone is actually paid to look after this.
+ Maintained: Someone actually looks after it.
+ Odd Fixes: It has a maintainer but they don't have time to do
+ much other than throw the odd patch in. See below.
+ Orphan: No current maintainer [but maybe you could take the
+ role as you write your new code].
+ Obsolete: Old code. Something tagged obsolete generally means
+ it has been replaced by a better system and you
+ should be using that.
+ Unknown: Not known at this time.
+
+Status legend
+-------------
+ Working: Working under both Windows and Unix.
+ Windows: Working only under Windows.
+ Unix: Working only under Unix.
+ Experimental: Under development or initial release.
+ Not Working: Not working.
+ Unknown: Status unknown.
+
+
+== Server APIs ==
+
+-------------------------------------------------------------------------------
+EXTENSION: aolserver
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: apache
+PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: apache_hooks
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: apache2filter
+PRIMARY MAINTAINER: Aaron Bannert <aaron@php.net>
+MAINTENANCE: Maintained
+STATUS: Experimental
+-------------------------------------------------------------------------------
+EXTENSION: apache2handler
+PRIMARY MAINTAINER: Aaron Bannert <aaron@php.net>
+MAINTENANCE: Maintained
+STATUS: Experimental
+-------------------------------------------------------------------------------
+EXTENSION: caudium
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: cgi
+MAINTENANCE: Unknown
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: cli
+MAINTENANCE: Marcus Boerger <helly@php.net>, Edin Kadribasic <edink@php.net>
+STATUS: Working
+SINCE: 4.3.0
+-------------------------------------------------------------------------------
+EXTENSION: continuity
+PRIMARY MAINTAINER: Alex Leigh <aleigh@php.net>
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: embed
+PRIMARY MAINTAINER: Edin Kadribasic <edink@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: isapi
+MAINTENANCE: Unknown
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: milter
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: nsapi
+PRIMARY MAINTAINER: Uwe Schindler <thetaphi@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: phttpd
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: pi3web
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: roxen
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: thttpd
+PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
+MAINTENANCE: Odd fixes
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: tux
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: webjames
+PRIMARY MAINTAINER: Alex Waugh <alex@alexwaugh.com>
+MAINTENANCE: Maintained
+STATUS: Experimental
+-------------------------------------------------------------------------------
+
+
+== Database extensions ==
+
+-------------------------------------------------------------------------------
+EXTENSION: dba
+PRIMARY MAINTAINER: Marcus B�rger <helly@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+COMMENT: DBM abstraction for db2, db3, db4, dbm, ndbm, gdbm, ini
+-------------------------------------------------------------------------------
+EXTENSION: dbase
+MAINTENANCE: Orphaned
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: dbx
+PRIMARY MAINTAINER: Marc Boeren <M.Boeren@guidance.nl>
+MAINTENANCE: Maintained
+STATUS: Working
+SINCE: 4.0.6
+COMMENT: DB abstraction for odbc, mysql, pgsql, mssql, fbsql and more, see documentation
+-------------------------------------------------------------------------------
+EXTENSION: fbsql
+PRIMARY MAINTAINER: Frank M. Kromann <fmk@swwwing.com>
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: informix
+PRIMARY MAINTAINER: Danny Heijl <Danny.Heijl@cevi.be>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: ingres_ii
+PRIMARY MAINTAINER: David H�not <henot@php.net>
+MAINTENANCE: Maintained
+STATUS: Experimental
+SINCE: 4.0.2
+-------------------------------------------------------------------------------
+EXTENSION: interbase
+PRIMARY MAINTAINER: Ard Biesheuvel <ard@ard.nu>, Jouni Ahto <jouni.ahto@exdec.fi>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: msql
+MAINTENANCE: Unknown
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: mssql
+PRIMARY MAINTAINER: Frank M. Kromann <fmk@swwwing.com>
+MAINTENANCE: Maintained
+STATUS: Working
+COMMENT: Tested on phpts and isapi versions
+-------------------------------------------------------------------------------
+EXTENSION: mysql
+PRIMARY MAINTAINER: Zak Greant <zak@mysql.com>, Georg Richter <georg@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: mysqli
+PRIMARY MAINTAINER: Georg Richter <georg@php.net>
+MAINTENANCE: Maintained
+STATUS: Experimental
+SINCE: 5.0
+-------------------------------------------------------------------------------
+EXTENSION: oci8
+PRIMARY MAINTAINER: Antony Dovgal <tony2001@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: odbc
+PRIMARY MAINTAINER: Daniel R. Kalowsky <kalowsky@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+COMMENT: Working
+-------------------------------------------------------------------------------
+EXTENSION: oracle
+MAINTENANCE: Orphaned
+STATUS: Working
+COMMENT: Using the new OCI8 driver is encouraged where possible.
+-------------------------------------------------------------------------------
+EXTENSION: ovrimos
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: pgsql
+PRIMARY MAINTAINER: Marcus Boerger <helly@php.net>, Yasuo Ohgaki <yohgaki@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+COMMENT: Use PostgreSQL 7.0.x or later. PostgreSQL 6.5.3 or less have fatal bug.
+-------------------------------------------------------------------------------
+EXTENSION: sqlite
+PRIMARY MAINTAINER: Marcus Boerger <helly@php.net>, Wez Furlong <wez@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+SINCE: 5.0 (Since 4.3.2 in PECL)
+COMMENT: Integrates SQLite embeddable SQL database engine.
+-------------------------------------------------------------------------------
+EXTENSION: sybase
+MAINTENANCE: Unknown
+STATUS: Not Working
+-------------------------------------------------------------------------------
+EXTENSION: sybase_ct
+MAINTENANCE: Unknown
+STATUS: Working
+-------------------------------------------------------------------------------
+
+
+== XML extensions ==
+
+-------------------------------------------------------------------------------
+EXTENSION: dom
+PRIMARY MAINTAINER: Christian Stocker <chregu@php.net>, Rob Richards <rrichards@php.net>, Marcus Boerger <helly@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+SINCE: 5.0
+-------------------------------------------------------------------------------
+EXTENSION: simplexml
+PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
+MAINTENANCE: Maintained
+STATUS: Experimental
+SINCE: 5.0
+-------------------------------------------------------------------------------
+EXTENSION: soap
+PRIMARY MAINTAINER: Dmitry Stogov <dmitry@zend.com>
+MAINTENANCE: Maintained
+STATUS: Experimental
+-------------------------------------------------------------------------------
+EXTENSION: wddx
+PRIMARY MAINTAINER: Andrei Zmievski <andrei@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: xml
+PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: xmlrpc
+PRIMARY MAINTAINER: Dan Libby
+MAINTENANCE: UNKNOWN
+STATUS: Experimental
+-------------------------------------------------------------------------------
+EXTENSION: xsl
+PRIMARY MAINTAINER: Christian Stocker <chregu@php.net>, Rob Richards <rrichards@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+SINCE: 5.0
+-------------------------------------------------------------------------------
+
+
+== Other extensions ==
+
+-------------------------------------------------------------------------------
+EXTENSION: bcmath
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: bz2
+PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
+MAINTENANCE: Odd Fixes
+STATUS: Working
+SINCE: 4.0.3
+-------------------------------------------------------------------------------
+EXTENSION: calendar
+PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
+MAINTENANCE: Odd Fixes
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: com_dotnet
+PRIMARY MAINTAINER: Wez Furlong <wez@php.net>
+MAINTENANCE: Maintained
+STATUS: Windows
+SINCE: 5.0
+-------------------------------------------------------------------------------
+EXTENSION: cpdf
+PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: ctype
+PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: curl
+PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+SINCE: 4.0.2
+-------------------------------------------------------------------------------
+EXTENSION: dio
+MAINTENANCE: Orphaned
+STATUS: Working
+SINCE: 4.0.6
+-------------------------------------------------------------------------------
+EXTENSION: exif
+PRIMARY MAINTAINER: Marcus Boerger <helly@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+SINCE: 4.2
+-------------------------------------------------------------------------------
+EXTENSION: fam
+PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: fdf
+PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
+MAINTENANCE: Maintained
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: filepro
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: ftp
+PRIMARY MAINTAINER: Stefan Esser (sesser@php.net)
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: gd
+PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: gettext
+MAINTENANCE: Unknown
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: gmp
+MAINTENANCE: Unknown
+STATUS: Unknown
+SINCE: 4.0.4
+-------------------------------------------------------------------------------
+EXTENSION: hwapi
+PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: iconv
+PRIMARY MAINTAINER: Moriyoshi Koizumi <moriyoshi@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: imap
+PRIMARY MAINTAINER: Chuck Hagenbuch <chuck@horde.org>
+MAINTENANCE: Odd Fixes
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: ircg
+PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: ldap
+PRIMARY MAINTAINER: Stig Venaas <venaas@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: mbstring
+PRIMARY MAINTAINER: Rui Hirokawa <hirokawa@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: mcrypt
+PRIMARY MAINTAINER: Derick Rethans <derick@derickrethans.nl>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: mcve
+PRIMARY MAINTAINER: Unknown
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: mhash
+PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: mime_magic
+PRIMARY MAINTAINER: Unknown
+MAINTENANCE: Deprecated
+STATUS: Experimental
+COMMENT: Use PECL's fileinfo extension instead
+-------------------------------------------------------------------------------
+EXTENSION: ming
+PRIMARY MAINTAINER: Frank M. Kromann
+MAINTENANCE: Unknown
+STATUS: Experimental
+-------------------------------------------------------------------------------
+EXTENSION: mnogosearch
+PRIMARY MAINTAINER: Sergey Kartashoff <gluke@mail.ru>
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: mono
+PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: msession
+PRIMARY MAINTAINER Mark L. Woodward <mlwmohawk@mohawksoft.com>
+MAINTENANCE: Maintained
+STATUS: Working/Experimental
+COMMENT: Tested on Linux, should work on other UNIX platforms. Backend server code can compile under Windows.
+-------------------------------------------------------------------------------
+EXTENSION: ncurses
+PRIMARY MAINTAINER Ilia Alshanetsky <iliaa@php.net>, Wez Furlong <wez@php.net>, Hartmut Holzgraefe <hholzgra@php.net>, Georg Richter <georg@php.net>
+MAINTENANCE: Unknown
+STATUS: Experimental
+-------------------------------------------------------------------------------
+EXTENSION: openssl
+PRIMARY MAINTAINER: Wez Furlong <wez@php.net>
+MAINTENANCE: Maintained
+STATUS: Experimental
+SINCE: 4.0.4
+-------------------------------------------------------------------------------
+EXTENSION: pcntl
+MAINTENANCE: Unknown
+STATUS: Experimental
+-------------------------------------------------------------------------------
+EXTENSION: pcre
+PRIMARY MAINTAINER: Andrei Zmievski <andrei@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: pfpro
+PRIMARY MAINTAINER: David Croft <david@infotrek.co.uk>
+MAINTENANCE: Maintained
+STATUS: Working
+SINCE: 4.0.2
+-------------------------------------------------------------------------------
+EXTENSION: posix
+PRIMARY MAINTAINER: Kristian K�hntopp <kris@koehntopp.de>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: pspell
+PRIMARY MAINTAINER: Vlad Krupin <phpdevel@echospace.com>
+MAINTENANCE: Unknown
+STATUS: Unknown
+SINCE: 4.0.2
+-------------------------------------------------------------------------------
+EXTENSION: readline
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: recode
+PRIMARY MAINTAINER: Kristian K�hntopp <kris@koehntopp.de>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: session
+PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: shmop
+PRIMARY MAINTAINER: Ilia Alshanetsky <iliaa@php.net>
+MAINTENANCE: Maintained
+STATUS: Experimental
+SINCE: 4.0.3
+-------------------------------------------------------------------------------
+EXTENSION: snmp
+PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
+MAINTENANCE: Odd Fixes
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: sockets
+PRIMARY MAINTAINER: Chris Vandomelen <chrisv@b0rked.dhs.org>
+MAINTENANCE: Maintained
+STATUS: Experimental
+SINCE: 4.0.2
+-------------------------------------------------------------------------------
+EXTENSION: sysvmsg
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: sysvsem
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: sysvshm
+MAINTENANCE: Unknown
+STATUS: Working
+-------------------------------------------------------------------------------
+EXTENSION: tidy
+PRIMARY MAINTAINER: John Coggeshall <john@php.net>, Ilia Alshanetsky <iliaa@php.net>
+MAINTENANCE: Maintained
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: tokenizer
+PRIMARY MAINTAINER: Andrei Zmievski <andrei@php.net>
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: w32api
+MAINTENANCE: Unknown
+STATUS: Experimental
+-------------------------------------------------------------------------------
+EXTENSION: yaz
+PRIMARY MAINTAINER: Adam Dickmeiss <adam@indexdata.dk>
+MAINTENANCE: Maintained
+STATUS: Unknown
+SINCE: 4.0.1
+-------------------------------------------------------------------------------
+EXTENSION: yp
+MAINTENANCE: Unknown
+STATUS: Unknown
+-------------------------------------------------------------------------------
+EXTENSION: zlib
+PRIMARY MAINTAINER: Stefan Roehrich <sr@linux.de>
+MAINTENANCE: Maintained
+STATUS: Working
+-------------------------------------------------------------------------------
1,535 INSTALL
@@ -0,0 +1,1535 @@
+
+Installing PHP
+ _________________________________________________________________
+
+ Table of Contents
+ Preface
+ 1. General Installation Considerations
+ 2. Installation on Unix systems
+
+ Apache 1.3.x on Unix systems
+ Apache 2.0 on Unix systems
+ Caudium
+ fhttpd related notes
+ Sun, iPlanet and Netscape servers on Sun Solaris
+ CGI and commandline setups
+ HP-UX specific installation notes
+ OpenBSD installation notes
+ Solaris specific installation tips
+ Gentoo installation notes
+
+ 3. Installation on Mac OS X
+
+ Using Packages
+ Compiling for OS X Server
+ Compiling for MacOS X Client
+
+ 4. Installation of PECL extensions
+
+ Introduction to PECL Installations
+ Downloading PECL extensions
+ PECL for Windows users
+ Compiling shared PECL extensions with PEAR
+ Compiling shared PECL extensions with phpize
+ Compiling PECL extensions statically into PHP
+
+ 5. Problems?
+
+ Read the FAQ
+ Other problems
+ Bug reports
+
+ 6. Runtime Configuration
+
+ The configuration file
+ How to change configuration settings
+ _________________________________________________________________
+
+Preface
+
+ These installation instructions were generated from the HTML version
+ of the PHP Manual so formatting and linking have been altered. See the
+ online and updated version at: http://php.net/install.unix
+ _________________________________________________________________
+
+Chapter 1. General Installation Considerations
+
+ Before starting the installation, first you need to know what do you
+ want to use PHP for. There are three main fields you can use PHP, as
+ described in the What can PHP do? section:
+
+ * Server-side scripting
+ * Command line scripting
+ * Client-side GUI applications
+
+ For the first and most common form, you need three things: PHP itself,
+ a web server and a web browser. You probably already have a web
+ browser, and depending on your operating system setup, you may also
+ have a web server (e.g. Apache on Linux and MacOS X; IIS on Windows).
+ You may also rent webspace at a company. This way, you don't need to
+ set up anything on your own, only write your PHP scripts, upload it to
+ the server you rent, and see the results in your browser.
+
+ While setting up the server and PHP on your own, you have two choices
+ for the method of connecting PHP to the server. For many servers PHP
+ has a direct module interface (also called SAPI). These servers
+ include Apache, Microsoft Internet Information Server, Netscape and
+ iPlanet servers. Many other servers have support for ISAPI, the
+ Microsoft module interface (OmniHTTPd for example). If PHP has no
+ module support for your web server, you can always use it as a CGI or
+ FastCGI processor. This means you set up your server to use the CGI
+ executable of PHP to process all PHP file requests on the server.
+
+ If you are also interested to use PHP for command line scripting (e.g.
+ write scripts autogenerating some images for you offline, or
+ processing text files depending on some arguments you pass to them),
+ you always need the command line executable. For more information,
+ read the section about writing command line PHP applications. In this
+ case, you need no server and no browser.
+
+ With PHP you can also write desktop GUI applications using the PHP-GTK
+ extension. This is a completely different approach than writing web
+ pages, as you do not output any HTML, but manage windows and objects
+ within them. For more information about PHP-GTK, please visit the site
+ dedicated to this extension. PHP-GTK is not included in the official
+ PHP distribution.
+
+ From now on, this section deals with setting up PHP for web servers on
+ Unix and Windows with server module interfaces and CGI executables.
+ You will also find information on the command line executable in the
+ following sections.
+
+ PHP source code and binary distributions for Windows can be found at
+ http://www.php.net/downloads.php. We recommend you to choose a mirror
+ nearest to you for downloading the distributions.
+ _________________________________________________________________
+
+Chapter 2. Installation on Unix systems
+
+ This section will guide you through the general configuration and
+ installation of PHP on Unix systems. Be sure to investigate any
+ sections specific to your platform or web server before you begin the
+ process.
+
+ As our manual outlines in the General Installation Considerations
+ section, we are mainly dealing with web centric setups of PHP in this
+ section, although we will cover setting up PHP for command line usage
+ as well.
+
+ There are several ways to install PHP for the Unix platform, either
+ with a compile and configure process, or through various pre-packaged
+ methods. This documentation is mainly focused around the process of
+ compiling and configuring PHP. Many Unix like systems have some sort
+ of package installation system. This can assist in setting up a
+ standard configuration, but if you need to have a different set of
+ features (such as a secure server, or a different database driver),
+ you may need to build PHP and/or your webserver. If you are unfamiliar
+ with building and compiling your own software, it is worth checking to
+ see whether somebody has already built a packaged version of PHP with
+ the features you need.
+
+ Prerequisite knowledge and software for compiling:
+
+ * Basic Unix skills (being able to operate "make" and a C compiler)
+ * An ANSI C compiler
+ * flex: Version 2.5.4
+ * bison: Version 1.28 (preferred), 1.35, or 1.75
+ * A web server
+ * Any module specific components (such as gd, pdf libs, etc.)
+
+ The initial PHP setup and configuration process is controlled by the
+ use of the commandline options of the configure script. You could get
+ a list of all available options along with short explanations running
+ ./configure --help. Our manual documents the different options
+ separately. You will find the core options in the appendix, while the
+ different extension specific options are descibed on the reference
+ pages.
+
+ When PHP is configured, you are ready to build the module and/or
+ executables. The command make should take care of this. If it fails
+ and you can't figure out why, see the Problems section.
+ _________________________________________________________________
+
+Apache 1.3.x on Unix systems
+
+ This section contains notes and hints specific to Apache installs of
+ PHP on Unix platforms. We also have instructions and notes for Apache
+ 2 on a separate page.
+
+ You can select arguments to add to the configure on line 10 below from
+ the list of core configure options and from extension specific options
+ described at the respective places in the manual. The version numbers
+ have been omitted here, to ensure the instructions are not incorrect.
+ You will need to replace the 'xxx' here with the correct values from
+ your files.
+
+ Example 2-1. Installation Instructions (Apache Shared Module Version)
+ for PHP
+1. gunzip apache_xxx.tar.gz
+2. tar -xvf apache_xxx.tar
+3. gunzip php-xxx.tar.gz
+4. tar -xvf php-xxx.tar
+5. cd apache_xxx
+6. ./configure --prefix=/www --enable-module=so
+7. make
+8. make install
+9. cd ../php-xxx
+
+10. Now, configure your PHP. This is where you customize your PHP
+ with various options, like which extensions will be enabled. Do a
+ ./configure --help for a list of available options. In our example
+ we'll do a simple configure with Apache 1 and MySQL support. Your
+ path to apxs may differ from our example.
+
+ ./configure --with-mysql --with-apxs=/www/bin/apxs
+
+11. make
+12. make install
+
+ If you decide to change your configure options after installation,
+ you only need to repeat the last three steps. You only need to
+ restart apache for the new module to take effect. A recompile of
+ Apache is not needed.
+
+ Note that unless told otherwise, 'make install' will also install PEAR,
+ various PHP tools such as phpize, install the PHP CLI, and more.
+
+13. Setup your php.ini file:
+
+ cp php.ini-dist /usr/local/lib/php.ini
+
+ You may edit your .ini file to set PHP options. If you prefer your
+ php.ini in another location, use --with-config-file-path=/some/path in
+ step 10.
+
+ If you instead choose php.ini-recommended, be certain to read the list
+ of changes within, as they affect how PHP behaves.
+
+14. Edit your httpd.conf to load the PHP module. The path on the right hand
+ side of the LoadModule statement must point to the path of the PHP
+ module on your system. The make install from above may have already
+ added this for you, but be sure to check.
+
+ For PHP 4:
+
+ LoadModule php4_module libexec/libphp4.so
+
+ For PHP 5:
+
+ LoadModule php5_module libexec/libphp5.so
+
+15. And in the AddModule section of httpd.conf, somewhere under the
+ ClearModuleList, add this:
+
+ For PHP 4:
+
+ AddModule mod_php4.c
+
+ For PHP 5:
+
+ AddModule mod_php5.c
+
+16. Tell Apache to parse certain extensions as PHP. For example,
+ let's have Apache parse the .php extension as PHP. You could
+ have any extension(s) parse as PHP by simply adding more, with
+ each separated by a space. We'll add .phtml to demonstrate.
+
+ AddType application/x-httpd-php .php .phtml
+
+ It's also common to setup the .phps extension to show highlighted PHP
+ source, this can be done with:
+
+ AddType application/x-httpd-php-source .phps
+
+17. Use your normal procedure for starting the Apache server. (You must
+ stop and restart the server, not just cause the server to reload by
+ using a HUP or USR1 signal.)
+
+ Alternatively, to install PHP as a static object:
+
+ Example 2-2. Installation Instructions (Static Module Installation for
+ Apache) for PHP
+1. gunzip -c apache_1.3.x.tar.gz | tar xf -
+2. cd apache_1.3.x
+3. ./configure
+4. cd ..
+
+5. gunzip -c php-4.x.y.tar.gz | tar xf -
+6. cd php-4.x.y
+7. ./configure --with-mysql --with-apache=../apache_1.3.x
+8. make
+9. make install
+
+10. cd ../apache_1.3.x
+
+11. ./configure --prefix=/www --activate-module=src/modules/php4/libphp4.a
+ (The above line is correct! Yes, we know libphp4.a does not exist at this
+ stage. It isn't supposed to. It will be created.)
+
+12. make
+ (you should now have an httpd binary which you can copy to your Apache bin
+dir if
+ is is your first install then you need to "make install" as well)
+
+13. cd ../php-4.x.y
+14. cp php.ini-dist /usr/local/lib/php.ini
+
+15. You can edit /usr/local/lib/php.ini file to set PHP options.
+ Edit your httpd.conf or srm.conf file and add:
+ AddType application/x-httpd-php .php
+
+ Depending on your Apache install and Unix variant, there are many
+ possible ways to stop and restart the server. Below are some typical
+ lines used in restarting the server, for different apache/unix
+ installations. You should replace /path/to/ with the path to these
+ applications on your systems.
+
+ Example 2-3. Example commands for restarting Apache
+1. Several Linux and SysV variants:
+/etc/rc.d/init.d/httpd restart
+
+2. Using apachectl scripts:
+/path/to/apachectl stop
+/path/to/apachectl start
+
+3. httpdctl and httpsdctl (Using OpenSSL), similar to apachectl:
+/path/to/httpsdctl stop
+/path/to/httpsdctl start
+
+4. Using mod_ssl, or another SSL server, you may want to manually
+stop and start:
+/path/to/apachectl stop
+/path/to/apachectl startssl
+
+ The locations of the apachectl and http(s)dctl binaries often vary. If
+ your system has locate or whereis or which commands, these can assist
+ you in finding your server control programs.
+
+ Different examples of compiling PHP for apache are as follows:
+
+ ./configure --with-apxs --with-pgsql
+
+ This will create a libphp4.so shared library that is loaded into
+ Apache using a LoadModule line in Apache's httpd.conf file. The
+ PostgreSQL support is embedded into this libphp4.so library.
+
+ ./configure --with-apxs --with-pgsql=shared
+
+ This will create a libphp4.so shared library for Apache, but it will
+ also create a pgsql.so shared library that is loaded into PHP either
+ by using the extension directive in php.ini file or by loading it
+ explicitly in a script using the dl() function.
+
+ ./configure --with-apache=/path/to/apache_source --with-pgsql
+
+ This will create a libmodphp4.a library, a mod_php4.c and some
+ accompanying files and copy this into the src/modules/php4 directory
+ in the Apache source tree. Then you compile Apache using
+ --activate-module=src/modules/php4/libphp4.a and the Apache build
+ system will create libphp4.a and link it statically into the httpd
+ binary. The PostgreSQL support is included directly into this httpd
+ binary, so the final result here is a single httpd binary that
+ includes all of Apache and all of PHP.
+
+ ./configure --with-apache=/path/to/apache_source --with-pgsql=shared
+
+ Same as before, except instead of including PostgreSQL support
+ directly into the final httpd you will get a pgsql.so shared library
+ that you can load into PHP from either the php.ini file or directly
+ using dl().
+
+ When choosing to build PHP in different ways, you should consider the
+ advantages and drawbacks of each method. Building as a shared object
+ will mean that you can compile apache separately, and don't have to
+ recompile everything as you add to, or change, PHP. Building PHP into
+ apache (static method) means that PHP will load and run faster. For
+ more information, see the Apache webpage on DSO support.
+
+ Note: Apache's default httpd.conf currently ships with a section
+ that looks like this:
+
+User nobody
+Group "#-1"
+
+ Unless you change that to "Group nogroup" or something like that
+ ("Group daemon" is also very common) PHP will not be able to open
+ files.
+
+ Note: Make sure you specify the installed version of apxs when
+ using --with-apxs=/path/to/apxs. You must NOT use the apxs version
+ that is in the apache sources but the one that is actually
+ installed on your system.
+ _________________________________________________________________
+
+Apache 2.0 on Unix systems
+
+ This section contains notes and hints specific to Apache 2.0 installs
+ of PHP on Unix systems.
+
+ Warning
+
+ We do not recommend using a threaded MPM in production with Apache2.
+ Use the prefork MPM instead, or use Apache1. For information on why,
+ read the related FAQ entry on using Apache2 with a threaded MPM
+
+ You are highly encouraged to take a look at the Apache Documentation
+ to get a basic understanding of the Apache 2.0 Server.
+
+ PHP and Apache 2.0.x compatibility notes: The following versions of
+ PHP are known to work with the most recent version of Apache 2.0.x:
+
+ * PHP 4.3.0 or later available at http://www.php.net/downloads.php.
+ * the latest stable development version. Get the source code
+ http://snaps.php.net/php4-latest.tar.gz or download binaries for
+ Windows http://snaps.php.net/win32/php4-win32-latest.zip.
+ * a prerelease version downloadable from http://qa.php.net/.
+ * you have always the option to obtain PHP through anonymous CVS.
+
+ These versions of PHP are compatible to Apache 2.0.40 and later.
+
+ Apache 2.0 SAPI-support started with PHP 4.2.0. PHP 4.2.3 works
+ with Apache 2.0.39, don't use any other version of Apache with PHP
+ 4.2.3. However, the recommended setup is to use PHP 4.3.0 or later
+ with the most recent version of Apache2.
+
+ All mentioned versions of PHP will work still with Apache 1.3.x.
+
+ Download the most recent version of Apache 2.0 and a fitting PHP
+ version from the above mentioned places. This quick guide covers only
+ the basics to get started with Apache 2.0 and PHP. For more
+ information read the Apache Documentation. The version numbers have
+ been omitted here, to ensure the instructions are not incorrect. You
+ will need to replace the 'NN' here with the correct values from your
+ files.
+
+ Example 2-4. Installation Instructions (Apache 2 Shared Module
+ Version)
+1. gzip -d httpd-2_0_NN.tar.gz
+2. tar xvf httpd-2_0_NN.tar
+3. gunzip php-NN.tar.gz
+4. tar -xvf php-NN.tar
+5. cd httpd-2_0_NN
+6. ./configure --enable-so
+7. make
+8. make install
+
+ Now you have Apache 2.0.NN available under /usr/local/apache2,
+ configured with loadable module support and the standard MPM prefork.
+ To test the installation use your normal procedure for starting
+ the Apache server, e.g.:
+ /usr/local/apache2/bin/apachectl start
+ and stop the server to go on with the configuration for PHP:
+ /usr/local/apache2/bin/apachectl stop.
+
+9. cd ../php-NN
+
+10. Now, configure your PHP. This is where you customize your PHP
+ with various options, like which extensions will be enabled. Do a
+ ./configure --help for a list of available options. In our example
+ we'll do a simple configure with Apache 2 and MySQL support. Your
+ path to apxs may differ, in fact, the binary may even be named apxs2 on
+ your system.
+
+ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql
+
+11. make
+12. make install
+
+ If you decide to change your configure options after installation,
+ you only need to repeat the last three steps. You only need to
+ restart apache for the new module to take effect. A recompile of
+ Apache is not needed.
+
+ Note that unless told otherwise, 'make install' will also install PEAR,
+ various PHP tools such as phpize, install the PHP CLI, and more.
+
+13. Setup your php.ini
+
+ cp php.ini-dist /usr/local/lib/php.ini
+
+ You may edit your .ini file to set PHP options. If you prefer having
+ php.ini in another location, use --with-config-file-path=/some/path in
+ step 10.
+
+ If you instead choose php.ini-recommended, be certain to read the list
+ of changes within, as they affect how PHP behaves.
+
+14. Edit your httpd.conf to load the PHP module. The path on the right hand
+ side of the LoadModule statement must point to the path of the PHP
+ module on your system. The make install from above may have already
+ added this for you, but be sure to check.
+
+ For PHP 4:
+
+ LoadModule php4_module libexec/libphp4.so
+
+ For PHP 5:
+
+ LoadModule php5_module libexec/libphp5.so
+
+15. Tell Apache to parse certain extensions as PHP. For example,
+ let's have Apache parse the .php extension as PHP. You could
+ have any extension(s) parse as PHP by simply adding more, with
+ each separated by a space. We'll add .phtml to demonstrate.
+
+ AddType application/x-httpd-php .php .phtml
+
+ It's also common to setup the .phps extension to show highlighted PHP
+ source, this can be done with:
+
+ AddType application/x-httpd-php-source .phps
+
+16. Use your normal procedure for starting the Apache server, e.g.:
+
+ /usr/local/apache2/bin/apachectl start
+
+ Following the steps above you will have a running Apache 2.0 with
+ support for PHP as SAPI module. Of course there are many more
+ configuration options available for both, Apache and PHP. For more
+ information use ./configure --help in the corresponding source tree.
+ In case you wish to build a multithreaded version of Apache 2.0 you
+ must overwrite the standard MPM-Module prefork either with worker or
+ perchild. To do so append to your configure line in step 6 above
+ either the option --with-mpm=worker or --with-mpm=perchild. Take care
+ about the consequences and understand what you are doing. For more
+ information read the Apache documentation about the MPM-Modules.
+
+ Note: If you want to use content negotiation, read the Apache
+ MultiViews FAQ.
+
+ Note: To build a multithreaded version of Apache your system must
+ support threads. This also implies to build PHP with experimental
+ Zend Thread Safety (ZTS). Therefore not all extensions might be
+ available. The recommended setup is to build Apache with the
+ standard prefork MPM-Module.
+ _________________________________________________________________
+
+Caudium
+
+ PHP 4 can be built as a Pike module for the Caudium webserver. Note
+ that this is not supported with PHP 3. Follow the simple instructions
+ below to install PHP 4 for Caudium.
+
+ Example 2-5. Caudium Installation Instructions
+1. Make sure you have Caudium installed prior to attempting to
+ install PHP 4. For PHP 4 to work correctly, you will need Pike
+ 7.0.268 or newer. For the sake of this example we assume that
+ Caudium is installed in /opt/caudium/server/.
+2. Change directory to php-x.y.z (where x.y.z is the version number).
+3. ./configure --with-caudium=/opt/caudium/server
+4. make
+5. make install
+6. Restart Caudium if it's currently running.
+7. Log into the graphical configuration interface and go to the
+ virtual server where you want to add PHP 4 support.
+8. Click Add Module and locate and then add the PHP 4 Script Support module.
+9. If the documentation says that the 'PHP 4 interpreter isn't
+ available', make sure that you restarted the server. If you did
+ check /opt/caudium/logs/debug/default.1 for any errors related to
+ <filename>PHP4.so</filename>. Also make sure that
+ <filename>caudium/server/lib/[pike-version]/PHP4.so</filename>
+ is present.
+10. Configure the PHP Script Support module if needed.
+
+ You can of course compile your Caudium module with support for the
+ various extensions available in PHP 4. See the reference pages for
+ extension specific configure options.
+
+ Note: When compiling PHP 4 with MySQL support you must make sure
+ that the normal MySQL client code is used. Otherwise there might be
+ conflicts if your Pike already has MySQL support. You do this by
+ specifying a MySQL install directory the --with-mysql option.
+ _________________________________________________________________
+
+fhttpd related notes
+
+ To build PHP as an fhttpd module, answer "yes" to "Build as an fhttpd
+ module?" (the --with-fhttpd=DIR option to configure) and specify the
+ fhttpd source base directory. The default directory is
+ /usr/local/src/fhttpd. If you are running fhttpd, building PHP as a
+ module will give better performance, more control and remote execution
+ capability.
+
+ Note: Support for fhttpd is no longer available as of PHP 4.3.0.
+ _________________________________________________________________
+
+Sun, iPlanet and Netscape servers on Sun Solaris
+
+ This section contains notes and hints specific to Sun Java System Web
+ Server, Sun ONE Web Server, iPlanet and Netscape server installs of
+ PHP on Sun Solaris.
+
+ From PHP 4.3.3 on you can use PHP scripts with the NSAPI module to
+ generate custom directory listings and error pages. Additional
+ functions for Apache compatibility are also available. For support in
+ current webservers read the note about subrequests.
+
+ You can find more information about setting up PHP for the Netscape
+ Enterprise Server (NES) here:
+ http://benoit.noss.free.fr/php/install-php4.html
+
+ To build PHP with Sun JSWS/Sun ONE WS/iPlanet/Netscape webservers,
+ enter the proper install directory for the --with-nsapi=[DIR] option.
+ The default directory is usually /opt/netscape/suitespot/. Please also
+ read /php-xxx-version/sapi/nsapi/nsapi-readme.txt.
+
+ 1. Install the following packages from http://www.sunfreeware.com/ or
+ another download site:
+
+ autoconf-2.13
+ automake-1.4
+ bison-1_25-sol26-sparc-local
+ flex-2_5_4a-sol26-sparc-local
+ gcc-2_95_2-sol26-sparc-local
+ gzip-1.2.4-sol26-sparc-local
+ m4-1_4-sol26-sparc-local
+ make-3_76_1-sol26-sparc-local
+ mysql-3.23.24-beta (if you want mysql support)
+ perl-5_005_03-sol26-sparc-local
+ tar-1.13 (GNU tar)
+ 2. Make sure your path includes the proper directories
+ PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin and make it
+ available to your system export PATH.
+ 3. gunzip php-x.x.x.tar.gz (if you have a .gz dist, otherwise go to
+ 4).
+ 4. tar xvf php-x.x.x.tar
+ 5. Change to your extracted PHP directory: cd ../php-x.x.x
+ 6. For the following step, make sure /opt/netscape/suitespot/ is
+ where your netscape server is installed. Otherwise, change to the
+ correct path and run:
+
+./configure --with-mysql=/usr/local/mysql \
+--with-nsapi=/opt/netscape/suitespot/ \
+--enable-libgcc
+
+ 7. Run make followed by make install.
+
+ After performing the base install and reading the appropriate readme
+ file, you may need to perform some additional configuration steps.
+
+ Configuration Instructions for Sun/iPlanet/Netscape. Firstly you may
+ need to add some paths to the LD_LIBRARY_PATH environment for the
+ server to find all the shared libs. This can best done in the start
+ script for your webserver. The start script is often located in:
+ /path/to/server/https-servername/start. You may also need to edit the
+ configuration files that are located in:
+ /path/to/server/https-servername/config/.
+
+ 1. Add the following line to mime.types (you can do that by the
+ administration server):
+
+type=magnus-internal/x-httpd-php exts=php
+
+ 2. Edit magnus.conf (for servers >= 6) or obj.conf (for servers < 6)
+ and add the following, shlib will vary depending on your system,
+ it will be something like /opt/netscape/suitespot/bin/libphp4.so.
+ You should place the following lines after mime types init.
+
+Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/o
+pt/netscape/suitespot/bin/libphp4.so"
+Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php
+_ini="/path/to/php.ini"]
+
+ (PHP >= 4.3.3) The php_ini parameter is optional but with it you
+ can place your php.ini in your webserver config directory.
+ 3. Configure the default object in obj.conf (for virtual server
+ classes [version 6.0+] in their vserver.obj.conf):
+
+<Object name="default">
+.
+.
+.
+.#NOTE this next line should happen after all 'ObjectType' and before all 'AddL
+og' lines
+Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inik
+ey=value ...]
+.
+.
+</Object>
+
+ (PHP >= 4.3.3) As additional parameters you can add some special
+ php.ini-values, for example you can set a
+ docroot="/path/to/docroot" specific to the context php4_execute is
+ called. For boolean ini-keys please use 0/1 as value, not
+ "On","Off",... (this will not work correctly), e.g.
+ zlib.output_compression=1 instead of zlib.output_compression="On"
+ 4. This is only needed if you want to configure a directory that only
+ consists of PHP scripts (same like a cgi-bin directory):
+
+<Object name="x-httpd-php">
+ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
+Service fn=php4_execute [inikey=value inikey=value ...]
+</Object>
+
+ After that you can configure a directory in the Administration
+ server and assign it the style x-httpd-php. All files in it will
+ get executed as PHP. This is nice to hide PHP usage by renaming
+ files to .html.
+ 5. Setup of authentication: PHP authentication cannot be used with
+ any other authentication. ALL AUTHENTICATION IS PASSED TO YOUR PHP
+ SCRIPT. To configure PHP Authentication for the entire server, add
+ the following line to your default object:
+
+<Object name="default">
+AuthTrans fn=php4_auth_trans
+.
+.
+.
+</Object>
+
+ 6. To use PHP Authentication on a single directory, add the
+ following:
+
+<Object ppath="d:\path\to\authenticated\dir\*">
+AuthTrans fn=php4_auth_trans
+</Object>
+
+ Note: The stacksize that PHP uses depends on the configuration of
+ the webserver. If you get crashes with very large PHP scripts, it
+ is recommended to raise it with the Admin Server (in the section
+ "MAGNUS EDITOR").
+ _________________________________________________________________
+
+CGI environment and recommended modifications in php.ini
+
+ Important when writing PHP scripts is the fact that Sun JSWS/Sun ONE
+ WS/iPlanet/Netscape is a multithreaded web server. Because of that all
+ requests are running in the same process space (the space of the
+ webserver itself) and this space has only one environment. If you want
+ to get CGI variables like PATH_INFO, HTTP_HOST etc. it is not the
+ correct way to try this in the old PHP 3.x way with getenv() or a
+ similar way (register globals to environment, $_ENV). You would only
+ get the environment of the running webserver without any valid CGI
+ variables!
+
+ Note: Why are there (invalid) CGI variables in the environment?
+
+ Answer: This is because you started the webserver process from the
+ admin server which runs the startup script of the webserver, you
+ wanted to start, as a CGI script (a CGI script inside of the admin
+ server!). This is why the environment of the started webserver has
+ some CGI environment variables in it. You can test this by starting
+ the webserver not from the administration server. Use the command
+ line as root user and start it manually - you will see there are no
+ CGI-like environment variables.
+
+ Simply change your scripts to get CGI variables in the correct way for
+ PHP 4.x by using the superglobal $_SERVER. If you have older scripts
+ which use $HTTP_HOST, etc., you should turn on register_globals in
+ php.ini and change the variable order too (important: remove "E" from
+ it, because you do not need the environment here):
+variables_order = "GPCS"
+register_globals = On
+ _________________________________________________________________
+
+Special use for error pages or self-made directory listings (PHP >= 4.3.3)
+
+ You can use PHP to generate the error pages for "404 Not Found" or
+ similar. Add the following line to the object in obj.conf for every
+ error page you want to overwrite:
+Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value ini
+key=value...]
+
+ where XXX is the HTTP error code. Please delete any other Error
+ directives which could interfere with yours. If you want to place a
+ page for all errors that could exist, leave the code parameter out.
+ Your script can get the HTTP status code with $_SERVER['ERROR_TYPE'].
+
+ Another possibility is to generate self-made directory listings. Just
+ create a PHP script which displays a directory listing and replace the
+ corresponding default Service line for
+ type="magnus-internal/directory" in obj.conf with the following:
+Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/scr
+ipt.php" [inikey=value inikey=value...]
+
+ For both error and directory listing pages the original URI and
+ translated URI are in the variables $_SERVER['PATH_INFO'] and
+ $_SERVER['PATH_TRANSLATED'].
+ _________________________________________________________________
+
+Note about nsapi_virtual() and subrequests (PHP >= 4.3.3)
+
+ The NSAPI module now supports the nsapi_virtual() function (alias:
+ virtual()) to make subrequests on the webserver and insert the result
+ in the webpage. This function uses some undocumented features from the
+ NSAPI library. On Unix the module automatically looks for the needed
+ functions and uses them if available. If not, nsapi_virtual() is
+ disabled.
+
+ Note: But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!!
+ _________________________________________________________________
+
+CGI and commandline setups
+
+ The default is to build PHP as a CGI program. This creates a
+ commandline interpreter, which can be used for CGI processing, or for
+ non-web-related PHP scripting. If you are running a web server PHP has
+ module support for, you should generally go for that solution for
+ performance reasons. However, the CGI version enables users to run
+ different PHP-enabled pages under different user-ids.
+
+ Warning
+
+ By using the CGI setup, your server is open to several possible
+ attacks. Please read our CGI security section to learn how to defend
+ yourself from those attacks.
+
+ As of PHP 4.3.0, some important additions have happened to PHP. A new
+ SAPI named CLI also exists and it has the same name as the CGI binary.
+ What is installed at {PREFIX}/bin/php depends on your configure line
+ and this is described in detail in the manual section named Using PHP
+ from the command line. For further details please read that section of
+ the manual.
+ _________________________________________________________________
+
+Testing
+
+ If you have built PHP as a CGI program, you may test your build by
+ typing make test. It is always a good idea to test your build. This
+ way you may catch a problem with PHP on your platform early instead of
+ having to struggle with it later.
+ _________________________________________________________________
+
+Benchmarking
+
+ If you have built PHP 3 as a CGI program, you may benchmark your build
+ by typing make bench. Note that if safe mode is on by default, the
+ benchmark may not be able to finish if it takes longer then the 30
+ seconds allowed. This is because the set_time_limit() can not be used
+ in safe mode. Use the max_execution_time configuration setting to
+ control this time for your own scripts. make bench ignores the
+ configuration file.
+
+ Note: make bench is only available for PHP 3.
+ _________________________________________________________________
+
+Using Variables
+
+ Some server supplied environment variables are not defined in the
+ current CGI/1.1 specification. Only the following variables are
+ defined there: AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE,
+ GATEWAY_INTERFACE, PATH_INFO, PATH_TRANSLATED, QUERY_STRING,
+ REMOTE_ADDR, REMOTE_HOST, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD,
+ SCRIPT_NAME, SERVER_NAME, SERVER_PORT, SERVER_PROTOCOL, and
+ SERVER_SOFTWARE. Everything else should be treated as 'vendor
+ extensions'.
+ _________________________________________________________________
+
+HP-UX specific installation notes
+
+ This section contains notes and hints specific to installing PHP on
+ HP-UX systems. (Contributed by paul_mckay at clearwater-it dot co dot
+ uk).
+
+ Note: These tips were written for PHP 4.0.4 and Apache 1.3.9.
+
+ 1. You need gzip, download a binary distribution from
+ http://hpux.connect.org.uk/ftp/hpux/Gnu/gzip-1.2.4a/gzip-1.2.4a-sd
+ -10.20.depot.Z uncompress the file and install using swinstall.
+ 2. You need gcc, download a binary distribution from
+ http://gatekeep.cs.utah.edu/ftp/hpux/Gnu/gcc-2.95.2/gcc-2.95.2-sd-
+ 10.20.depot.gz. uncompress this file and install gcc using
+ swinstall.
+ 3. You need the GNU binutils, you can download a binary distribution
+ from
+ http://hpux.connect.org.uk/ftp/hpux/Gnu/binutils-2.9.1/binutils-2.
+ 9.1-sd-10.20.depot.gz. uncompress this file and install binutils
+ using swinstall.
+ 4. You now need bison, you can download a binary distribution from
+ http://hpux.connect.org.uk/ftp/hpux/Gnu/bison-1.28/bison-1.28-sd-1
+ 0.20.depot.gz, install as above.
+ 5. You now need flex, you need to download the source from one of the
+ http://www.gnu.org mirrors. It is in the non-gnu directory of the
+ ftp site. Download the file, gunzip, then tar -xvf it. Go into the
+ newly created flex directory and run ./configure, followed by
+ make, and then make install.
+ If you have errors here, it's probably because gcc etc. are not in
+ your PATH so add them to your PATH.
+ 6. Download the PHP and apache sources.
+ 7. gunzip and tar -xvf them. We need to hack a couple of files so
+ that they can compile OK.
+ 8. Firstly the configure file needs to be hacked because it seems to
+ lose track of the fact that you are a hpux machine, there will be
+ a better way of doing this but a cheap and cheerful hack is to put
+ lt_target=hpux10.20 on line 47286 of the configure script.
+ 9. Next, the Apache GuessOS file needs to be hacked. Under
+ apache_1.3.9/src/helpers change line 89 from echo
+ "hp${HPUXMACH}-hpux${HPUXVER}"; exit 0 to: echo
+ "hp${HPUXMACH}-hp-hpux${HPUXVER}"; exit 0
+ 10. You cannot install PHP as a shared object under HP-UX so you must
+ compile it as a static, just follow the instructions at the Apache
+ page.
+ 11. PHP and Apache should have compiled OK, but Apache won't start.
+ you need to create a new user for Apache, e.g. www, or apache. You
+ then change lines 252 and 253 of the conf/httpd.conf in Apache so
+ that instead of
+
+User nobody
+Group nogroup
+
+ you have something like
+
+User www
+Group sys
+
+ This is because you can't run Apache as nobody under hp-ux. Apache
+ and PHP should then work.
+ _________________________________________________________________
+
+OpenBSD installation notes
+
+ This section contains notes and hints specific to installing PHP on
+ OpenBSD 3.6.
+ _________________________________________________________________
+
+Using Binary Packages
+
+ Using binary packages to install PHP on OpenBSD is the recommended and
+ simplest method. The core package has been separated from the various
+ modules, and each can be installed and removed independently from the
+ others. The files you need can be found on your OpenBSD CD or on the
+ FTP site.
+
+ The main package you need to install is php4-core-4.3.8.tgz, which
+ contains the basic engine (plus gettext and iconv). Next, take a look
+ at the module packages, such as php4-mysql-4.3.8.tgz or
+ php4-imap-4.3.8.tgz. You need to use the phpxs command to activate and
+ deactivate these modules in your php.ini.
+
+ Example 2-6. OpenBSD Package Install Example
+# pkg_add php4-core-4.3.8.tgz
+# /usr/local/sbin/phpxs -s
+# cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini
+ (add in mysql)
+# pkg_add php4-mysql-4.3.8.tgz
+# /usr/local/sbin/phpxs -a mysql
+ (add in imap)
+# pkg_add php4-imap-4.3.8.tgz
+# /usr/local/sbin/phpxs -a imap
+ (remove mysql as a test)
+# pkg_delete php4-mysql-4.3.8
+# /usr/local/sbin/phpxs -r mysql
+ (install the PEAR libraries)
+# pkg_add php4-pear-4.3.8.tgz
+
+ Read the packages(7) manual page for more information about binary
+ packages on OpenBSD.
+ _________________________________________________________________
+
+Using Ports
+
+ You can also compile up PHP from source using the ports tree. However,
+ this is only recommended for users familiar with OpenBSD. The PHP 4
+ port is split into two sub-directories: core and extensions. The
+ extensions directory generates sub-packages for all of the supported
+ PHP modules. If you find you do not want to create some of these
+ modules, use the no_* FLAVOR. For example, to skip building the imap
+ module, set the FLAVOR to no_imap.
+ _________________________________________________________________
+
+Common Problems
+
+ * The default install of Apache runs inside a chroot(2) jail, which
+ will restrict PHP scripts to accessing files under /var/www. You
+ will therefore need to create a /var/www/tmp directory for PHP
+ session files to be stored, or use an alternative session backend.
+ In addition, database sockets need to be placed inside the jail or
+ listen on the localhost interface. If you use network functions,
+ some files from /etc such as /etc/resolv.conf and /etc/services
+ will need to be moved into /var/www/etc. The OpenBSD PEAR package
+ automatically installs into the correct chroot directories, so no
+ special modification is needed there. More information on the
+ OpenBSD Apache is available in the OpenBSD FAQ.
+ * The OpenBSD 3.6 package for the gd extension requires XFree86 to
+ be installed. If you do not wish to use some of the font features
+ that require X11, install the php4-gd-4.3.8-no_x11.tgz package
+ instead.
+ _________________________________________________________________
+
+Older Releases
+
+ Older releases of OpenBSD used the FLAVORS system to compile up a
+ statically linked PHP. Since it is hard to generate binary packages
+ using this method, it is now deprecated. You can still use the old
+ stable ports trees if you wish, but they are unsupported by the
+ OpenBSD team. If you have any comments about this, the current
+ maintainer for the port is Anil Madhavapeddy (avsm at openbsd dot
+ org).
+ _________________________________________________________________
+
+Solaris specific installation tips
+
+ This section contains notes and hints specific to installing PHP on
+ Solaris systems.
+ _________________________________________________________________
+
+Required software
+
+ Solaris installs often lack C compilers and their related tools. Read
+ this FAQ for information on why using GNU versions for some of these
+ tools is necessary. The required software is as follows:
+
+ * gcc (recommended, other C compilers may work)
+ * make
+ * flex
+ * bison
+ * m4
+ * autoconf
+ * automake
+ * perl
+ * gzip
+ * tar
+ * GNU sed
+
+ In addition, you will need to install (and possibly compile) any
+ additional software specific to your configuration, such as Oracle or
+ MySQL.
+ _________________________________________________________________
+
+Using Packages
+
+ You can simplify the Solaris install process by using pkgadd to
+ install most of your needed components.
+ _________________________________________________________________
+
+Gentoo installation notes
+
+ This section contains notes and hints specific to installing PHP on
+ Gentoo Linux.
+ _________________________________________________________________
+
+Using Portage (emerge)
+
+ While you can just download the PHP source and compile it yourself,
+ using Gentoo's packaging system is the simplest and cleanest method of
+ installing PHP. If you are not familiar with building software on
+ Linux, this is the way to go.
+
+ If you have built your Gentoo system so far, you are probably used to
+ Portage already. Installing Apache and PHP is no different than the
+ other system tools.
+
+ The first decision you need to make is whether you want to install
+ Apache 1.3.x or Apache 2.x. While both can be used with PHP, the steps
+ given below will use Apache 1.3.x. Another thing to consider is
+ whether your local Portage tree is up to date. If you have not updated
+ it recently, you need to run emerge sync before anything else. This
+ way, you will be using the most recent stable version of Apache and
+ PHP.
+
+ Now that everything is in place, you can use the following example to
+ install Apache and PHP:
+
+ Example 2-7. Gentoo Install Example with Apache 1.3
+# emerge \<apache-2
+# USE="-*" emerge php mod_php
+# ebuild /var/db/pkg/dev-php/mod_php-<your PHP version>/mod_php-<your PHP versi
+on>.ebuild config
+# nano /etc/conf.d/apache
+ Add "-D PHP4" to APACHE_OPTS
+
+# rc-update add apache default
+# /etc/init.d/apache start
+
+ You can read more about emerge in the excellent Portage Manual
+ provided on the Gentoo website.
+
+ If you need to use Apache 2, you can simply use emerge apache in the
+ last example.
+ _________________________________________________________________
+
+Better control on configuration
+
+ In the last section, PHP was emerged without any activated modules. As
+ of this writing, the only module activated by default with Portage is
+ XML which is needed by PEAR. This may not be what you want and you
+ will soon discover that you need more activated modules, like MySQL,
+ gettext, GD, etc.
+
+ When you compile PHP from source yourself, you need to activate
+ modules via the configure command. With Gentoo, you can simply provide
+ USE flags which will be passed to the configure script automatically.
+ To see which USE flags to use with emerge, you can try:
+
+ Example 2-8. Getting the list of valid USE flags
+# USE="-*" emerge -pv php
+
+[ebuild N ] dev-php/php-4.3.6-r1 -X -berkdb -crypt -curl -debug -doc
+-fdftk -firebird -flash -freetds -gd -gd-external -gdbm -gmp -hardenedphp
+-imap -informix -ipv6 -java -jpeg -kerberos -ldap -mcal -memlimit -mssql
+-mysql -ncurses -nls -oci8 -odbc -pam -pdflib -png -postgres -qt -readline
+-snmp -spell -ssl -tiff -truetype -xml2 -yaz 3,876 kB
+
+ As you can see from the last output, PHP considers a lot of USE flags.
+ Look at them closely and choose what you need. If you choose a flag
+ and you do not have the proper libraries, Portage will compile them
+ for you. It is a good idea to use emerge -pv again to see what Portage
+ will compile in accordance to your USE flags. As an example, if you do
+ not have X installed and you choose to include X in the USE flags,
+ Portage will compile X prior to PHP, which can take a couple of hours.
+
+ If you choose to compile PHP with MySQL, cURL and GD support, the
+ command will look something like this:
+
+ Example 2-9. Install PHP with USE flags
+ # USE="-* curl mysql gd" emerge php mod_php
+
+ As in the last example, do not forget to emerge php as well as
+ mod_php. php is responsible for the command line version of PHP as
+ mod_php is for the Apache module version of PHP.
+ _________________________________________________________________
+
+Common Problems
+
+ * If you see the PHP source instead of the result the script should
+ produce, you have probably forgot to edit /etc/conf.d/apache.
+ Apache needs to be started with the -D PHP4 flag. To see if the
+ flag is present, you should be able to see it when using ps ax |
+ grep apache while Apache is running.
+ * Due to slotting problems, you might end up with more than one
+ version of PHP installed on your system. If this is the case, you
+ need to unmerge the old versions manually by using emerge unmerge
+ mod_php-<old version>.
+ * If you cannot emerge PHP because of Java, try putting -* in front
+ of your USE flags like in the above examples.
+ * If you are having problems configuring Apache and PHP, you can
+ always search the Gentoo Forums. Try searching with the keywords
+ "Apache PHP".
+ _________________________________________________________________
+
+Chapter 3. Installation on Mac OS X
+
+ This section contains notes and hints specific to installing PHP on
+ Mac OS X. There are two slightly different versions of Mac OS X,
+ Client and Server, our manual deals with installing PHP on both
+ systems. Note that PHP is not available for MacOS 9 and earlier
+ versions.
+ _________________________________________________________________
+
+Using Packages
+
+ There are a few pre-packaged and pre-compiled versions of PHP for Mac
+ OS X. This can help in setting up a standard configuration, but if you
+ need to have a different set of features (such as a secure server, or
+ a different database driver), you may need to build PHP and/or your
+ web server yourself. If you are unfamiliar with building and compiling
+ your own software, it's worth checking whether somebody has already
+ built a packaged version of PHP with the features you need.
+ _________________________________________________________________
+
+Compiling for OS X Server
+
+ Mac OS X Server install.
+
+ 1. Get the latest distributions of Apache and PHP.
+ 2. Untar them, and run the configure program on Apache like so.
+
+./configure --exec-prefix=/usr \
+--localstatedir=/var \
+--mandir=/usr/share/man \
+--libexecdir=/System/Library/Apache/Modules \
+--iconsdir=/System/Library/Apache/Icons \
+--includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
+--enable-shared=max \
+--enable-module=most \
+--target=apache
+
+ 3. If you want the compiler to do some optimization, you may also
+ want to add this line:
+
+setenv OPTIM=-O2
+
+ 4. Next, go to the PHP 4 source directory and configure it.
+
+./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --mandir=/usr/share/man \
+ --with-xml \
+ --with-apache=/src/apache_1.3.12
+
+ If you have any other additions (MySQL, GD, etc.), be sure to add
+ them here. For the --with-apache string, put in the path to your
+ apache source directory, for example /src/apache_1.3.12.
+ 5. Type make and make install. This will add a directory to your
+ Apache source directory under src/modules/php4.
+ 6. Now, reconfigure Apache to build in PHP 4.
+
+./configure --exec-prefix=/usr \
+--localstatedir=/var \
+--mandir=/usr/share/man \
+--libexecdir=/System/Library/Apache/Modules \
+--iconsdir=/System/Library/Apache/Icons \
+--includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
+--enable-shared=max \
+--enable-module=most \
+--target=apache \
+--activate-module=src/modules/php4/libphp4.a
+
+ You may get a message telling you that libmodphp4.a is out of
+ date. If so, go to the src/modules/php4 directory inside your
+ Apache source directory and run this command: ranlib libmodphp4.a.
+ Then go back to the root of the Apache source directory and run
+ the above configure command again. That'll bring the link table up
+ to date. Run make and make install again.
+ 7. Copy and rename the php.ini-dist file to your bin directory from
+ your PHP 4 source directory: cp php.ini-dist
+ /usr/local/bin/php.ini or (if your don't have a local directory)
+ cp php.ini-dist /usr/bin/php.ini.
+ _________________________________________________________________
+
+Compiling for MacOS X Client
+
+ The following instructions will help you install a PHP module for the
+ Apache web server included in MacOS X. This version includes support
+ for the MySQL and PostgreSQL databases. These instructions are
+ graciously provided by Marc Liyanage.
+
+ Warning
+
+ Be careful when you do this, you could screw up your Apache web
+ server!
+
+ Do this to install:
+
+ 1. Open a terminal window.
+ 2. Type wget
+ http://www.diax.ch/users/liyanage/software/macosx/libphp4.so.gz,
+ wait for the download to finish.
+ 3. Type gunzip libphp4.so.gz.
+ 4. Type sudo apxs -i -a -n php4 libphp4.so
+ 5. Now type sudo open -a TextEdit /etc/httpd/httpd.conf. TextEdit
+ will open with the web server configuration file. Locate these two
+ lines towards the end of the file: (Use the Find command)
+
+#AddType application/x-httpd-php .php
+#AddType application/x-httpd-php-source .phps
+
+ Remove the two hash marks (#), then save the file and quit
+ TextEdit.
+ 6. Finally, type sudo apachectl graceful to restart the web server.
+
+ PHP should now be up and running. You can test it by dropping a file
+ into your Sites folder which is called test.php. Into that file, write
+ this line: <?php phpinfo() ?>.
+
+ Now open up 127.0.0.1/~your_username/test.php in your web browser. You
+ should see a status table with information about the PHP module.
+ _________________________________________________________________
+
+Chapter 4. Installation of PECL extensions
+
+Introduction to PECL Installations
+
+ PHP extensions may be installed in a variety of ways. PECL is a
+ repository of PHP extensions living within the PEAR structure, and the
+ following demonstrates how to install these extensions.
+
+ These instructions assume /your/phpsrcdir/ is the path to the PHP
+ source, and extname is the name of the PECL extension. Adjust
+ accordingly. These instructions also assume a familiarity with the
+ pear command.
+
+ Shared extensions may be installed by including them inside of php.ini
+ using the extension PHP directive. See also the extensions_dir
+ directive, and dl(). The installation methods described below do not
+ automatically configure PHP to include these extensions, this step
+ must be done manually.
+
+ When building PHP modules, it's important to have the appropriate
+ versions of the required tools (autoconf, automake, libtool, etc.) See
+ the Anonymous CVS Instructions for details on the required tools, and
+ required versions.
+ _________________________________________________________________
+
+Downloading PECL extensions
+
+ There are several options for downloading PECL extensions, such as:
+
+ * http://pecl.php.net
+ Listed here is information like the ChangeLog, release
+ information, requirements, revisions, etc. Although not every PECL
+ extension has a webpage, most do.
+ * pear download extname
+ The pear command may also be used to download source files.
+ Specific revisions may also be specified.
+ * CVS
+ All PECL files reside in CVS. A web-based view may be seen at
+ http://cvs.php.net/pecl/. To download straight from CVS, consider
+ the following where phpfi is the password for user cvsread:
+
+$ cvs -d:pserver:cvsread@cvs.php.net:/repository login
+$ cvs -d:pserver:cvsread@cvs.php.net:/repository co pecl/extname
+
+ * Windows downloads
+ Windows users may find compiled PECL binaries by downloading the
+ Collection of PECL modules from the PHP Downloads page, and by
+ retrieving a PECL Snapshot. To compile PHP under Windows, read the
+ Win32 Build README.
+ _________________________________________________________________
+
</