23. 12
Ich habe es schon seit längerem geplant, jedem der User auf meinem Server einen eigenen lighttpd zur Seite zu stellen, welcher unter seinem User und in ~/public_html/ gechrootet läuft. Dann bekommt jeder User fest seine IP, und Dank mod_evhost kann er sich durch das anlegen passender Verzeichnisse ganz einfach eigene vhosts anlegen. Nun hat sich meine Freundin, die als Testkaninchen herhalten durfte, zu Recht aufgeregt, dass sie in ihrem s9y keine Plugins mehr installieren konne. Und es wurde keine brauchbare Fehlermeldung angezeigt.
Ich setzte mich also hin, wühlte mich durch diverse Methoden, die neue Objekte erstellen und darin wieder Methoden aufriefen, um am ende bei einem fsockopen als Fehlerquelle zu landen. Dieses verriet mir dann auch seinen Errorcode: 136827579. Google fand hierzu nichts, in der Doku stand nichts - wunderbar.
Letzten Endes übernahm ich das erstbeste Beispiel aus der Doku, um fsockopen hiermit zu testen:
Damit wurde dann auch die entscheidende Nachricht sichtbar: Er konnte den Hostname nicht auflösen!
<?php
$fp = fsockopen("www.heise.de", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
Tja, das Fazit ist dann wohl: Wegen ein bisschen PEBKAC zwei Stunden unnötiges Debuggen von s9y und den verwendeten PEAR-Libraries. Denn die Lösung war mehr als einfach: Das chroot braucht logischerweise auch eine /etc/resolv.conf!

Trackbacks