jan             Wed Jun 16 07:11:20 2004 EDT

  Modified files:              
    /phpdoc/en  language-snippets.ent 
    /phpdoc/en/install/unix     apache2.xml 
  Log:
  - reorder language snippets
  - add Rasmus' explaination about PHP and Apache2
  #make test went through fine, it would be neat, though,
  #if someone could have a second look at it. Thanks.
  
  
http://cvs.php.net/diff.php/phpdoc/en/language-snippets.ent?r1=1.96&r2=1.97&ty=u
Index: phpdoc/en/language-snippets.ent
diff -u phpdoc/en/language-snippets.ent:1.96 phpdoc/en/language-snippets.ent:1.97
--- phpdoc/en/language-snippets.ent:1.96        Fri Jun 11 04:25:38 2004
+++ phpdoc/en/language-snippets.ent     Wed Jun 16 07:11:19 2004
@@ -1,4 +1,96 @@
-<!-- $Revision: 1.96 $ -->
+<!-- $Revision: 1.97 $ -->
+<!-- Keep 'em sorted -->
+
+
+<!-- Notes -->
+
+<!ENTITY note.bin-safe '<note><simpara>This function is
+binary-safe.</simpara></note>'>
+
+<!ENTITY note.clearstatcache '<note><simpara>The results of this 
+function are cached. See <function>clearstatcache</function> for 
+more details.</simpara></note>'>
+
+<!ENTITY note.context-support '<note><simpara>Context support was added
+with <literal>PHP 5.0.0</literal>.</simpara></note>'>
+
+<!ENTITY note.exec-bg '<note><para>If you start a program using this function
+and want to leave it running in the background, you have to make sure that the
+output of that program is redirected to a file or some other output stream or
+else PHP will hang until the execution of the program ends.</para></note>'>
+
+<!ENTITY note.func-callback '<note><simpara>Instead of a function name, an
+array containing an object reference and a method name can also be
+supplied.</simpara></note>'>
+
+<!ENTITY note.line-endings '<note><simpara>If you are having problems
+with <literal>PHP</literal> not recognizing the line endings when
+reading files either on or created by a Macintosh computer, you
+might want to enable the <link linkend="ini.auto-detect-line-endings"
+>auto_detect_line_endings</link> run-time configuration option.</simpara>
+</note>'>
+
+<!ENTITY note.no-remote '<note><simpara>This function will not work on 
+<link linkend="features.remote-files">remote files</link> as the file to
+be examined must be accessible via the servers filesystem.</simpara></note>'>
+
+<!ENTITY note.not-bin-safe '<warning><simpara>This function
+is not (yet) binary safe!</simpara></warning>'>
+
+<!ENTITY note.no-windows '<note><simpara>This function is not
+implemented on Windows platforms.</simpara></note>'>
+
+<!ENTITY note.no-windows.extension '<note><simpara>This extension is not
+available on Windows platforms.</simpara></note>'>
+
+<!ENTITY note.randomseed '<note><simpara>As of PHP 4.2.0, there is no need 
+to seed the random number generator with <function>srand</function> or 
+<function>mt_srand</function> as this is now done automatically.
+</simpara></note>'>
+
+<!ENTITY note.registerglobals '<note><title>register_globals: important 
+note</title><para>Since PHP 4.2.0, the default value for the PHP directive 
+<link linkend="ini.register-globals">register_globals</link> is <emphasis>
+off</emphasis>.  The PHP community encourages all to not rely on this 
+directive but instead use other means, such as the &link.superglobals;.
+</para></note>'>
+       
+<!ENTITY note.superglobals '<note><title>Superglobals: availability note
+</title><para>Since PHP 4.1.0, superglobal arrays such as <varname>$_GET
+</varname>, <varname>$_POST</varname>, and <varname>$_SERVER</varname>, 
+etc. have  been available.  For more information, read the manual section 
+on &link.superglobals;</para></note>'>
+
+
+<!-- Tips -->
+
+<!ENTITY tip.fopen-wrapper '<tip><simpara>You can use a URL as a
+filename with this function if the <link linkend="ini.allow-url-fopen"
+>fopen wrappers</link> have been enabled.
+See <function>fopen</function> for more details on how to specify
+the filename and <xref linkend="wrappers"/> for a list of supported
+URL protocols.</simpara></tip>'>
+
+<!ENTITY tip.fopen-wrapper.stat '<tip><simpara>As of 
+<literal>PHP 5.0.0</literal> this function can also be used with 
+<emphasis>some</emphasis> URL wrappers.  Refer to 
+<xref linkend="wrappers"/> for a listing of which wrappers support 
+<function>stat</function> family of functionality.</simpara></tip>'>
+
+<!ENTITY tip.ob-capture '<tip><simpara>As with anything that outputs
+its result directly to the browser, you can use the <link
+linkend="ref.outcontrol">output-control functions</link> to capture
+the output of this function, and save it in a
+<type>string</type> (for example).</simpara></tip>'>
+
+
+<!-- Warnings -->
+
+<!ENTITY warn.escapeshell '<warning><para>If you are going to allow data coming
+from user input to be passed to this function, then you should be using 
+<function>escapeshellarg</function> or <function>escapeshellcmd</function>
+to make sure that users cannot trick the system into executing arbitrary
+commands.</para></warning>'>
 
 <!ENTITY warn.experimental '<warning><simpara>This extension is
 <emphasis>EXPERIMENTAL</emphasis>. The behaviour of this extension --
@@ -12,9 +104,17 @@
 function may change without notice in a future release of PHP. 
 Use this function at your own risk.</simpara></warning>'>
 
-<!ENTITY warn.undocumented.func '<warning><simpara>This function is
-currently not documented; only the argument list is
-available.</simpara></warning>'>
+<!ENTITY warn.imaprecodeyaz '<warning><simpara>The <link
+linkend="ref.imap">IMAP</link> extension cannot be used in conjuction with
+the <link linkend="ref.recode">recode</link> or <link
+linkend="ref.yaz">YAZ</link> extensions.  This is due to the fact that they
+both share the same internal symbol.</simpara></warning>'>
+
+<!ENTITY note.magicquotes.gpc '<note><title>directive note: magic_quotes_gpc
+</title><para>The PHP directive <link linkend="ini.magic-quotes-gpc">
+magic_quotes_gpc</link> defaults to <literal>on</literal>.  It essentially 
+runs <function>addslashes</function> on all your GET,  POST, and COOKIE data.
+You may use <function>stripslashes</function> to strip them.</para></note>'>
 
 <!ENTITY warn.no-win32-fopen-wrapper '<warning><para>Windows
 versions of <literal>PHP</literal> prior to PHP 4.3.0 do not
@@ -33,41 +133,18 @@
 you are responsible for detecting and suppressing the warning yourself.
 </para></warning>'>
 
-<!ENTITY note.no-remote '<note><simpara>This function will not work on 
-<link linkend="features.remote-files">remote files</link> as the file to
-be examined must be accessible via the servers filesystem.</simpara></note>'>
-
-<!ENTITY tip.ob-capture '<tip><simpara>As with anything that outputs
-its result directly to the browser, you can use the <link
-linkend="ref.outcontrol">output-control functions</link> to capture
-the output of this function, and save it in a
-<type>string</type> (for example).</simpara></tip>'>
+<!ENTITY warn.undocumented.func '<warning><simpara>This function is
+currently not documented; only the argument list is
+available.</simpara></warning>'>
 
-<!ENTITY tip.fopen-wrapper '<tip><simpara>You can use a URL as a
-filename with this function if the <link linkend="ini.allow-url-fopen"
->fopen wrappers</link> have been enabled.
-See <function>fopen</function> for more details on how to specify
-the filename and <xref linkend="wrappers"/> for a list of supported
-URL protocols.</simpara></tip>'>
 
-<!ENTITY tip.fopen-wrapper.stat '<tip><simpara>As of 
-<literal>PHP 5.0.0</literal> this function can also be used with 
-<emphasis>some</emphasis> URL wrappers.  Refer to 
-<xref linkend="wrappers"/> for a listing of which wrappers support 
-<function>stat</function> family of functionality.</simpara></tip>'>
-
-<!ENTITY note.context-support '<note><simpara>Context support was added
-with <literal>PHP 5.0.0</literal>.</simpara></note>'>
-
-<!ENTITY return.success 'Returns &true; on success or &false; on failure.'>
+<!-- Misc -->
 
 <!ENTITY array.resetspointer '<note><simpara>This function will 
 <function>reset</function> the <type>array</type> pointer after 
 use.</simpara></note>'>
 
-<!ENTITY note.clearstatcache '<note><simpara>The results of this 
-function are cached. See <function>clearstatcache</function> for 
-more details.</simpara></note>'>
+<!ENTITY return.success 'Returns &true; on success or &false; on failure.'>
 
 <!ENTITY return.falseproblem '<warning><simpara>This function may
 return Boolean &false;, but may also return a non-Boolean value which
@@ -78,36 +155,12 @@
 operator</link> for testing the return value of this
 function.</simpara></warning>'>
 
-<!ENTITY warn.imaprecodeyaz '<warning><simpara>The <link
-linkend="ref.imap">IMAP</link> extension cannot be used in conjuction with
-the <link linkend="ref.recode">recode</link> or <link
-linkend="ref.yaz">YAZ</link> extensions.  This is due to the fact that they
-both share the same internal symbol.</simpara></warning>'>
-
-<!ENTITY note.registerglobals '<note><title>register_globals: important 
-note</title><para>Since PHP 4.2.0, the default value for the PHP directive 
-<link linkend="ini.register-globals">register_globals</link> is <emphasis>
-off</emphasis>.  The PHP community encourages all to not rely on this 
-directive but instead use other means, such as the &link.superglobals;.
-</para></note>'>
-       
-<!ENTITY note.superglobals '<note><title>Superglobals: availability note
-</title><para>Since PHP 4.1.0, superglobal arrays such as <varname>$_GET
-</varname>, <varname>$_POST</varname>, and <varname>$_SERVER</varname>, 
-etc. have  been available.  For more information, read the manual section 
-on &link.superglobals;</para></note>'>
-
 <!ENTITY avail.register-long-arrays 'As of PHP 5.0.0, the long PHP 
 <link linkend="language.variables.predefined">predefined variable</link>
 arrays may be disabled with the 
 <link linkend="ini.register-long-arrays">register_long_arrays</link>
 directive.'>
 
-<!ENTITY note.magicquotes.gpc '<note><title>directive note: magic_quotes_gpc
-</title><para>The PHP directive <link linkend="ini.magic-quotes-gpc">
-magic_quotes_gpc</link> defaults to <literal>on</literal>.  It essentially 
-runs <function>addslashes</function> on all your GET,  POST, and COOKIE data.
-You may use <function>stripslashes</function> to strip them.</para></note>'>
 
 <!-- Image (GD) Notes -->
 <!ENTITY note.config.t1lib '<note><simpara>This function is only available 
@@ -119,15 +172,18 @@
 
 <!ENTITY note.gd.2 '<note><simpara>This function requires GD 2.0.1 or 
later.</simpara></note>'>
 
+
 <!-- DomXml Notes -->
 <!ENTITY node.inserted 'This node will not show up in the document unless it
 is inserted with e.g. <function>domnode_append_child</function>.'>
 
+
 <!-- Dom Notes -->
 <!ENTITY dom.node.inserted 'This node will not show up in the document unless 
 it is inserted with e.g. <link 
 linkend="function.dom-domnode-appendchild">DOMNode->appendChild()</link>.'>
 
+
 <!-- FileSystem entities -->
 <!ENTITY fs.validfp.all '<para>The file pointer must be valid, and must point to
 a file successfully opened by <function>fopen</function> or
@@ -139,51 +195,12 @@
 <parameter>status</parameter> is the status parameter supplied to a successfull
 call to <function>pcntl_waitpid</function>.</para>'>
 
+
 <!-- XSLT Notes -->
 <!ENTITY note.xslt.windows '<note><para>Please note that <emphasis>file://</emphasis>
 is needed in front of path if you use Windows.</para></note>'>
 
 
-<!-- Various notes -->
-<!ENTITY note.randomseed '<note><simpara>As of PHP 4.2.0, there is no need 
-to seed the random number generator with <function>srand</function> or 
-<function>mt_srand</function> as this is now done automatically.
-</simpara></note>'>
-
-<!ENTITY note.not-bin-safe '<warning><simpara>This function
-is not (yet) binary safe!</simpara></warning>'>
-
-<!ENTITY note.bin-safe '<note><simpara>This function is
-binary-safe.</simpara></note>'>
-
-<!ENTITY note.line-endings '<note><simpara>If you are having problems
-with <literal>PHP</literal> not recognizing the line endings when
-reading files either on or created by a Macintosh computer, you
-might want to enable the <link linkend="ini.auto-detect-line-endings"
->auto_detect_line_endings</link> run-time configuration option.</simpara>
-</note>'>
-
-<!ENTITY note.no-windows '<note><simpara>This function is not
-implemented on Windows platforms.</simpara></note>'>
-
-<!ENTITY note.no-windows.extension '<note><simpara>This extension is not
-available on Windows platforms.</simpara></note>'>
-
-<!ENTITY note.func-callback '<note><simpara>Instead of a function name, an
-array containing an object reference and a method name can also be
-supplied.</simpara></note>'>
-
-<!ENTITY warn.escapeshell '<warning><para>If you are going to allow data coming
-from user input to be passed to this function, then you should be using 
-<function>escapeshellarg</function> or <function>escapeshellcmd</function>
-to make sure that users cannot trick the system into executing arbitrary
-commands.</para></warning>'>
-
-<!ENTITY note.exec-bg '<note><para>If you start a program using this function
-and want to leave it running in the background, you have to make sure that the
-output of that program is redirected to a file or some other output stream or
-else PHP will hang until the execution of the program ends.</para></note>'>
-
 <!-- Notes for safe-mode limited functions: -->
 <!ENTITY note.sm.disabled '<note><simpara>&sm.disabled;</simpara></note>'>
 
@@ -339,7 +356,7 @@
 <!ENTITY warn.apache2.compat '<warning><para>Do not use Apache 2.0.x
 and <literal>PHP</literal> in a production environment neither
 on Unix nor on Windows.</para></warning>'>
-
+                                                           
 <!ENTITY note.apache.slashes '<note><simpara>Remember that when adding
 path values in the Apache configuration files on Windows, all backslashes
 such as <filename>c:\directory\file.ext</filename> must be converted to
http://cvs.php.net/diff.php/phpdoc/en/install/unix/apache2.xml?r1=1.1&r2=1.2&ty=u
Index: phpdoc/en/install/unix/apache2.xml
diff -u phpdoc/en/install/unix/apache2.xml:1.1 phpdoc/en/install/unix/apache2.xml:1.2
--- phpdoc/en/install/unix/apache2.xml:1.1      Tue Jun  8 17:47:58 2004
+++ phpdoc/en/install/unix/apache2.xml  Wed Jun 16 07:11:20 2004
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Revision: 1.1 $ -->
+<!-- $Revision: 1.2 $ -->
    <sect1 id="install.unix.apache2">
     <title>Apache 2.0 on Unix systems</title>
     <para>
@@ -7,8 +7,90 @@
      of PHP on Unix systems.
     </para>
    
-    &warn.apache2.compat;
-   
+    <warning>
+      <para>
+        Do not use Apache 2.0.x and <literal>PHP</literal> in a production 
+        environment neither on Unix nor on Windows. The reasoning behing 
+        that is explained thoroughly in this modified excerpt of a mail
+        by Rasmus Lerdorf.
+      </para>
+      
+      <para>
+        Apache2 is a complete rewrite and a complete architecture change from
+        Apache1. It is not like going from <literal>PHP3</literal> to 
+        <literal>PHP4</literal> or from <literal>PHP4</literal> to PHP5.
+        There is a lot of code that is common, and certainly the base architecture
+        of PHP has not changed for years. So comparing Apache1 vs. Apache2 to
+        <literal>PHP4</literal> vs. <literal>PHP5</literal> makes no sense.
+        The architecture has been proven over the years and the code, while
+        somewhat unwieldy in places, is a known entity. PHP from the very 
+        early days was designed against this basic Apache1 architecture and 
+        works extremely well running under it.
+      </para>
+      
+      <para>
+        The major feature that draws people to Apache2 is threading.  On Windows
+        where most basic libraries are, and must be, threadsafe, Apache2 does
+        actually make sense and it would be good to work out the kinks on that
+        platform. However, on UNIX there are a lot of basic libraries where
+        thread safety is an unknown. And this is not about <literal>PHP</literal>
+        extensions, it is about 3rd-party libraries underneath 
<literal>PHP&apos;s</literal>
+        hundreds of extensions. Whether any one 3rd-party library is threadsafe is 
+        really hard to determine. There are a lot of variables involved, including 
which
+        OS, which version of the OS, which libc, which version of that libc and on
+        some platforms even the compiler flags used to compile these things. And
+        to make it even more fun, tracking down a thread safety problem is damn
+        well near impossible. Hundreds of people may well state that
+        Apache+<literal>PHP</literal>+ext/foo works perfectly for them, but maybe 
+        they are only getting about a million hits a day. Then another user comes 
+        along who gets 100 million hits a day and uses a fast dual-cpu machine and
+        everything blows up because now suddenly the window for some tiny race
+        condition has been made much larger due to the faster cpu speeds, the
+        second cpu and the higher frequency of requests.  And the bug report we
+        get from this user will be something along the lines of:
+      </para>
+      
+      <para>
+        <note>
+      It don&apos;t work sometimes.  Most of the times it works fine, but then
+      every now and then it just don&apos;t.  The error is different each time
+      and I have no idea how to reproduce it, but fix it right away!!!
+        </note>
+      </para>
+      
+      <para>What can we do about these?</para>
+      
+      <para>
+        There are a number of (fixable) technical reasons Rasmus does not think
+        Apache2+<literal>PHP</literal> is a good idea in a production environment, 
+        but setting those aside it really boils down to one simple concept:
+      </para>
+      
+      <para>
+        <literal>PHP</literal> is glue. It is the glue used to build cool web 
+        applications by sticking dozens of 3rd-party libraries together and making 
+        it all appear as one coherent entity through an intuitive and easy to learn 
+        language interface. The flexibility and power of <literal>PHP</literal> 
relies 
+        on the stability and robustness of the underlying platform. It needs a 
working 
+        OS, a working  web server and working 3rd-party libraries to glue together.
+        When any of these stop working <literal>PHP</literal> needs ways to identify 
+        the problems and fix them quickly. By making the underlying framework more 
+        complex by not having completely separate execution threads, completely 
+        separate memory segments and a strong sandbox for each request to play 
+        in, a feet of clay is introduced into <literal>PHP&apos;s</literal> system.
+      </para>
+      
+      <para>
+        Using the prefork mpm with Apache2 to avoid the
+        threading is possible, and yes using a standalone fastcgi mechanism to avoid
+        the threading, too, but then defining characteristic of the web server of
+        choice are avoided.  At this point in its development, Rasmus still maintains
+        that one is better off simply sticking with Apache1 for serving up 
+        <literal>PHP</literal> pages with the one caveat that Apache1 sucks pretty 
badly 
+        on Windows.
+      </para>
+    </warning>
+    
     <para>
      You are highly encouraged to take a look at the
      <ulink url="&url.apache2.docs;">Apache Documentation</ulink> to get

Reply via email to