Frage von SpieleArena, 89

Compuetr Sagt NEIN?

Hi, ich bin jetzt schon seit längerem an einem größerem Projekt! Ich schreibe ein Programm in vb.net! Und sitze gerade am Code für das Registrieren was an meinen webspace angelehnt ist! Wenn man sich registriert bekommt man einen code den man eingeben muss aber das PHP das ich dafür geschrieben habe geht einfach nicht! mach ich was Falsch?

Code Schnippsel: if (!file_exists($filename)) { $datei=fopen($filename2,"r"); $zeile = fgets($datei,4096); echo $zeile."
"; }

Ausgabe = NICHTS

Habe sachen wie ob's der falsche Pfad ist schon überprüft! Stimmt alles! ^_^

Danke im vorraus

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von 271828182846, 62

Dein if prüft ab ob die Datei $filename NICHT existiert: 

if (!file_exists($filename))

und bei Nichtexistenz wird dann die Datei geöffnet :-) also muss das ! raus.

Kommentar von SpieleArena ,

Ahh das ist schon mal gut aber warum geht es dann obwohl der ordner existiert?

<?php
$name = $_GET["name"];
$code = $_GET["code"];
$filename = "/xxx/" . $name . "/";
$filename2 = "/xxx/" . $name . "/actic.txt";
$datei = file("/xxx/" . $name . "/actic.txt");
$datei2 = "/xxx/" . $name . "/acti.txt";

echo 'SpielUnity Register V0.9
' ."\n\n";
echo 'Loading data...
' ."\n\n";
echo 'NAME:' . $name . '
' ."\n\n";
echo 'CODE:' . $code . '
' ."\n\n";

if (!file_exists($filename)) {
$datei=fopen($filename2,"r");
$zeile = fgets($datei,4096);
echo $zeile."
";
if($code=="1") {
echo 'Code is TRUE
' ."\n\n";
echo 'Please Wait!
' ."\n\n";
foreach($datei AS $ausgabe)
if($ausgabe=="false") {
echo 'Data is Loading Suciefull!
' . "\n\n";
echo 'Please Wait!
' ."\n\n";
$fp = fopen($datei2,"w"); //Datei öffnen
fputs($fp,"true"); # daten in datei speichern
fclose($fp);
echo 'Suciefull!
' ."\n\n";
echo 'Acc. Registration is Completet!
' ."\n\n";
} else {
echo 'ERROR Code is alredy TRUE! You Dont Want to do this!
' ."\n\n";
}
} else {
echo 'ERROR Code is FALSE
' ."\n\n" ;
}
} else {
echo 'ERROR User Dont found!
' ."\n\n";
}
echo "?SpielUnityRegister End CMD?";
?>
Kommentar von 271828182846 ,

Nimm es mir nicht über aber dein PHP Code sieht furchtbar aus. Außerdem übernimmst du Variablen ohne sie zu prüfen, dass ist eine mega Sicherheitslücke. 

Ahh das ist schon mal gut aber warum geht es dann obwohl der ordner existiert?

Was geht? Ich denke die Ausgabe funktioniert eben nicht. Wenn der Ordner existiert, dann wird alles im IF Block nicht ausgeführt.

Kommentar von SpieleArena ,

Köntest du mir vieleicht helfen und korigieren?

Kommentar von 271828182846 ,

Also z.B.:

echo 'SpielUnity Register V0.9
' ."\n\n";

Kann man direkt als 

echo "SpielUnity Register V0.9\n\n";

 schreiben. Jedoch wird dein Newline (/n) nicht dargestellt, da ein Browser dies ignoriert. Zudem solltest du die Variablen

$name = $_GET["name"];
$code = $_GET["code"];

darauf hin prüfen, ob sie denn gültige Daten enthalten. Ansonsten kann man damit einiges an Schindluder treiben.

Zudem fehlt die Fehlerbehandlung an vielen Sellen. 

Lern noch ein bisschen PHP bevor du das Online stellst, ansonsten kann es dir passieren, dass dein Server kompromittiert wird.

Und deine englischen Texte solltest du auch noch mal prüfen.

Kommentar von SpieleArena ,

Danke aber du must bitte verstehen Programiere eig. nur c++ oder vb.net und php ist für mich neuland! Ich brauche es auch nur weil wenn ich dies über FTP mache ist es noch unsicherer!

Kennt irgend jemand jemanden der das php skript für mich übernehmen kann?

Kommentar von maximilianus7 ,

weil für php ein ordner keine datei ist. existenz eines ordners wird mit is_dir abgefragt.

Kommentar von 271828182846 ,

Nicht ganz:

file_exists — Prüft, ob eine Datei oder ein Verzeichnis existiert
http://php.net/manual/de/function.file-exists.php

is_dir — Prüft, ob der angegebene Dateiname ein Verzeichnis ist

http://php.net/manual/de/function.is-dir.php

Mit file_exists kann man die Existenz prüfen und mit is_dir die Fallunterscheidung Ordner oder Datei bewerkstelligen.

Kommentar von SpieleArena ,

Achja nicht wundern bin neu bei php

Kommentar von AngryTubersLP ,

Sonst noch einen kleinen Tipp, nutz MySQL, dann hast du dein Script etwas schneller bei hand, und du musst nicht so viel die Festplatte belasten denn mysql liegt teils im Ram wenn was oft gebraucht wird!

Antwort
von SpieleArena, 36
<?php
$name = $_GET["name"];
$code = $_GET["code"];
$filename = "/xxx/" . $name . "/";
$filename2 = "/xxx/" . $name . "/actic.txt";
$datei = file("/xxx/" . $name . "/actic.txt");
$datei2 = "/xxx/" . $name . "/acti.txt";

echo 'SpielUnity Register V0.9
' ."\n\n";
echo 'Loading data...
' ."\n\n";
echo 'NAME:' . $name . '
' ."\n\n";
echo 'CODE:' . $code . '
' ."\n\n";

if (!file_exists($filename)) {
$datei=fopen($filename2,"r");
$zeile = fgets($datei,4096);
echo $zeile."
";
if($code=="1") {
echo 'Code is TRUE
' ."\n\n";
echo 'Please Wait!
' ."\n\n";
foreach($datei AS $ausgabe)
if($ausgabe=="false") {
echo 'Data is Loading Suciefull!
' . "\n\n";
echo 'Please Wait!
' ."\n\n";
$fp = fopen($datei2,"w"); //Datei öffnen
fputs($fp,"true"); # daten in datei speichern
fclose($fp);
echo 'Suciefull!
' ."\n\n";
echo 'Acc. Registration is Completet!
' ."\n\n";
} else {
echo 'ERROR Code is alredy TRUE! You Dont Want to do this!
' ."\n\n";
}
} else {
echo 'ERROR Code is FALSE
' ."\n\n" ;
}
} else {
echo 'ERROR User Dont found!
' ."\n\n";
}
echo "?SpielUnityRegister End CMD?";
?>
Antwort
von PeterKremsner, 59

Ist es Absicht dass du die Prüfst ob die Datei $filename existiert, aber du dann die Datei $filename2 mit fopen öffnest?

Kommentar von SpieleArena ,

Ja es ist absicht

Kommentar von PeterKremsner ,

Ok dann würde ich filename2 auch noch auf Existenz prüfen. Also if(!file_exists($filename) && file_exists($filename2)). Dadurch wird die if Schleife ausgeführt wenn $filename nicht existiert und $filename2 existiert.

Wird deine if Anweisung überhaupt ausgeführt und stimmt der Dateipfad in $filename2?

Btw lass dir mit var_dump den Wer von $datei ausgeben um zu sehen ob es sich um ein gültiges Handle handelt, der Wert sollte dazu ungleich false sein.

Kommentar von SpieleArena ,

Also ja Der pfad stimmt und das überprüfen der 2. datei ist nicht nötig da mein programm beide daten erstellt und auch nur beide gleichzeitig löscht mit anderen worten: Existier nr. 1 existiert auch Nr. 2

Kommentar von PeterKremsner ,

Das kannst du so nicht sagen, es kann sein, dass nur eine der beiden Dateien erstellt wird aus welchen Gründen auch immer von da her solltest du es trotzdem Prüfen.

Werden die Dateien beide erstellt?

Steht in den Dateien auch etwas drinnen?

Zudem initialisierst du die Variable $datei und diesen Wert überschreibst du mit fopen. Das ist aufgrund der Leserlichkeit nicht gut, weil file ein Array liefert und fopen ein Dateihandle.

Du solltest die Dateien die du mit fopen auch geöffnet hat mit fclose schließen. Doppeltes öffnen einer Datei ist nicht möglich!

Du solltest außerdem bei PHP die komplette Fehlerausgabe aktivieren damit du alle Warnungen und Hinweise sehen kannst, die PHP liefert, das ist oftmals sehr Hilfreich.

Antwort
von AngryTubersLP, 30

Das was du da versuchst es sehr inject gefährdet das macht es Hacker leichter dein Webspace zu konfrontieren zudem kann es passieren dass dein Webhoster dir kündigt wegen unsicheren Scripts

Kommentar von SpieleArena ,

Is ja auch noch net fertig

wenn der rohling fertig ist kümmere ich mich erst ums sicherheit nur erst: GRUNDFUNKTIONEN

Kommentar von PeterKremsner ,

Mach dir aber dazu einen Verweis im Code, die Variablen im $_GET und $_POST array müssen alle gefiltert werden!

Kommentar von AngryTubersLP ,

Ich bin schon lange Owner des Webseiten Netzwerkes MCLP.DE 

Da hatte ich mit meinen kunden des öfteren schon mal injeckt Probleme. Nacht leute! 

Kommentar von SpieleArena ,

Und ich Owner des Minecraft Netzwerkes SpieleArena.org

Kommentar von AngryTubersLP ,

mein MC Server geht bald auch online: http://mc.mclp.de/

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten