【问题标题】:Reading and writing file to PHP, help with formatting?读取和写入文件到 PHP,帮助格式化?
【发布时间】:2011-03-22 18:49:10
【问题描述】:

我正在将其写入文件:

    $myFile = "purchases.txt";
    $fh = fopen($myFile, 'a');
    $stringData = $title ."|". $id;
        fwrite ($fh, $stringData."|");
    fclose ($fh);

在一个单独的文件中我正在写名字:

  $name = $_POST['name'];
    $last = $_POST['lastname'];
    $name = $name ." ". $last;
    $myFile = "purchases.txt";
    $fh = fopen($myFile, 'a');
    $stringData = $name;
    fwrite ($fh, $stringData."\r\n");
    fclose ($fh);

并回显内容:

foreach($lines as $theline ) {
            list($title, $id, $name) = split('\|',$theline); 
                    echo "
                        <tr><td><h3>Title</h3></td>
                        <td><h3>ID</h3></td>
                        <td><h3>Name</h3></td>
                        <td><h3>Date</h3></td>
                         <tr><td><h4>$title</h4></td>
                         <td><h4>$id</h4></td>
                         <td><h4>$name</h4></td>
                         <td><h4>".date('l \\t\h\e jS')."</h4></td></tr>
                         ";                  
                     }

文件如下所示:

 Uncharted 3 |1| Deus Ex |2| Metal Gear Solid |3|Lib drfsdgf

问题:如果文件中有多个游戏名称,它会将名称代替客户名称打印到表格中。

【问题讨论】:

  • 你必须先确定格式。你有什么理由将这款游戏与多于一款在线游戏一起使用?
  • 这是一个购买历史页面,所以如果用户购买了多个游戏,我想要列表。
  • 最好将此类信息存储在数据库中。您只需一次查询即可获得所需的任何统计信息。有什么理由不想使用数据库?
  • 我知道这要好得多,但这些是要求:s
  • 这不是要求,只是一时兴起。我自己不会浪费时间尝试制作一个平面文件来完成数据库工作。

标签: php string file


【解决方案1】:

考虑以 json 或 xml 格式存储您的数据。然后,当你读出来的​​时候,你可以使用内置的php函数来正确读取它。

json_encodejson_decode 是你的朋友。

编辑:上述建议仍然适用,但我只是注意到 2 个不同的文件方面。

此解决方案也无法正常工作,因为您要向数据中添加两次。要么清理将数据添加到文件的方式(完全构建字符串,然后将其写入文件),要么切换到数据库。数据库旨在更优雅地处理此类问题。

【讨论】:

  • 数据只能通过文件访问,难道没有别的办法吗?
  • 解析这样的格式没什么大不了的。成千上万的网站都在使用它,并且没有蹩脚的内置 php 函数感觉很好。事实上,XML 在解析和编写方面会更有问题
  • 将信息存储在数据库中的问题会更小,并且消除了使用纯文本文件的根本性。
  • @someone:为了解释 Toast 的建议,他基本上是建议您继续将数据存储在同一个平面文件中,而不是像“{$title} |{$id} |”,他建议你像这样存储它:json_encode(array('title' =&gt; $title, 'id' =&gt; $id)) . "\n"。然后当你检索数据时,你可以简单地这样做:foreach ($lines AS $theline) { $game = json_decode($theline); }
  • @Michael 已经死了。关键是要更改存储数据的格式,以便您可以专门引用姓名、标题等。这也有助于未来验证,因为您可以添加更多字段(例如分数)而不会破坏旧条目。您当前的系统在很大程度上依赖于始终按给定顺序排列的数据,如果顺序更改(如您在多个标题中看到的那样),则会中断。我建议尝试找出问题的根源,而不是建议使用 hack 来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2017-01-03
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多