Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:30795 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 4341 invoked by uid 1010); 11 Jul 2007 22:44:05 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 4324 invoked from network); 11 Jul 2007 22:44:04 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 11 Jul 2007 22:44:04 -0000 Authentication-Results: pb1.pair.com header.from=tijnema@gmail.com; sender-id=pass; domainkeys=bad Authentication-Results: pb1.pair.com smtp.mail=tijnema@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.132.250 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: tijnema@gmail.com X-Host-Fingerprint: 209.85.132.250 an-out-0708.google.com Received: from [209.85.132.250] ([209.85.132.250:54001] helo=an-out-0708.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 1E/2A-06860-D2D55964 for ; Wed, 11 Jul 2007 18:44:01 -0400 Received: by an-out-0708.google.com with SMTP id c18so388776anc for ; Wed, 11 Jul 2007 15:43:49 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=Uwv7/o8w+IzvBFzpokv5smrfS7gE6RdzZPQeR/YsIZjN0XbHxoDvtbdoG8ZYhugq6KwWHIItGqQbxOF/LVYEl0vrPSU1wPM90yjDsUzrzz+EckKUW3vmniY4CWu4e9CIlJJBIRnu2TL6KhNfv8QFFa1M898oLm6VU1OTz2ifKNs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=GW4cKHIm93MiNSPmxef14t790ufEeB7sTsQmINYjbdwLQ4q1HydTef8tcelpYG2TS7tqm43wzjpiKzUxbWqwD+YadKgIgEBZO8OK6j8I/EyQkuZ4elcJrKuefR04J2PGU2WBFcWGVLMHT4dzPsxsF1K02jBOgyEwqCogx9g8YeM= Received: by 10.100.141.13 with SMTP id o13mr3049090and.1184193829360; Wed, 11 Jul 2007 15:43:49 -0700 (PDT) Received: by 10.100.33.17 with HTTP; Wed, 11 Jul 2007 15:43:49 -0700 (PDT) Message-ID: Date: Thu, 12 Jul 2007 00:43:49 +0200 To: "PHP Developers Mailing List" MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Subject: Apache handler with Multiple PHP versions From: tijnema@gmail.com (Tijnema) Hello developers, The thread about dropping support for PHP4 gave me a new idea, having multiple PHP versions to be loaded by the Apache2handler SAPI. The idea: I was thinking about something like the shebang(#!) line used in bash/perl/python and even PHP scripts. But this time not for the program to be executed, but for which PHP version to load. This could be used like this: for PHP4, and so it could be or for resp. PHP5 or PHP6. This way can scripts define which PHP version they require, as it is a normal comment line, other PHP version can simply ignore the line. The implementation: The Apache2handler SAPI should be loaded first, and read the very first line of the PHP script to determine if a version is specified there. If not, the handler needs to load its default PHP version. If it is specified, it should try to load that version, and if it couldn't find or load that version, fall back to the default version and issue a warning. What needs to change: Currently, PHP is one big module for Apache, which will load a full PHP version at once. For this, we require a very small handler, that will use dlopen() to load the appropriate version and continue with the execution of the PHP script. Some kind of mini parser is also required to read the very first line of a PHP script, because that needs to be done before any PHP version is loaded. And maybe also a parser for the php.ini file, as php.ini needs an extra option for the default PHP version to be loaded, and one or more settings for configuring the different PHP versions and their path to the library. Some extra ideas, not sure if they need to be implemented: * Support for sub versions of PHP, like this: * Support for multiple possible PHP versions, like this: Where the first one is the preferred one, which can also be combined with the first one of course, like this: * Support for <, > and && signs in the version, like this: 5.2 && PHP < 5.3 ?> So that any PHP version between 5.2 and 5.3 fits, but that 5.2 is the preferred one, if 5.3 should be the preferred one, it should be written like this: 5.2 ?> * Support for this in other handlers, like FastCGI, ISAPI, etc. It seems to be the perfect solution for shared hosting providers to me, as it will allow the user to select which PHP version he wants to use, and shared hosts can just install all three versions of PHP and use the one they need for their admin panels etc. (One of the reasons against upgrading to PHP5), and users can use another version. I don't know too much about PHP core, and nearly nothing about the apache2handler, so if it's not possible, please excuse me for wasting your time. But, if it is possible, I will definitely go deeper inside the core and SAPI code to get it working. Now, the reason I'm sending this to the list is that I need to know if *) it is possible? *) it is not yet done *) it is wanted *) it will have any negative effect on something? I'd like to hear all your comments and objections on this, and of course, if you have any question, feel free to ask. Regards, Tijnema