[Eisfair] E1: PECL install will nicht

André Rothe arothe at phosco.info
Mo Apr 28 10:27:42 CEST 2014


Der Patch, den Du verlinkt hast zeigt folgendes:

http://kai.mactane.org/software/patch-pear-builder-1.38.txt

In der Datei Builder.php steht irgendwo bei Zeile 457 der Code

$exitcode = is_resource($pp) ? pclose($pp) : -1;

Dieser prüft das geöffnete Dateihandle in Variable $pp, ob es eine Resource (z.B. File oder Dir) ist. Wenn ja, wird mit pclose($pp) da Handle geschlossen und dabei der Exitcode gespeichert. Dieser sollte nicht -1 sein (Fehler). $pp ist hier das Handle auf eine Shell, in der phpize ausgeführt wird. Leider liefert pclose() nicht verläßlich den realen Exitcode von phpize zurück. Dies liegt an der Compile-Option --enable-sigchild von PHP (http://bugs.php.net/bug.php?id=29123).

In meinem letzten Post habe ich auf die pclose()-Dokumentation bei php.net verlinkt, dort hatte jemand geschrieben, dass der Exitcode im high-Byte steht und mit einer Division durch 256 ein Shift der relevanten Bits erreicht werden kann (http://www.php.net/manual/en/function.pclose.php Note 0 ganz unten auf der Seite). Ich habe also

die oben erwähnte Codezeile in 

$exitcode = is_resource($pp) ? (pclose($pp)/256) : -1;

geändert und es scheinzu funktionieren. Ob das wirklich so ist, wäre zu prüfen. Durch die Division kann auch einfach immer eine 0 im Exitcode stehen, wenn das high-Byte immer 0 ist.

Dies macht der von Dir verlinkte Patch, der setzt einfach im Falle von --enable-sigchild das Ergebnis immer auf 0, was nicht zwingend der Intention des Programmierers entspricht. Ein einfaches Shellscript, was von einem PHP-Programm aufgerufen und mit pclose() geschlossen wird, bringt hier Klarheit. Dort kann man den Exitcode beliebig modifizieren und nachsehen, ob die Divisions-Methode das reale Ergebnis liefert.

~André


Am Donnerstag, 24. April 2014 13:35:27 UTC+2 schrieb Holger Bruenjes:
> Hallo Andre
> 
> 
> 
> Am 2014-04-23 23:32, schrieb André Rothe:
> 
> > Sowas ähnliches habe ich gerade auch gefunden:
> 
> > 
> 
> > http://www.php.net/manual/en/function.pclose.php
> 
> > 
> 
> > (Note 0 ganz unten).
> 
> > 
> 
> > Hab 2h die Pear-Files debugged... Wenn man einfach pclose()/256 hinzufügt, dann läuft es bei mir durch. Scheint wirklich am PHP zu liegen.
> 
> 
> 
> hmm, was heisst jetzt einfach hinzufuegt ;-)
> 
> 
> 
> kannst Du das bitte noch etwas genauer ausfuehren, dann laesst sich
> 
> das bestimmt auch direkt im Paket machen.
> 
> 
> 
> Danke
> 
> 
> 
> Holger
> 
> 
> 
> achso, lass bitte stehen auf was Du Dich beziehst, in der NG sehe
> 
> ich das nicht.



Mehr Informationen über die Mailingliste Eisfair