Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

NonThreadSafe - Preconfiguration schlaegt fehl

2 views
Skip to first unread message

Thomas Steinbach

unread,
Nov 8, 2009, 11:51:34 AM11/8/09
to
Hallo,

ich bekomme folgende Fehlermeldung, wenn ich Apache mit den
Non-Thread-Safe Modul (php5apache2_2.dll, ver 5.2.11) starte/teste

[...] [crit] Apache is running a threaded MPM, but your PHP Module
is not compiled to be threadsafe. You need to recompile PHP.
Pre-configuration failed

Wie kann man PHP 5.2.11 (non thread safe) als Modul mit dem
Apache 5.2.11 nutzen? Es muss ja irgendwie gehen, denn sonst
waeren diese Module ja nicht bei der NTS Version dabei. Oder?
Ich meine nicht die ueblichen Konfigurationseintragungen.
LoadModule, ScripAlias etc., sondern eben nur das Problem
der NTS _Module_ (nicht CGI) mit Apache.

Thomas


Sam Kang

unread,
Nov 8, 2009, 1:56:33 PM11/8/09
to
Thomas Steinbach schrieb:

> Hallo,
>
> ich bekomme folgende Fehlermeldung, wenn ich Apache mit den
> Non-Thread-Safe Modul (php5apache2_2.dll, ver 5.2.11) starte/teste

Du meinst unter Windows?

> [...] [crit] Apache is running a threaded MPM, but your PHP Module
> is not compiled to be threadsafe. You need to recompile PHP.
> Pre-configuration failed

Wieso willst du ein NTS PHP mit threads laufen lassen? "non thread safe" sagt
doch das es nicht funktionieren wird!

> Wie kann man PHP 5.2.11 (non thread safe) als Modul mit dem
> Apache 5.2.11 nutzen? Es muss ja irgendwie gehen, denn sonst
> waeren diese Module ja nicht bei der NTS Version dabei. Oder?

Lass uns mal raten:

Du hast ein Apache "WinNT MPM"?
Das arbeitet mit Threads! Also musst du ein TS nutzen!

Du hast den Apachen f�r Windows selbst kompiliert mit "Prefork MPM"?
Das hat keine Threads! Also *kannst* du ein NTS nutzen!

Es kommt immer darauf an welche Applikation was braucht. Wenn php in Windows
Programme eingebunden wird ist es Systembedingt die TS Version. Windows hat
Threads und kein Fork. Falls jemand eine spezielle NTS Software (es gibt auch
andere Server/Container au�er Apache und IIS) f�hrt kann die NTS schneller
sein wie die TS.

Wo ist da dein Problem?

Sam


--
Fortgeschrittene Inkompetenz ist nicht zu Unterscheiden von Boshaftigkeit.
(J. Porter Clark)

Carsten Wiedmann

unread,
Nov 9, 2009, 3:00:22 AM11/9/09
to
Thomas Steinbach schrieb:

> Wie kann man PHP 5.2.11 (non thread safe) als Modul mit dem
> Apache 5.2.11 nutzen?

Gar nicht. Du must dann PHP als CGI oder FastCGI (mod_fcgid) im Apache
einrichten.

Gruß
Carsten

Thomas Steinbach

unread,
Nov 9, 2009, 9:50:16 AM11/9/09
to
Hallo,

>> ich bekomme folgende Fehlermeldung, wenn ich Apache mit den
>> Non-Thread-Safe Modul (php5apache2_2.dll, ver 5.2.11) starte/teste
> Du meinst unter Windows?

ja, das meine ich.

>> Pre-configuration failed
> Wieso willst du ein NTS PHP mit threads laufen lassen? "non thread safe"
> sagt doch das es nicht funktionieren wird!

Das "non thread safe" hat doch prinzipiell nichts damit zu tun, ob es in
Threads oder Prozessen ablaeuft, sondern bezieht sich einfach darauf ob
Threads sich wechelseitig ausschliessen, bzw. wie diese gemeinsame
Daten/Speicherbereiche nutzen.

>> Wie kann man PHP 5.2.11 (non thread safe) als Modul mit dem
>> Apache 5.2.11 nutzen? Es muss ja irgendwie gehen, denn sonst
>> waeren diese Module ja nicht bei der NTS Version dabei. Oder?
>
> Lass uns mal raten:
>
> Du hast ein Apache "WinNT MPM"?
> Das arbeitet mit Threads! Also musst du ein TS nutzen!

Das wiederspricht sich fuer mich, da NTS ja nichts damit
zu tun hat obe etwas in Threads ablaeuft, sondern bzieht sich
auf das Design der Software und wie diese gemeinsamen Speicher
oder Datenstrukturen, etc. nutzt, bzw. nutzen koennte.

So ist es doch theoretisch meogilch eine Software zu haben
die Thread-Safe ist und dann zusaetzliche noch Software benutzt
die Nicht Thread-Safe ist. Wo ist das Problem?

> Du hast den Apachen f�r Windows selbst kompiliert mit "Prefork MPM"?
> Das hat keine Threads! Also *kannst* du ein NTS nutzen!
>
> Es kommt immer darauf an welche Applikation was braucht. Wenn php in
> Windows Programme eingebunden wird ist es Systembedingt die TS Version.

Lass uns mal raten. Du meinst hier mit systembedingt die Modul-
Versionen von PHP fuer Windows und dass diese (wohl?) vom Design
her eben (nur) als Thread-Safe konzipiert sind?

> Windows hat Threads und kein Fork. Falls jemand eine spezielle NTS
> Software (es gibt auch

Und nochmal: Das NTS hat ja auch nichts mit dem Ausfuehren eines
Programmes in Threads oder Prozessen an sich zu tun. Egal ob Unix,
Windows, Linux oder ein anderes BS.

> andere Server/Container au�er Apache und IIS) f�hrt kann die NTS schneller
> sein wie die TS.
>
> Wo ist da dein Problem?

Das hatte ich im ersten Posting erleutert.
Wieso lauft NTS PHP nicht als Modul mit Apache auf Windows?
Es schliesst sich ja nicht prinzipiell aus dass NTS Software nicht
mit TS Software laufen kann/koennte.

Fuer mich sieht es aber erstmal so aus, dass lediglich die apache2_*.dll im
NTS Package _nicht_ Thread-Safe sind, denn sonst waeren diese ja
nicht dabei. Oder es ist einfach ein Packagefehler und es gibt demnach
keine NTS PHP Module fuer Apache, weil diese nicht implementiert
wurden. Es sieht also eher nach einem Problem bei der Koordination
und Abstimmung des Packaging von PHP aus. Zumindest stellt es sich
so fuer mich jetzt dar.

Vgl:
http://windows.php.net/downloads/releases/php-5.2.11-nts-Win32-VC6-x86.zip


Thomas

Thomas Steinbach

unread,
Nov 9, 2009, 9:40:05 AM11/9/09
to
Hallo,

>> Wie kann man PHP 5.2.11 (non thread safe) als Modul mit dem
>> Apache 5.2.11 nutzen?

> Gar nicht. Du must dann PHP als CGI oder FastCGI (mod_fcgid) im Apache
> einrichten.

Hmmm, ich frage mich dann aber, weiso im Non-Thread-Safe
Package die Module beiliegen? Siehe:
http://windows.php.net/downloads/releases/php-5.2.11-nts-Win32-VC6-x86.zip

Wenn du es entpackst, dann sind dort auch die Module (apache*.dll)
dabei. Das macht aber dann keinen Sinn, wenn NTS PHP als Modul
mit Apache auf Windows eh nicht geht, oder? ;-)

Das NTS hat ja auch nichts mit dem Ausfuehren eines Programmes
in Threads oder Prozessen an sich zu tun. Egal ob Unix, Windows, Linux

oder ein anderes BS. Sondern einfach ob Threads (oder LW Prozesse)
sich wechselseitig ausschliessen. Stichwort Mutex/Semaphore und aehnliche
Mechanismen bzw. Datenstukturen.

Fuer mich sieht es nun aber so aus, dass lediglich die apache2_2.dll im


NTS Package _nicht_ Thread-Safe sind, denn sonst waeren diese ja

nicht dabei. Oder ist das einfach ein Packagefehler und es gibt demnach


keine NTS PHP Module fuer Apache, weil diese nicht implementiert
wurden.

Thomas

Sam Kang

unread,
Nov 9, 2009, 12:24:46 PM11/9/09
to
Thomas Steinbach schrieb:

> Das wiederspricht sich fuer mich, da NTS ja nichts damit
> zu tun hat obe etwas in Threads ablaeuft, sondern bzieht sich
> auf das Design der Software und wie diese gemeinsamen Speicher
> oder Datenstrukturen, etc. nutzt, bzw. nutzen koennte.
>
> So ist es doch theoretisch meogilch eine Software zu haben
> die Thread-Safe ist und dann zusaetzliche noch Software benutzt
> die Nicht Thread-Safe ist. Wo ist das Problem?

An vielen Dingen. Z.B. Thread lokale Variablen fehlen im NTS, das hei�t wenn
eine Funktion in einer NTS DLL statische Variablen nutzt (wie z.B die libc)
werden die von anderen Thread dauernd �berschrieben. Das Ergebnis ist Chaos
und f�hrt zum Absturz oder sonstigem Bl�dsinn.

TS DLLs wissen das und treffen entsprechende Ma�nahmen.

> Und nochmal: Das NTS hat ja auch nichts mit dem Ausfuehren eines
> Programmes in Threads oder Prozessen an sich zu tun. Egal ob Unix,
> Windows, Linux oder ein anderes BS.

Doch hat es, wenn du einen DLL ins eine threaded Umgebung einbindest muss die
DLL damit umgehen k�nnen.

> Das hatte ich im ersten Posting erleutert.
> Wieso lauft NTS PHP nicht als Modul mit Apache auf Windows?
> Es schliesst sich ja nicht prinzipiell aus dass NTS Software nicht
> mit TS Software laufen kann/koennte.

Doch tut es. NTS DLLs k�nnen unter TS nicht funktionieren. V�llig unabh�ngig
von OS.

> Fuer mich sieht es aber erstmal so aus, dass lediglich die apache2_*.dll im
> NTS Package _nicht_ Thread-Safe sind, denn sonst waeren diese ja
> nicht dabei. Oder es ist einfach ein Packagefehler und es gibt demnach
> keine NTS PHP Module fuer Apache, weil diese nicht implementiert
> wurden. Es sieht also eher nach einem Problem bei der Koordination
> und Abstimmung des Packaging von PHP aus. Zumindest stellt es sich
> so fuer mich jetzt dar.

Quatsch, lade oder baue dir einen forkenden Apachen und dann kannst du die
DLLs einsetzen. Du verlierst zwar die Vorteile von Threading unter Windows -
das ist aber eine andere Geschichte.

Au�erdem kannst du dir ja das TS PHP laden, letztes ist das obere
auf der Liste und das richtige f�r eine default Installation.

Wie gesagt die PHP module + DLLs k�nnen auch von anderer
Software/Konfigurationen genutzt werden. Deswegen gibt es sie.

Claus Reibenstein

unread,
Nov 9, 2009, 2:56:11 PM11/9/09
to
Thomas Steinbach schrieb:

>> Wieso willst du ein NTS PHP mit threads laufen lassen? "non thread safe"
>> sagt doch das es nicht funktionieren wird!
>
> Das "non thread safe" hat doch prinzipiell nichts damit zu tun, ob es in
> Threads oder Prozessen ablaeuft, sondern bezieht sich einfach darauf ob
> Threads sich wechelseitig ausschliessen, bzw. wie diese gemeinsame
> Daten/Speicherbereiche nutzen.

Mir scheint, Dir ist nicht ganz klar, was "thread safe" bedeutet. Es
bedeutet schlicht, das es nicht sicher (safe) ist, solche Module in
einer Multi-Threaded-Umbegung zu benutzen.

Gru�. Claus

Thomas Steinbach

unread,
Nov 10, 2009, 11:01:08 AM11/10/09
to
Hallo Sam,

>>> [...]


>> Wieso lauft NTS PHP nicht als Modul mit Apache auf Windows?
>> Es schliesst sich ja nicht prinzipiell aus dass NTS Software nicht
>> mit TS Software laufen kann/koennte.
>
> Doch tut es. NTS DLLs k�nnen unter TS nicht funktionieren. V�llig
> unabh�ngig
> von OS.

Ack. Hatte es gestern wohl irrtuemlich auf NTS Software in Bezug
auf eben komplett unabhaengiger TS Software gesehen, was fuer
die module ja nicht zutrifft...

Bei externer Software wie das PHP das als CGI laeuft duerfte es ja
nicht wichtig sein, ob diese dann "fuer sich genommen" TS oder NTS ist.
Es sei denn die zwei Softwarepartner nutzen irgendeinen "gemeinsamen
Speicher" oder aehnliche Mechanismen. Aber ich denke IMHO dass
php als cgi erstmal einfach nur html zurueck gibt...

>> [...]


> Au�erdem kannst du dir ja das TS PHP laden, letztes ist das obere
> auf der Liste und das richtige f�r eine default Installation.

Da hat sich jetzt noch ein Problem aufgetan, dass sich momentan
noch nicht fuer mich erklaert. Es ist meoglicherweise eher ein Apache Prob,
aber PHP ist davon betroffen.

Meine Apache/PHP Konfiguration laeuft einwandfrei mit php cgi
aus dem NTS und aus dem TS Package (5.2.x und 5.3.x, sogar
zusammen mit dem IIS, also gleiche php.ini). Soweit ist alles gut.

Meine Eintraege dafuer sind:

ScriptAlias /php/ "C:/Program Files/PHP/"
Action application/x-httpd-php "/php/php-cgi.exe"
<Directory "C:/Program Files/PHP">
AllowOverride None
Options +ExecCGI +FollowSymLinks
Order deny,allow
Deny from all
Allow from all
</Directory>
<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">
Options +ExecCGI +FollowSymLinks
Action php-script "/php/php-cgi.exe"
AddHandler php-script .php
</Directory>

Diese haben auch gewuenschten Efekt nun alles (docroot und
auch externe dirs, wie cgi-bin) mit php als cgi Prog zu bedienen.

Wenn ich jetzt aber das Apache PHP Modul nutzen zu moechte,
dann haben meine folgenden Apache Additions

PHPIniDir "C:/Program Files/PHP/"
LoadModule php5_module "C:/Program Files/PHP/php5apache2_2.dll"

die Auswirkung dass "andere" virtuelle hosts und WebApps wie PhpMyAdmin
mit externem Verzeichnis, also nicht unterhalb von docroot, prima mit PHP
ueber
das Apache Modul funktionieren, aber der virtuelle host der gleich dem
Main-Server ist, die angegebene php Datei in Document Root nicht findet.

Ich dachte erst an Probleme bei den Rechten (deny, allow, etc.), aber diese
sind in Analogie zu allen anderen VHosts eingestellt und es ist sind FAT32
Verzeichnisse.
Ein explizites angeben von Opeions +ExecCGI ist ja nicht noetig und es soll
ja nun auch ueber das modul bedient werden.
Auch sind die Angaben von Main-Server und (Main) Virtueller Server
identisch.

In der PHP Logdatei steh dann sowas:

PHP Warning: Unknown: failed to open stream: No such file or directory in
Unknown on line 0

und in der error log fuer den virtuellen (aber hauptserver) Server steht ein

PHP Fatal error: Unknown: Failed opening required 'C:/Program Files/Apache
Software Foundation/Apache2.2/htdocs/index.php'
(include_path='.;C:\\php5\\pear') in Unknown on line 0

So manchmal treibt mich das ja schon in den Wahnsinn. ;-)
Hoffe hier weiss jemand was da noch nicht hinhaut.

btw:

main-server-conf-in-httpd.con-fuer-htdocs.

Listen 127.0.0.1:80
Listen 192.168.1.1:80
ServerName localhost:80 # 127.0.0.1
ServerName computer.network:80 # 192.168.1.1
LogLevel debug
<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs">
Options Indexes FollowSymLinks
RewriteEngine On
RewriteBase /
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Rewrite Regeln sind mom. keine definiert. Geht aber auch nicht wenn ich
Rewrite disable.

virtuell-(main)-server-conf-(localhost)-in-httpd-vhosts.conf-fuer-htdocs.
NameVirtualHost 127.0.0.1:80
NameVirtualHost 192.168.1.1:80
<VirtualHost 192.168.1.1:80>
ServerAdmin admin@localhost
DocumentRoot "C:/Program Files/Apache Software
Foundation/Apache2.2/htdocs"
ServerName computer.network
ErrorLog "logs/01_computer.network_error.log"
LogLevel debug
CustomLog "logs/01_computer.network_access.log" common
<Directory "C:/Program Files/Apache Software
Foundation/Apache2.2/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>
</VirtualHost>

Verstehe halt nicht warum PHP als modul und Apache die "anderen"
virtuellen Hosts und Webapps bedienen kann, aber nicht den main
virtuellen Host. Dabei sind es exakt gleiche virtuelle Hosts
Konfigurationenn.

> Wie gesagt die PHP module + DLLs k�nnen auch von anderer
> Software/Konfigurationen genutzt werden. Deswegen gibt es sie.

ja so langsam macht das auch wieder Sinn...


Thomas


Thomas Steinbach

unread,
Nov 10, 2009, 11:09:51 AM11/10/09
to
Hallo Claus,

>>> [...]


>>
>> Das "non thread safe" hat doch prinzipiell nichts damit zu tun, ob es in
>> Threads oder Prozessen ablaeuft, sondern bezieht sich einfach darauf ob
>> Threads sich wechelseitig ausschliessen, bzw. wie diese gemeinsame
>> Daten/Speicherbereiche nutzen.
>
> Mir scheint, Dir ist nicht ganz klar, was "thread safe" bedeutet. Es
> bedeutet schlicht, das es nicht sicher (safe) ist, solche Module in
> einer Multi-Threaded-Umbegung zu benutzen.

;-)
Moeglich. Ich bin nicht perfekt ;-)
Nur: _WARUM_ dass so ist, habe ich sogar in meinem und dann sogar
von dir zitiertem Abschnitt erklaert. Verstehe somit nicht, wie du darauf
kommst dass _ich_ nicht verstehen wuerde was NTS/TS heisst ;-)
Aber das Problem hat sich in Bezug auf TS und NTS auch komplett
aufgeloest.

Thomas

Claus Reibenstein

unread,
Nov 10, 2009, 11:25:38 AM11/10/09
to
Thomas Steinbach schrieb:

> Hallo Claus,


>
>> Mir scheint, Dir ist nicht ganz klar, was "thread safe" bedeutet. Es
>> bedeutet schlicht, das es nicht sicher (safe) ist, solche Module in
>> einer Multi-Threaded-Umbegung zu benutzen.
>
> ;-)
> Moeglich. Ich bin nicht perfekt ;-)
> Nur: _WARUM_ dass so ist, habe ich sogar in meinem und dann sogar
> von dir zitiertem Abschnitt erklaert. Verstehe somit nicht, wie du darauf
> kommst dass _ich_ nicht verstehen wuerde was NTS/TS heisst ;-)

Dann muss ich Dich wohl irgendwie falsch verstanden haben. Sorry.

> Aber das Problem hat sich in Bezug auf TS und NTS auch komplett
> aufgeloest.

Na, dann ist ja gut :-)

Gru�. Claus

Sam Kang

unread,
Nov 10, 2009, 6:16:44 PM11/10/09
to
Thomas Steinbach schrieb:
[... viele details ...}

> <Directory "C:/Program Files/Apache Software
> Foundation/Apache2.2/htdocs">
> Options Indexes FollowSymLinks
> AllowOverride None
> Order deny,allow
> Deny from all
> Allow from all
> </Directory>
> </VirtualHost>

Du hast gerade deinen Usern des 192.168.1.1:80 den Zugriff auf c:/[...]/htdocs
verboten.

Order deny,allow mit Deny from all = niemand.

Sonst frag halt mal bei den Apache Freaks (dcsw).

0 new messages