Mailinglisten-Archive |
Wow, das ist ja schon ein Tutorial für Anfänger im Programmieren - für mich tatsächlich sehr hilfreich! Vielen Dank! Beim Umgang mit den Dateirechten habe ich jetzt noch folgendes herausgefunden: Der user bestimmt sich aus dem Eigentümer der betreffenden php-Datei. Wenn ich also mit "chown www-data:www-data index.php" dafür sorge, dass die Datei index.php dem user gehört, unter dem auch der www-Server läuft (das ist beim meinem virtuellen Server von HostEurope www-data), dann bekomme ich von get_current_user() www-data zurück, und die Dateien werden ohne Problem erzeugt. Mit bestem Gruß Ulrich Am 07.12.2011 16:36, schrieb Mathias Gloß (www.gmail.com): > Aloha, > > @was mache ich falsch: Du vertraust darauf, daß alle Funktionsaufrufe > deines Programmes fehlerfrei funktionieren. Das macht ein guter > Programmierer niemals! > > Besser: > > <?php > $FileOne = fopen('Test1.txt', 'w'); > if ( $FileOne === FALSE ) { exit ('unable to open file Test1.txt'); } > $FileTwo = fopen(realpath ('./') . '/Test2.txt', 'w'); > if ( $FileTwo === FALSE ) { exit ('unable to open file Test2.txt'); } > $r = fwrite ($FileOne, "Eine Zeile in FileOne\n"); > if ( $r === FALSE ) { exit ('error writing to file Test1.txt' ); } > $r = fwrite ($FileTwo, "Eine Zeile in FileTwo\n"); > if ( $r === FALSE ) { exit ('error writing to file Test2.txt' ); } > $r = fclose ($FileOne); > if ( $r === FALSE ) { exit ('error closing file Test1.txt' ); } > $r = fclose ($FileTwo); > if ( $r === FALSE ) { exit ('error closing file Test2.txt' ); } > ?> > > Auf einem Testsystem empfiehlt es sich, immer in der php.ini > *error_reporting > = E_ALL *zu setzen, dann werden die Fehler auch gleich im Browser > angezeigt. Auf einem Produktivsystem sollte man das tunlichst unterlassen, > da es keinen etwas angeht mit welchem User man ich zur Datenbank verbindet > oder in welcher (physikalischen) Datei ein Fehler aufgetreten ist. > > Für die Faulen gibts unter PHP ab Version 5 ja auch noch das try/catch > Konstruct, damit würdest du dir im obigen Beispiel schreibarbeit sparen. > Das würde dann etwa so aussehen: > > <?php > try { > $FileOne = fopen('Test1.txt', 'w'); > $FileTwo = fopen(realpath ('./') . '/Test2.txt', 'w'); > fwrite ($FileOne, "Eine Zeile in FileOne\n"); > fwrite ($FileTwo, "Eine Zeile in FileTwo\n"); > fclose ($FileOne); > fclose ($FileTwo); > } catch (Exception $e) { > exit ('Exception occured: '. $e->getMessage() ); > } > ?> > > Allerdings dürfte $e->getMessage() nicht immer eine aussagekräftige > Fehlermeldung liefern, da ja der Fehler beim Öffnen/Schreiben/Schließen > autreten kann. > > > Ansonsten wenns auf der Kommandozeile geht und über den Webserver nicht - > denk bitte daran, daß du auf der Kommandozeile in aller Regel mit einem > anderen Benutzer arbeitest, als der unter dem der Webserver läuft. ==> > Rechteproblem? > > Grüße, Mathias -- Ulrich Goebel Sonnenrain 29, 53757 Sankt Augustin Telefon: 02241-8799161
php::bar PHP Wiki - Listenarchive