install.php soll config.php erstellen

Mahlzeit!
Bin gerade an meinem Projekt fertig. Hauptteil.
Nun mache ich eine installation.

Es ist in etwa so, bis jetzt:
index.php:
[php]

<?php if(file_exists('install.php')) // Wenn install.php existiert, { if(file_exists('config.php')) // Und wenn die config.php-Datei besteht, sowie die install.php, { echo'Bitte löschen Sie die install.php Datei, sowie den Ordner install/.'; // Auftrag geben, die install.php zu löschen. } echo'Installation'; // Dann Installationsdateipfad angeben. } else { if(file_exists('config.php') { include("config.php"); } echo''; echo''; //HIer kommt der Rest von index.php echo''; echo''; } ?>[/php]

Hier prüft er also, ob die install.php Datei besteht. Wenn ja, dann prüft er ob config.php existiert. Wenn config.php nicht existiert, dann gib der den Installationspfad an. Wenn sie doch existiert, dann gibt eine Meldung, er müsse install.php und install/ löschen.

Und wenn cinfig.php existiert, dann geht er zu else{ und prüft dort nochmals. Und wenn sie existiert, dann die config.php includen.

install.php:
[php]

<?php if(file_exists('config.php')) { echo'Dieses Paket wurde bereits installiert.'; } else { echo''; echo'

Gewünschtes Passwort eingeben:
'; echo'
'; echo'
'; echo'Den Pfad zu Ihren Dateien angeben:  (../inhalte/)
'; echo'
'; echo'
'; echo'

'; echo''; } ?>[/php]

Bis hierhin ist alles okay!

Nun soll er das Passwort und den Inhaltepfad abschicken per Post an install/install_config.php

install_config.php:
[php]

<?php $passwort = $_REQUEST['Passwort']; // Passwort $pfad = $_REQUEST['Pfad']; $config = '../config.php'; if (is_writable($config)) { if (!$handle = fopen($config, "w")) { print "Kann die config-Datei nicht erstellen. Legen Sie den CHMOD bitte auf 777. Vielleich behebt dies das Problem."; exit; } if (!fwrite($passwort, $pfad)) { print "Kann die config-Datei nicht erstellen. Legen Sie den CHMOD bitte auf 777. Vielleich behebt dies das Problem."; exit; } print "Fertig, die config-Datei wurde erstellt."; fclose($handle); } else { print "Die config-Datei konnte nicht erstellt werden. Prüfen Sie bitte den CHMOD."; } ?>[/php]

Hier ist es auch okay.
Er soll hier die config.php im Oberordner anlegen mit „w“ (sie existierte ja vorher nicht).
Doch die config.php müsste so aussehen:
[php]
$passwort = „eingetragenes Passwort“;
$pfad = „pfad/der/inhalten/“;
[/php]

Er würde also nur eine config.php erstellen ohne Variablen.
Wie bringe ich es hin, dass er die Variablen vor dem übertragenem Text einschreiben soll?
$passwort = „//Hier kommt dann das übertragene Passwort“

Etwa so.

MfG, matibaski

Du willst dann das Pw in die config.php schreiben?

Ja. :smiley:
Hättest du einn besseren Vorschlag?
Bin nicht gut in MySQL und PHP bin ich am lernen. :smiley:

edit:
Habe gedacht, etwa so:
(bei config_install.php)
[php]
$passwort = „$passwort“.$_REQUEST[‚Passwort‘].„;“; // Passwort
$pfad = „$pfad = „.$_REQUEST[‚Pfad‘].“;“;[/php]

So sollte er eine config.php erstellen.
Nun habe ich alles getestet, doch wenn ich Passwort und Pfad angebe, dann kommt die Meldung, er könne sie nicht erstellen.
Ich habe es mal mit fopen(„x+“) probiert, ging auch nicht.

Hier ist der Code nochmal.
Kann mir jemand evtl. den Code so umschreiben, das er config.php erstellt?
[php]

<?php $passwort = "$passwort".$_REQUEST['Passwort'].";"; // Passwort $pfad = "$pfad = ".$_REQUEST['Pfad'].";"; $config = "../config.php"; if (is_writable($config)) { if (!$handle = fopen($config, "x+")) { print "Kann die config-Datei nicht erstellen. Legen Sie den CHMOD bitte auf 777. Vielleich behebt dies das Problem."; exit; } if (!fwrite($passwort, $pfad)) { print "Kann die config-Datei nicht erstellen. Legen Sie den CHMOD bitte auf 777. Vielleich behebt dies das Problem."; exit; } print "Fertig, die config-Datei wurde erstellt."; fclose($handle); } else { print "Die config-Datei konnte nicht erstellt werden. Prüfen Sie bitte den CHMOD."; } ?>[/php]

Oben ist ja $config = „…/config.php“;
Und diese soll er ja mit fopen versuchen zu öffnen.
x+ heisst ja, dass er sie erstellt und zum schreiben und lesen benutzt.
Doch er macht das nicht. :smiley:

dann verschlüßel es aber mit md5 ist funktion heißt: md5(„String der verschlüßelt werden soll“); wenn du nur ein passwort hast ist vielliehct vorteilhafter!

Dies mache ich später noch (hab mir’s auch schon vorgenommen), aber ich möchte zuerst mein Problem mit fopen(„x+“) lösen.
Es will meine Datei config.php nicht schreiben. >:-(

Hat denn das Verzeichnis die Rechte, dass der Account vom Apache (wwwrun?) schreiben kann?

ggf. schreibrechte für alle Nutzer temporär zum testen gestatten.

ansonsten solltest Du als Parameter für fopen „w+“ statt „x+“ verwenden → [Siehe http://de3.php.net/manual/de/function.fopen.php](Siehe http://de3.php.net/manual/de/function.fopen.php)

Gruß,
Jumper, the II.

Er wollte sie nicht anlegen.
Habe alle Ordner den CHMOD von 777 gesetzt.
Sogar der Ordner, indem die install.php usw. sind.

ja … und hast Du den Parameter auf w+ umgestellt? x+ dürfte nicht funktionieren :wink:

//Edit:
Ja, und die Funktion is_writable() ist Dein aktueller Fehler →

[QUOTE=PHP.NET]
Gibt TRUE zurück, wenn die Datei existiert und nicht schreibgeschützt ist. Das Dateinamen-Argument filename kann ein Verzeichnisname sein. So können Sie überprüfen, ob in ein Verzeichnis geschrieben werden kann.
[/QUOTE]

(http://de3.php.net/manual/de/function.is-writable.php)

Gruß,
Jumper, the II.

Ja ist auf w+.

config_install.php:
[php]

<?php $passwort = "$passwort".$_REQUEST['Passwort'].";"; // Passwort $pfad = "$pfad = ".$_REQUEST['Pfad'].";"; $config = "../config.php"; if (is_writable($config)) { if (!$handle = fopen($config, "w+")) { print "Kann die config-Datei nicht erstellen. Legen Sie den CHMOD bitte auf 777. Vielleich behebt dies das Problem."; exit; } if (!fwrite($passwort, $pfad)) { print "Kann die config-Datei nicht erstellen. Legen Sie den CHMOD bitte auf 777. Vielleich behebt dies das Problem."; exit; } print "Fertig, die config-Datei wurde erstellt."; fclose($handle); } else { print "Die config-Datei konnte nicht erstellt werden. Prüfen Sie bitte den CHMOD."; } ?>[/php]Hier habe ich es so, dass er $passwort = "eingegebener Text"; in config.php schreiben sollte. etwa so.

// Edit:
Wie sollte dann der Code aussehen, wenn ich einen Pfad angebe?
Mann muss ja den Dateinamen auch bestimmen.

Ja, und die Funktion is_writable() ist Dein aktueller Fehler

Da hat Jumper recht, und dieser Fehler ist immernoch vorhanden!
Außerdem sehe ich nicht, wo du in die Datei schreibst ( www.php.net/fwrite )

[PHP]

<?php $passwort = "$passwort = ".$_REQUEST['Passwort'].";"; // Passwort $pfad = "$pfad = ".$_REQUEST['Pfad'].";"; $config = "../config.php"; //Prüfen ob sich in das Verzeichnis schreiben lässt if(!is_writable("../")) { die ("kann nicht ins verzeichnis schreiben!"); } if(!$handle = fopen($config,"w+")) { die ("Kann Datei {$config} nicht anlegen!"); } else { fwrite($handle,$passwort."\n\r"); fclose($handle); echo "Datei angelegt und Passwort hineingeschrieben"; } ?>

[/PHP]

jo … allerdings ist mir noch immer nicht klar, was Du mit „w+“ erreichen willst. Aktuell überschreibst Du trotzdem den Inhalt, denn das Auslesen der Werte vor dem Schreiben fehlt …

Gruß,
Jumper, the II.

Ich möchte mit w+, dass er die config.php datei erstellt und in diese die Daten speichert, die ich angegeben habe per install.php in diese.

  1. benutze eine Datenbank (mein Beispiel:mysql)
  2. Schreibe Passwörter NIE unverschlüsselt. SChon agr nicht in eine ungeschützte Text-Datei, auf die jeder Zugriff hat!

[php]

<?php $connect = mysql_query("localhost", "user", "pass"); $db = mysql_select_db("db_name"); try{ if(!$connect){ throw new Exception (mysql_error()); } } catch(Exception $e){ print $e->getMessage; } try{ if(!$db){ throw new Exception (mysql_error()); } } catch(Exception $e){ print $e->getMessage; } $query = mysql_query("INSERT INTO user (name, pass) VALUES (".$pass.", ".$user.""); try{ if(!$query){ throw new Exception (mysql_error()); } } catch(Exception $e){ print $e->getMessage; } [/php] edit: professioneller wärs natürlich so: [php] <?php include("class/error-class.php"); $connect = mysql_query("localhost", "user", "pass"); $db = mysql_select_db("db_name"); $err = new error; $err->err($connect); $err->err($db); $query = mysql_query("INSERT INTO user (name, pass) VALUES (".$pass.", ".$user.""); $err->err($query); [/php] [php] <?php class error{ public function err($err){ try{ if(!$err){ throw new Exception (mysql_error()); } } catch(Exception $e){ print $e->getMessage; exit; } } } ?>

[/php]

@ Frank

Danke für den Code.
Es funktionert. (Hab deinen Eintrag vorher gar nicht gesehen. :D)

Ich möchte sagen, dass die config.php angelegt wird, doch wenn ich beim FTP Server die Dateieigenschaft anschaue, hat sie 0 Bytes und wenn ich sie auf meinen Rechner downloaden möchte, steht:
Kritischer Transferfehler.

:smiley:

Der Code wird eingeschrieben, aber die config sollte so aussehen:
[php]

<?php $passwort = "das_eingetragene_passwort"; ?>[/php]

Hier sieht es so aus, bei der installation.php:
[php]
$passwort = „$passwort = „.$_REQUEST[‚Passwort‘].“;“; // Passwort[/php]

Wie kann ich es machen, dass <?php und ?>auch eingetragen werden?

@ Fredmonster

Da ich mich mit MySQL nicht auskenne, wäre es möglich, dass du es wörtlich ein wenig erklärst?
Ich blicke nur bei wenigen Stellen durch, was der dort macht. :smiley:

hab meinen Beitrag nochmal editiert… Viel gibts eigentlich gar nicht zu erklären, du musst natürlich die Grundzüge von mysql kennen und einen Space besitzen. Für meinen Code brauchst du außerdem php 5. Ich weiß, dass das hohe Anforderungen für eine so simple Aufgabe ist, aber es geht auch erstmal darum, dass du den Code verstehst, denn wenn du ein gutes Loginsystem haben willst, sind Textdateien nicht geeignet.
Gruß!

@matibaski

Dann verwende nur „w“. Bei einer erneuten Änderung wird so die Datei komplett neu geschrieben.

Zum Code, verwende fprint( $handle, „<?php\n"); nach dem fopen und vor den eigentlichen, zu generierenden PHP-Code für die config.php. Vor dem fclose sollte dann natürlich auch ein fwrite( $handle, "?>\n“); noch ausgeführt werden.

@Fredmonster
Wenn es tatsächlich so schlimm ist, dann sollte man aber auch das Login und password für die SQL Datenbank nicht bzw. nicht blank eintragen. Ergo um das sichern kommt man so oder so nicht herum. Effektivität und Sinnhaftigkeit des Einsatzes von MySQL im derzeitigen Stand des Servers schont offensichtlich oversize … Wenn, wird es wohl eher ins nächste Release gehen.

Gruß,
Jumper, the II.

Wie schaffe ich es, dass fwrite eine Variable einschreibt?

Ich dachte so:
[php]fwrite(„<?php $passwort = '\n"$handle,$pass."'; ?>\n\r“);[/php]

Doch es kommt die Meldung:
unexpect T_VARIABLE auf dieser Zeile.
Kann mir jemand helfen?

:roll: Passwörter in einer Variable abzulegen, stellt keine Sicherheitslücke dar, da niemand ohne die ftp-Zugangsdaten Einsicht in diese Dateien erhält… Ungesicherte Text-Dateien kann sich jeder User ansehen… ;ugl

Ja habe ich mir auch überlegt.
In config.php soll es so sein:
[php]

<?php $passwort = 'eingetragenes_passwort_bei_der_installation'; $pfad = 'eingetragener/pfad/bei/der/instalation/der/inhalte'; ?>[/php]

Doch wie schaff ich es, dass er $passwort schreibt?
Er benutzt $passwort als Variable und ich möchte, dass er $passwort schreibt.

Ja wenn du dann fwrite benutzt, dann benutz einfache Anführungszeichen anstatt doppelte.