[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