在PHP中创建新文件并更新这些创建文件的列表

时间:2012-03-29 08:25:01

标签: php html file

我正在尝试制作一个能够动态保存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 :(得分:0)

执行以下操作:

<?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);
     }
?>

答案 1 :(得分:0)

这里的第一个也是最重要的一点是,您将遇到试图管理文件中数据的可伸缩性/数据损坏问题 - 这就是数据库的用途。

可以使用平面文件来构建大型,快速的系统来存储数据,但这需要大量复杂的代码来实现复杂的文件锁定队列。但是,考虑到只使用数据库的替代方案,它很少值得努力。

允许用户指定文件名意味着他们将能够删除计算机上的webserver 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';

 }