verschiedene PHP Versionen per per php handler

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

Re: verschiedene PHP Versionen per per php handler

Postby dailynight » 04. February 2015 16:51

Ja, die Suche steht leider nicht zur Verfügung, ich kann Deinen Beitrag nicht finden. Schade, das war nämlich genau das, was ich gesucht habe.

So ich habe in der htaccess auskommentiert:

Code: Select all
# php_flag log_errors on
# php_value error_log C:\xampp\htdocs\border-collie\phperrorlog\error.txt

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php-cgi
</FilesMatch>

<IfModule actions_module>
    Action application/x-httpd-php-cgi "/php54-cgi/php-cgi.exe"
</IfModule>


Leider bekomme ich den nächsten Fehler:
Code: Select all
Authentisierung fehlgeschlagen!

Der Server konnte nicht verifizieren, ob Sie autorisiert sind, auf den URL "/php54-cgi/php-cgi.exe/index.php" zuzugreifen. Entweder wurden falsche Referenzen (z.B. ein falsches Passwort) angegeben oder ihr Browser versteht nicht, wie die geforderten Referenzen zu übermitteln sind.

Sofern Sie für den Zugriff berechtigt sind, überprüfen Sie bitte die eingegebene User-ID und das Passwort und versuchen Sie es erneut.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 401


Hier noch mal die aktuelle http-xampp.conf:
Code: Select all
#
# XAMPP settings
#

<IfModule env_module>
    SetEnv MIBDIRS "C:/xampp/php/extras/mibs"
    SetEnv MYSQL_HOME "\\xampp\\mysql\\bin"
    SetEnv OPENSSL_CONF "C:/xampp/apache/bin/openssl.cnf"
    SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php"
    SetEnv PHPRC "\\xampp\\php"
    SetEnv TMP "\\xampp\\tmp"
</IfModule>

#
# PHP-Module setup
#
#LoadFile "C:/xampp/php/php5ts.dll"
#LoadModule php5_module "C:/xampp/php/php5apache2_2.dll"

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

#
# PHP-CGI setup
#
#<FilesMatch "\.php$">
#    SetHandler application/x-httpd-php-cgi
#</FilesMatch>
#<IfModule actions_module>
#    Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
#</IfModule>


<IfModule php5_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

<IfModule mime_module>
    AddType text/html .php .phps
</IfModule>

ScriptAlias /php54-cgi/ "C:/xampp/php54/"
<Directory "C:/xampp/php54">
    AllowOverride None
    Options None
    Require all denied
    <Files "php-cgi.exe">
    AuthType None
          Allow from all
    </Files>
</Directory>

ScriptAlias /php565-cgi/ "C:/xampp/php565/"
<Directory "C:/xampp/php565">
    AllowOverride None
    Options None
    Require all denied
    <Files "php-cgi.exe">
          Allow from all
    </Files>
</Directory>

ScriptAlias /php-cgi/ "C:/xampp/php/"
<Directory "C:/xampp/php">
    AllowOverride None
    Options None
    Order deny,allow
    Deny from all
    <Files "php-cgi.exe">
        Allow from all
    </Files>
</Directory>


<Directory "C:/xampp/cgi-bin">
    <FilesMatch "\.php$">
        SetHandler cgi-script
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler None
    </FilesMatch>
</Directory>

<Directory "C:/xampp/htdocs/xampp">
    <IfModule php5_module>
       <Files "status.php">
          php_admin_flag safe_mode off
       </Files>
    </IfModule>
    AllowOverride AuthConfig
</Directory>

<IfModule alias_module>
    Alias /security "C:/xampp/security/htdocs/"
    <Directory "C:/xampp/security/htdocs">
        <IfModule php5_module>
          <Files "xamppsecurity.php">
             php_admin_flag safe_mode off
          </Files>
        </IfModule>
        AllowOverride AuthConfig
   </Directory>

    Alias /licenses "C:/xampp/licenses/"
    <Directory "C:/xampp/licenses">
        Options +Indexes
        <IfModule autoindex_color_module>
            DirectoryIndexTextColor  "#000000"
            DirectoryIndexBGColor "#f8e8a0"
            DirectoryIndexLinkColor "#bb3902"
            DirectoryIndexVLinkColor "#bb3902"
            DirectoryIndexALinkColor "#bb3902"
        </IfModule>
   </Directory>

    Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
    <Directory "C:/xampp/phpMyAdmin">
        AllowOverride AuthConfig
    </Directory>

    Alias /webalizer "C:/xampp/webalizer/"
    <Directory "C:/xampp/webalizer">
        <IfModule php5_module>
          <Files "webalizer.php">
             php_admin_flag safe_mode off
          </Files>
        </IfModule>
        AllowOverride AuthConfig
    </Directory>
</IfModule>

#
# New XAMPP security concept
#

# Close XAMPP security section here
<LocationMatch "^/(?i:(?:security))">
    Order deny,allow
    Deny from all
    Allow from ::1 127.0.0.0/8
    ErrorDocument 403 /error/HTTP_XAMPP_FORBIDDEN.html.var
</LocationMatch>

# Close XAMPP sites here
# Allow from ::1 127.0.0.0/8

<LocationMatch "^/(?i:(?:xampp|licenses|phpmyadmin|webalizer|server-status|server-info))">
    Order deny,allow
    Deny from all
    Allow from 192.168.0.0/255.255.255.0
    ErrorDocument 403 /error/HTTP_XAMPP_FORBIDDEN.html.var
</LocationMatch>


Was heist das?
Last edited by dailynight on 04. February 2015 16:57, edited 1 time in total.
dailynight
 
Posts: 9
Joined: 03. February 2015 17:41
Operating System: WinXP

Re: verschiedene PHP Versionen per per php handler

Postby dailynight » 04. February 2015 16:55

Mit
Code: Select all
Require all granted


bekomme ich

Code: Select all
Zugriff verweigert!

Der Zugriff auf das angeforderte Objekt ist nicht möglich. Entweder kann es vom Server nicht gelesen werden oder es ist zugriffsgeschützt.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 403
dailynight
 
Posts: 9
Joined: 03. February 2015 17:41
Operating System: WinXP

Re: verschiedene PHP Versionen per per php handler

Postby Nobbie » 04. February 2015 17:14

Schau in den Error Log, da steht mehr drin. Wie rufst Du jetzt eigentlich im Browser ein PHP Script auf?

P.S.: Mal ganz ehrlich - das ist doch Rumgehacke ohne dass Du auch nur ein Byte davon verstehst. Wieso liest Du nicht irgendein Tutorial darüber, wie man PHP CGI aktiviert? Du willst etwas machen, was sowieso außergewöhnlich ist (mit mehreren PHP Versionen gleichzeitig in einer Umgebung arbeiten), das ist schwierig zu konfigurieren, hast aber andererseits überhaupt keine Kenntnis, wie das ganze zusammenhängt. Mehr als abkupfern geht doch gar nicht.

Da wäre es fast einfacher, Du installierst 2 verschiedene Xampp Versionen. Und am besten jeweils in einer VirtualBox (Virtuelle PCs). Dann brauchst Du nichts zu ändern und kannst in beiden Welten jeweils das tun, was Du tun willst.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: verschiedene PHP Versionen per per php handler

Postby dailynight » 04. February 2015 17:20

Erst mal Danke für Deine Hilfe. ohne Dich, hätte ich hier wahrscheinlich schon aufgegeben.
Im Errorlog steht
Code: Select all
[Wed Feb 04 16:55:36 2015] [error] [client 192.168.0.50] client denied by server configuration: C:/xampp/php54/php-cgi.exe


Aufrufen tue ich die Scripe über virtuelle Hosts. Eingabe über den Browser "www.domain.test".
Hat bis jetzt prima geklappt...
dailynight
 
Posts: 9
Joined: 03. February 2015 17:41
Operating System: WinXP

Re: verschiedene PHP Versionen per per php handler

Postby Nobbie » 05. February 2015 13:34

So, im Prinzip ist es fertig. Ich habe das ganze "Xampp Security Concept" auch rausgehauen, Du benutzt Xampp sowieso nur zu Hause.

Als hier die httpd-vhosts.conf
Code: Select all
NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin postmaster@dummy-host.localhost

    ServerName php.localhost
    ServerAlias localhost
    ErrorLog "logs/localhost-error.log"
    CustomLog "logs/localhost-access.log" combined
   
    DocumentRoot "C:/xampp/htdocs"
    <Directory "C:/xampp/htdocs">
        Options Indexes FollowSymLinks ExecCGI Includes
        AllowOverride All

        Order deny,allow
        Allow from all
    # Require all granted
    </Directory>

    ScriptAlias /php-cgi/ "C:/xampp/php/"
    <Directory "C:/xampp/php">
        Order deny,allow
        Allow from all
    # Require all granted
    </Directory>

<IfModule env_module>
    SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php"
    SetEnv PHPRC "\\xampp\\php"
</IfModule>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin postmaster@dummy-host2.localhost

    ServerName php56.localhost
    ErrorLog "logs/php56.localhost-error.log"
    CustomLog "logs/php56.localhost-access.log" combined

    DocumentRoot "C:/xampp/htdocs"
    <Directory "C:/xampp/htdocs">
        Options Indexes FollowSymLinks ExecCGI Includes
        AllowOverride All

        Order deny,allow
        Allow from all
    # Require all granted
    </Directory>

    ScriptAlias /php-cgi/ "C:/xampp/php56/"
    <Directory "C:/xampp/php56">
        Order deny,allow
        Allow from all
    # Require all granted
    </Directory>

<IfModule env_module>
    SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php56"
    SetEnv PHPRC "\\xampp\\php56"
</IfModule>
</VirtualHost>


Da habe ich die VirtualHosts "php.localhost" (das ist die normale Installation, aber nun mit PHP im CGI Modus, nicht als Modul) und dazu den Alias "localhost", die verhalten sich gleich.

Dann gibt es einen VirtualHost "php56.localhost", ich habe jetzt mal php56 genommen, das musst Du ggf. anpassen, wenn Du andere PHP Versionen nimmst. Ist nur ein Name, kannst Du alles nehmen. Ich habe alle VirtualHosts auf den normalen DocumentRoot c:/xampp/htdocs verdrahtet, dann steht Dir quasi in beiden Welten alles zur Verfügung, wenn Du via localhost oder php.localhost aufrufst, startet das mitgelieferte PHP aus Xampp, wenn Du via php56.localhost aufrufst, dann startet ein PHP aus dem Ordner c:/xampp/php56 - habe ich jetzt so genannt, kannst Du beliebig anpassen. Nach dem gleichen Strickmuster (einfach den unteren VirtualHost komplette kopieren und nach unten duplizieren) kannst Du beliebig viele weitere VirtualHosts anlegen, musst Du nur die ganzen spezifischen Namen ändern, wo php56 drin steht.

Die httpd-xampp.conf wird gar nicht mehr geändert, die gilt immer und ist jetzt fest auf PHP im CGI Modus verdrahtet. Wenn Du zum PHP Module zurückkehren willst, dann spiele die originalen Konfigurationen von Xampp wieder ein, aber dann gehen auch die VirtualHosts und die anderen PHP Versionen wieder verloren - beides durcheinander geht nicht.

Hier die httpd-xampp.conf:
Code: Select all
#
# XAMPP settings
#

<IfModule env_module>
    SetEnv MIBDIRS "C:/xampp/php/extras/mibs"
    SetEnv MYSQL_HOME "\\xampp\\mysql\\bin"
    SetEnv OPENSSL_CONF "C:/xampp/apache/bin/openssl.cnf"
#    SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php"
#    SetEnv PHPRC "\\xampp\\php"
    SetEnv TMP "\\xampp\\tmp"
</IfModule>


<FilesMatch "\.php$">
    SetHandler application/x-httpd-php-cgi
</FilesMatch>
<IfModule actions_module>
    Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
</IfModule>

<IfModule mime_module>
    AddType text/html .php .phps
</IfModule>

#<Directory "C:/xampp/cgi-bin">
#    <FilesMatch "\.php$">
#        SetHandler cgi-script
#    </FilesMatch>
#    <FilesMatch "\.phps$">
#        SetHandler None
#    </FilesMatch>
#</Directory>

<IfModule alias_module>
    Alias /security "C:/xampp/security/htdocs/"
    <Directory "C:/xampp/security/htdocs">
        AllowOverride AuthConfig
   </Directory>

    Alias /licenses "C:/xampp/licenses/"
    <Directory "C:/xampp/licenses">
        Options +Indexes
        <IfModule autoindex_color_module>
            DirectoryIndexTextColor  "#000000"
            DirectoryIndexBGColor "#f8e8a0"
            DirectoryIndexLinkColor "#bb3902"
            DirectoryIndexVLinkColor "#bb3902"
            DirectoryIndexALinkColor "#bb3902"
        </IfModule>
   </Directory>

    Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
    <Directory "C:/xampp/phpMyAdmin">
        AllowOverride AuthConfig
    </Directory>

    Alias /webalizer "C:/xampp/webalizer/"
    <Directory "C:/xampp/webalizer">
        AllowOverride AuthConfig
    </Directory>
</IfModule>


Ich habe da noch die Konfiguration auskommentiert, wenn Du PHP Scripte aus dem cgi-bin Ordner startest (was kein Mensch mehr tut), das war ein Sonderfall und richtig echter CGI Modus (die anderen hier sind so ein Spezialkonstrukt), bei dem richtigen CGI Modus muss im PHP Script selbst in der allerersten Zeile (die wird "Shebang" genannt) festgelegt, wo auf dem Rechner der PHP Interpreter als ausführbares Programm liegt. Das ist insofern häßlich, als dass das oft für verschiedene Rechner verschiedene Zeilen sind, deswegen macht man das kaum noch so. Ich wollte es erst ganz löschen, ich habe es als Kommentar stehen lassen, brauchen tust Du es nicht.

Dann habe ich die "Require all granted" Anweisung auch als Kommantar jeweils stehen lassen, diese Anweisung gibt es erst seit Apache 2.5 (oder 2.4?), bis dahin hieß das "Order deny,allow" und die Zeile danach "Allow from all" (also 2 Zeilen). Da Du Xampp 1.77 hast, müßte der alte Syntax richtig sein, notfalls die oberen beiden Zeilen jeweils auskommentieren und dafür die Require Klausel aktiviern ("#" wegmachen).

So, jetzt musst Du es testen, wie gesagt, die ganzen Anweisungen "php_flag" oder "php_admin_flag" usw. funktionieren nicht mehr, Du hast so etwas in einer .htaccess stehen gehabt, das geht nur mit PHP Module. Aber das ist kein Beinbruch, das sind ja normale PHP Konfigurationswerte, das kann man auch im php.ini festlegen, dann gilt es halt immer. Das macht man sowieso nur in Produktionsumgebungen (also Online "in echt") dynamisch (wenn überhaupt), in Entwicklungsumgebungen würde ich immer alles erlauben. Deswegen habe ich auch den Xampp Security Käse herausgenommen.

Last not least musst Du natürlich für php.localhost und php56.localhost jeweils einen Eintrag in die Windows hosts Datei machen (c:/windows/system32/etc/drivers/hosts - meistens da, sonst schau ins Wikipedia, da gibt es einen Eintrag mit einer Erklärung, wo unter welchem Windows diese Datei zu finden ist, einfach nach "windows hosts datei wikipedia" in Google suchen:

127.0.0.1 php.localhost
127.0.0.1 php5.localhost

Für localhost selbst musst Du nix machen, entweder steht es schon irgendwo, oder Windows hat das fest verdrahtet an einer anderen Stelle (Microsoft hat etwas herumgesaut wegen der Einführung von TCP IPv6).
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: verschiedene PHP Versionen per per php handler

Postby thor.a » 16. April 2015 14:42

Altrea wrote:Ja, ganz so einfach ist dies nun dann doch nicht. Folgende Schritte sind zu tun (Verzeichnis-, Alias. und Modulbezeichner sind nur Vorschläge):
...
So in etwa habe ich das gerade mal Probehalber konfiguriert.


Danke, das funktioniert genauso, wie Du es beschrieben hast. (Ich musste zur Integration des Zend Guard Loaders eine PHP-Version mit "non thread safe" integrieren).
thor.a
 
Posts: 2
Joined: 15. February 2013 21:28
Operating System: Windows 7

Previous

Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 70 guests