<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->

<appendix xml:id="history" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
 <title>History of PHP and Related Projects</title>
 <para>
  PHP has come a long way since its birth in the mid-1990's.
  From humble beginnings to becoming one of the most prominent
  languages powering the web, the evolution of PHP is a geek's
  fairy tale.  Mind you, such explosive growth was no easy
  task. Those of you interested in briefly seeing how PHP grew
  to become what it is today, read on.  If you'd like to touch
  a piece of Internet history, you can find old releases of
  PHP in the <link xlink:href="&url.php.museum;">PHP Museum</link>.
 </para>
 
 <sect1 xml:id="history.php">
  <title>History of PHP</title>
  
  <sect2 xml:id="history.phpfi">
   <title>PHP Tools, FI, Construction Kit, and PHP/FI</title>
   <para>
    PHP as it's known today is actually the successor to a
    product named PHP/FI. Created in 1994 by Rasmus Lerdorf,
    the very first incarnation of PHP was a simple set of
    Common Gateway Interface (CGI) binaries written in the C
    programming language. Originally used for tracking visits
    to his online resume, he named the suite of scripts "Personal
    Home Page Tools," more frequently referenced as "PHP Tools."
    Over time, more functionality was desired, and Rasmus rewrote
    PHP Tools, producing a much larger and richer implementation.
    This new model was capable of database interaction and more,
    providing a framework upon which users could develop simple dynamic
    web applications such as guestbooks. In June of 1995, Rasmus
    <link xlink:href="&url.php.release1.0.0;">released</link>
    the source code for PHP Tools to the public, which allowed
    developers to use it as they saw fit. This also permitted -
    and encouraged - users to provide fixes for bugs in the code,
    and to generally improve upon it.
   </para>
   <para>
    In September of that year, Rasmus expanded upon PHP and - for a
    short time - actually dropped the PHP name.  Now referring to the
    tools as FI (short for "Forms Interpreter"), the new implementation
    included some of the basic functionality of PHP as we know
    it today. It had Perl-like variables, automatic interpretation
    of form variables, and HTML embedded syntax. The syntax itself
    was similar to that of Perl, albeit much more limited, simple,
    and somewhat inconsistent.  In fact, to embed the code into an
    HTML file, developers had to use HTML comments.  Though this
    method was not entirely well-received, FI continued to enjoy growth
    and acceptance as a CGI tool --- but still not quite as a language.
    However, this began to change the following month; in October, 1995,
    Rasmus released a complete rewrite of the code.  Bringing back the
    PHP name, it was now (briefly) named "Personal Home Page Construction
    Kit," and was the first release to boast what was, at the time,
    considered an advanced scripting interface. The language was
    deliberately designed to resemble C in structure, making it an easy
    adoption for developers familiar with C, Perl, and similar languages.
    Having been thus far limited to UNIX and POSIX-compliant systems,
    the potential for a Windows NT implementation was being explored.
   </para>
   <para>
    The code got another complete makeover, and in April of 1996,
    combining the names of past releases, Rasmus introduced PHP/FI.
    This second-generation implementation began to truly evolve PHP
    from a suite of tools into a programming language in its own
    right.  It included built-in support for DBM, mSQL, and Postgres95
    databases, cookies, user-defined function support, and much more.
    That June, PHP/FI was given a version 2.0 status.  An interesting
    fact about this, however, is that there was only one single full
    version of PHP 2.0.  When it finally graduated from beta status
    in November, 1997, the underlying parsing engine was already
    being entirely rewritten.
   </para>
   <para>
    Though it lived a short development life, it continued to enjoy
    a growing popularity in still-young world of web development. In
    1997 and 1998, PHP/FI had a cult of several thousand users around
    the world.  A Netcraft survey as of May, 1998, indicated that
    nearly 60,000 domains reported having headers containing
    "PHP", indicating that the host server did indeed have it installed.
    This number equated to approximately 1% of all domains on the
    Internet at the time. Despite these impressive figures, the maturation
    of PHP/FI was doomed to limitations; while there were several minor
    contributors, it was still primarily developed by an individual.
   </para>
   <para>
    <example>
     <title>Example PHP/FI Code</title>
     <programlisting role="html">
<![CDATA[
<!--include /text/header.html-->

<!--getenv HTTP_USER_AGENT-->
<!--ifsubstr $exec_result Mozilla-->
  Hey, you are using Netscape!<p>
<!--endif-->

<!--sql database select * from table where user='$username'-->
<!--ifless $numentries 1-->
  Sorry, that record does not exist<p>
<!--endif exit-->
  Welcome <!--$user-->!<p>
  You have <!--$index:0--> credits left in your account.<p>

<!--include /text/footer.html-->
]]>
     </programlisting>
    </example>
   </para>
  </sect2>

  <sect2 xml:id="history.php3">
   <title>PHP 3</title>
   <para>
    PHP 3.0 was the first version that closely resembles PHP as
    it exists today. Finding PHP/FI 2.0 still inefficient and
    lacking features they needed to power an eCommerce application
    they were developing for a university project, Andi Gutmans and
    Zeev Suraski of Tel Aviv, Israel, began yet another complete
    rewrite of the underlying parser in 1997.  Approaching Rasmus
    online, they discussed various aspects of the current
    implementation and their redevelopment of PHP.  In an effort to
    improve the engine and start building upon PHP/FI's existing
    user base, Andi, Rasmus, and Zeev decided to collaborate in
    the development of a new, independent programming language.
    This entirely new language was released under a new name, that
    removed the implication of limited personal use that the
    PHP/FI 2.0 name held. It was renamed simply 'PHP', with the
    meaning becoming a recursive acronym - PHP: Hypertext Preprocessor.
   </para>
   <para>
    One of the biggest strengths of PHP 3.0 was its strong
    extensibility features. In addition to providing end users
    with a mature interface for multiple databases, protocols,
    and APIs, the ease of extending the language itself attracted
    dozens of developers who submitted a variety of modules. Arguably,
    this was the key to PHP 3.0's tremendous success. Other key
    features introduced in PHP 3.0 included object-oriented programming
    support and a far more powerful and consistent language syntax.
   </para>
   <para>
    In June, 1998, with many new developers from around the world
    joining the effort, PHP 3.0 was announced by the new PHP Development
    Team as the official successor to PHP/FI 2.0.  Active development
    of PHP/FI 2.0, which had all-but ceased as of November of the
    previous year, was now officially ended.  After roughly nine months
    of open public testing, when the announcement of the official
    release of PHP 3.0 came, it was already installed on over 70,000
    domains around the world, and was no longer limited to
    POSIX-compliant operating systems.  A relatively small share of
    the domains reporting PHP as installed were hosted on servers
    running Windows 95, 98, and NT, and Macintosh.  At its peak, PHP 3.0
    was installed on approximately 10% of the web servers on the
    Internet.
   </para>
  </sect2>

  <sect2 xml:id="history.php4">
   <title>PHP 4</title>
   <para>
    By the winter of 1998, shortly after PHP 3.0 was officially
    released, Andi Gutmans and Zeev Suraski had begun working
    on a rewrite of PHP's core. The design goals were to improve
    performance of complex applications, and improve the
    modularity of PHP's code base. Such applications were made
    possible by PHP 3.0's new features and support for a wide
    variety of third party databases and APIs, but PHP 3.0 was
    not designed to handle such complex applications efficiently.
   </para>
   <para>
    The new engine, dubbed 'Zend Engine' (comprised of their
    first names, Zeev and Andi), met these design goals
    successfully, and was first introduced in mid 1999. PHP 4.0,
    based on this engine, and coupled with a wide range of
    additional new features, was officially released in May
    2000, almost two years after its predecessor.  In addition
    to the highly improved performance of this version, PHP 4.0
    included other key features such as support for many more
    web servers, HTTP sessions, output buffering, more secure
    ways of handling user input and several new language constructs.
   </para>
  </sect2>

  <sect2 xml:id="history.php5">
   <title>PHP 5</title>
   <para>
    PHP 5 was released in July 2004 after long development and several
    pre-releases. It is mainly driven by its core, the
    <literal>Zend Engine 2.0</literal> with a
    new object model and dozens of other new features.
   </para>
   <para>
    PHP's development team includes dozens of developers, as well
    as dozens others working on PHP-related and supporting projects,
    such as PEAR, PECL, and documentation, and an underlying network
    infrastructure of well over one-hundred individual web servers
    on six of the seven continents of the world.  Though only an
    estimate based upon statistics from previous years, it is safe
    to presume PHP is now installed on tens or even perhaps hundreds
    of millions of domains around the world.
   </para>
  </sect2>

  <sect2 xml:id="history.php6">
   <title>PHP 6</title>
   <para>
    The plan for PHP 6 was to feature deep support for Unicode in
    the engine and language. This work was later abandoned, but other
    features that had been targeted for PHP 6 were instead incorporated
    into PHP 5.3 (<link linkend="language.namespaces">namespaces</link>)
    and PHP 5.4 (<link linkend="language.oop5.traits">trait</link>,
    "short" array syntax).
   </para>
  </sect2>

  <sect2 xml:id="history.php7">
   <title>PHP 7</title>
   <para>
    PHP 7.0 was released in 2015, and featured another major version of
    the core, <literal>Zend Engine 3.0</literal>, which included
    significant performance improvements (up to twice as fast as PHP
    5.6) and memory usage, consistent 64-bit support, improvements
    to exceptions, a secure random number generator, the
    <link linkend="language.operators.comparison.coalesce">null coalescing
    operator (??)</link>, <link linkend="language.oop5.anonymous">anonymous
    classes</link>, and other features.
   </para>
   <para>
    Later releases of the PHP 7 series introduced more language features
    such as the <link linkend="function.list">short list syntax</link> (7.1),
    object parameter and return type declaration (7.2), a new flexible
    <link linkend="language.types.string.syntax.heredoc">heredoc</link>
    and <link linkend="language.types.string.syntax.nowdoc">nowdoc</link>
    syntax (7.3), typed properties (7.4), and a new
    <link linkend="class.ffi">foreign function interface</link> (7.4).
   </para>
  </sect2>

  <sect2 xml:id="history.php8">
   <title>PHP 8</title>
   <para>
    First released in 2020, PHP 8.0 was another major update of the PHP
    language. It contained many new features and optimizations including
    <link linkend="functions.named-arguments">named arguments</link>,
    <link linkend="language.types.declarations.composite.union">union
    types</link>, <link linkend="language.attributes">attributes</link>,
    <link linkend="language.oop5.decon.constructor.promotion">constructor
    property promotion</link>,
    <link linkend="control-structures.match"><literal>match</literal></link>
    expressions, the <link linkend="language.oop5.basic.nullsafe">nullsafe
    operator (<literal>?-></literal>)</link>, a new optimizing JIT compiler,
    and improvements in the type system, error handling, and consistency.
   </para>
   <para>
    Later releases of the PHP 8 series introduced new language features
    including <link linkend="language.enumerations">enumerations</link> (8.1),
    <link linkend="language.fibers">fibers</link> (8.1),
    <link linkend="language.oop5.basic.class.readonly">readonly classes</link> (8.2),
    Disjunctive Normal Form (DNF) Types (8.2), and typed class
    constants (8.3).
   </para>
  </sect2>
 </sect1>
 
 <sect1 xml:id="history.php.related">
  <title>History of PHP related projects</title>
  
  <!-- Hope Stig and/or Egon can do this
  
  <sect2 xml:id="history.phpdoc">
   <title>PHP Documentation Project</title>
   <para>
   </para>
  </sect2>
  
  -->

  <sect2 xml:id="history.pear">
   <title>PEAR</title>
   <para>
    <link xlink:href="&url.php.pear;">PEAR</link>, the <literal>PHP Extension and
    Application Repository</literal> (originally, PHP Extension and Add-on
    Repository) is PHP's version of foundation classes, and may grow in
    the future to be one of the key ways to distribute PHP extensions among
    developers.
   </para>
   <para>
    PEAR was born in discussions held in the PHP Developers'
    Meeting (PDM) held in January 2000 in Tel Aviv. It was
    created by Stig S. Bakken, and is dedicated to his first-born
    daughter, Malin Bakken.
   </para>
   <para>
    Since early 2000, PEAR has grown to be a big, significant
    project with a large number of developers working on
    implementing common, reusable functionality for the
    benefit of the entire PHP community. PEAR today includes
    a wide variety of infrastructure foundation classes
    for database access, content caching, mathematical
    calculations, eCommerce and much more.
   </para>
   <para>
    More information about PEAR can be found in <link
    xlink:href="&url.php.pear.manual;">the manual</link>.
   </para>
  </sect2>

  <sect2 xml:id="history.phpqa">
   <title>PHP Quality Assurance Initiative</title>
   <para>
    The <link xlink:href="&url.php.prerelease;">PHP Quality Assurance
    Initiative</link> was set up in the summer of 2000 in response to
    criticism that PHP releases were not being tested well enough for
    production environments. The team now consists of a core group of
    developers with a good understanding of the PHP code
    base. These developers spend a lot of their time
    localizing and fixing bugs within PHP. In addition
    there are many other team members who test and
    provide feedback on these fixes using a wide variety
    of platforms.
   </para>
  </sect2>

  <sect2 xml:id="history.phpgtk">
   <title>PHP-GTK</title>
   <para>
    <link xlink:href="&url.php.gtk;">PHP-GTK</link> is the PHP solution for
    writing client side GUI applications. Andrei Zmievski remembers the
    planing and creation process of PHP-GTK:
   </para>
   <blockquote>
    <para>
     GUI programming has always been of my interests, and I found
     that Gtk+ is a very nice toolkit, except that programming with
     it in C is somewhat tedious. After witnessing PyGtk and GTK-Perl
     implementations, I decided to see if PHP could be made to
     interface with Gtk+, even minimally. Starting in August of 2000,
     I began to have a bit more free time so that is when I started
     experimenting. My main guideline was the PyGtk implementation
     as it was fairly feature complete and had a nice object-oriented
     interface. James Henstridge, the author of PyGtk, provided very
     helpful advice during those initial stages.
    </para>
    <para>
     Hand-writing the interfaces to all the Gtk+ functions was out of
     the question, so I seized upon the idea of code-generator, similar
     to how PyGtk did it. The code generator is a PHP program that reads
     a set of <filename>.defs</filename> file containing the Gtk+ classes, constants, and
     methods information and generates C code that interfaces PHP with
     them. What cannot be generated automatically can be written by
     hand in <filename>.overrides</filename> file.
    </para>
    <para>
     Working on the code generator and the infrastructure took some
     time, because I could spend little time on PHP-GTK during the
     fall of 2000. After I showed PHP-GTK to Frank Kromann, he got
     interested and started helping me out with code generator work
     and Win32 implementation. When we wrote the first Hello World
     program and fired it up, it was extremely exciting. It took a
     couple more months to get the project to a presentable condition
     and the initial version was released on March 1, 2001. The
     story promptly hit SlashDot.
    </para>
    <para>
     Sensing that PHP-GTK might be extensive, I set up separate
     mailing lists and CVS repositories for it, as well as the
     gtk.php.net website with the help of Colin Viebrock. The
     documentation would also need to be done and James Moore
     came in to help with that.
    </para>
    <para>
     Since its release PHP-GTK has been gaining popularity. We
     have our own documentation team, the manual keeps improving,
     people start writing extensions for PHP-GTK, and more and
     more exciting applications with it.
    </para>
   </blockquote>
  </sect2>
 </sect1>

 <sect1 xml:id="history.php.books">
  <title>Books about PHP</title>
  <para>
   As PHP grew, it began to be recognized as a world-wide popular
   development platform. One of the most interesting ways of
   seeing this trend was by observing the books about PHP that
   came out throughout the years.
  </para>
  <para>
   To the best of our knowledge, the first book dedicated to PHP was
   'PHP - tvorba interaktivních internetových aplikací' (<emphasis>PHP
   - Creating Interactive Internet Applications</emphasis>) - a Czech
   book published in April 1999, authored by Jirka Kosek. Next month
   followed a German book authored by Egon Schmid, Christian Cartus
   and Richard Blume. The first book in English about PHP was
   published shortly afterwards, and was 'Core PHP Programming' by
   Leon Atkinson. These books covered PHP 3.0.
  </para>
  <para>
   While these books were the first of their kind - they were
   followed by a large number of books from a host of authors and
   publishers. There are over 400 books in English, over 100 books in
   German, and over 50 books in French or Spanish! In addition, you
   can find books about PHP in many other languages, including
   Korean, Japanese and Hebrew.
  </para>
  <para>
   Clearly, this large number of books, written by different
   authors, published by many publishers, and their availability
   in so many languages - are a strong testimony for PHP's
   world-wide success.
  </para>
 </sect1>
 
 <sect1 xml:id="history.php.publications">
  <title>Publications about PHP</title>
  <para>
   To the best of our knowledge, the first article about PHP in
   a hard-copy magazine was published in the Czech mutation of
   Computerworld in the spring of 1998, and covered PHP 3.0. As with
   books, this was the first in a series of many articles published
   about PHP in various prominent magazines.
  </para>
  <para>
   Articles about PHP appeared in Dr. Dobbs, Linux Enterprise,
   Linux Magazine and many more. Articles about migrating ASP-based
   applications to PHP under Windows even appear on <productname>Microsoft</productname>'s
   very own <acronym>MSDN</acronym>!
  </para>
 </sect1>

</appendix>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
