Создание новых файлов и обновление списка этих созданных файлов в PHP - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь создать сайт, который будет динамически содержать таблицы символов RPG. Я хотел бы иметь возможность создавать новые листы символов, отправив форму с заголовком листа, например так (это часть страницы index.php):

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

Мне известен метод fopen, но я точно не знаю, как его использовать в этом сценарии. Я хочу иметь возможность создавать новые веб-страницы с помощью этой формы, и чтобы index.php отображал список файлов, которые были созданы с помощью вышеуказанной формы.

Как лучше всего динамически обновлять список созданных веб-страниц и создавать эти веб-страницы, используя значение в форме для имени файла.

Я также хочу узнать, как изменить эти недавно созданные страницы, но сначала мне нужно это выяснить.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Первый и самый важный момент здесь заключается в том, что вы столкнетесь с проблемами масштабируемости / повреждения данных, пытаясь управлять данными в файлах - вот для чего нужны базы данных.

Можно создавать большие, быстрые системы, просто используя плоские файлы для хранения данных, но для реализации сложных очередей блокировки файлов требуется много сложного кода. Но учитывая альтернативу простого использования базы данных, это редко стоит усилий.

Разрешение пользователю указывать имя файла означает, что он сможет удалить любой файл, доступный для записи с помощью uid веб-сервера на вашем компьютере. Они также смогут развернуть свой собственный код PHP. Не очень хорошая идея.

Для быстрого и грязного решения (которое в какой-то момент в будущем потерпит ужасные и мучительные последствия ...).

 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';

 }
0 голосов
/ 29 марта 2012

Выполните следующие действия:

<?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(!@fwrite($loHandle, 'Hello World'))
        {
            echo 'Could not right to file';
        }

        @fclose($loHandle);
    }
?>

Остерегайтесь пробелов и других странных символов в вашем имени файла.Вы можете заменить пробелы на str_replace следующим образом:

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

Чтобы показать файлы в index.php, вы можете сделать следующее:

<?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);
     }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...