2012-03-29 1 views
0

Ich versuche eine Website zu erstellen, die RPG-Zeichenblätter dynamisch enthält. Ich möchte in der Lage sein, neue Zeichenblätter zu erstellen, indem Sie ein Formular mit dem Titel des Blattes einreichen, wie dies (dieser Teil der Seite index.php ist):Erstellen neuer Dateien und Aktualisieren einer Liste dieser erstellten Dateien in PHP

<form action = "charCreate.php" method = "post"> 
    <h1>Character Sheet Name:</h1> 
    <input type = "text" name = "fileName"> 
    <input type = "submit" value="Submit"> 
</form> 

Ich bin mir der fopen-Methode, aber Ich bin mir nicht sicher, wie ich es in diesem Szenario verwenden soll. Ich möchte mit diesem Formular neue Webseiten erstellen können und die index.php eine Liste der Dateien anzeigen lassen, die mit dem obigen Formular erstellt wurden.

Was wäre der beste Weg, um eine Liste der erstellten Webseiten dynamisch zu aktualisieren und diese Webseiten mit dem Wert im Formular für den Dateinamen zu erstellen.

Ich möchte auch herausfinden, wie diese neu erstellten Seiten geändert werden, aber ich muss das zuerst herausfinden.

Danke.

Antwort

0

Gehen Sie wie folgt:

<?php 
    // w will create a file if not exists 
    if($loHandle = @fopen('folder_to_add_files/'.$_POST['fileName'], 'w')) 
    { 
     echo 'Whoops something went wrong..'; 
    } 
    else 
    { 
     // you can write some default text into the file 
     if([email protected]($loHandle, 'Hello World')) 
     { 
      echo 'Could not right to file'; 
     } 

     @fclose($loHandle); 
    } 
?> 

Achten Sie auf Räume und andere seltsame Zeichen in Dateinamen. Sie können wie so Räume mit str_replace ersetzen:

// Replace spaces with underscores 
$lstrFilename = str_replace(' ', '_', $_POST['fileName']); 

Um die Dateien in der index.php zeigen können Sie folgendes tun:

<?php 
    if ($loHandle = @opendir('folder_to_add_files')) 
    { 
     echo 'Directory handle: '.$handle.'<br />'; 
     echo 'Entries:<br />'; 

     // This is the correct way to loop over the directory. 
     while (false !== ($lstrFile = @readdir($loHandle))) 
     { 
      echo $lstrFile.'<br />'; 
     } 

     @closedir($loHandle); 
    } 
?> 
0

Die erste und wichtigste Punkt hier ist, dass Sie Probleme mit der Skalierbarkeit/Datenkorruption haben, die versuchen, Daten in Dateien zu verwalten - dafür gibt es Datenbanken.

Es ist möglich, große, schnelle Systeme zu erstellen, die nur flache Dateien zum Speichern von Daten verwenden. Dies erfordert jedoch viel komplexen Code zum Implementieren komplexer Dateisperrwarteschlangen. Aber angesichts der Alternative, einfach eine Datenbank zu verwenden, lohnt es sich selten.

Wenn Sie dem Benutzer erlauben, den Dateinamen anzugeben, bedeutet das, dass er alle Dateien löschen kann, die von der Webserver-UID auf Ihrem Computer beschreibbar sind. Sie können auch ihren eigenen PHP-Code bereitstellen. Keine gute Idee.

Für eine schnelle und schmutzige Lösung (die irgendwann in der Zukunft auf schreckliche und schmerzhafte Weise versagen wird ...).

function write_data($key, &$data) 
{ 
    $path=gen_path($key); 
    if (!is_dir(dirname($path)) { 
     mkdir(dirname($path), 0777, true); 
    } 
    return file_put_contents($path, serialize($data)); 
} 

function get_data($key) 
{ 
    $path=gen_path($key); 
    return unserialize(file_get_contents($path)); 
} 

function gen_path($key) 
{ 
    $key=md5($key); 
    return '/var/data/' . substr($key,0,2) . '/' . substr($key,2) . '.dat'; 

} 
Verwandte Themen