写入文本文件 - 布局混乱 - PHP

时间:2014-02-28 14:55:01

标签: php text fwrite

我得到了以下fwrite代码,分隔数据并以数据结尾))

$shapeType = $_POST['shapeType'].','.$_POST['triangleSide1'].','.$_POST['triangleSide2']
.','.$_POST['triangleSide3'].','.$_POST['triangleColour'].'))';
fwrite($handle, $shapeType);

但这是它保存在文本文件中的方式......

  

,,,,))三角,180,120,80,红色))

为什么要有第一套

  

,,,,,))

出现在应该是什么样子的前面?

2 个答案:

答案 0 :(得分:2)

您需要在每行的末尾添加一个新的行字符。否则你的线都会相互碰撞。

使用PHP_EOL,因为它会自动使用操作系统相应的新行字符序列。

  

PHP_EOL(string)
  此平台的正确“行尾”符号。   自PHP 4.3.10和PHP 5.0.2起可用

$shapeType = $_POST['shapeType'].','.$_POST['triangleSide1'].','.$_POST['triangleSide2']
.','.$_POST['triangleSide3'].','.$_POST['triangleColour'].'))'.PHP_EOL;

仅供参考,使用sprintf()可能会更清洁:

$shapeType = sprintf("%s,%s,%s,%s,%s))%s",
    $_POST['shapeType'],
    $_POST['triangleSide1'],
    $_POST['triangleSide2'],
    $_POST['triangleSide3'],
    $_POST['triangleColour'],
    PHP_EOL
);

答案 1 :(得分:2)

在没有看到更多代码的情况下,我猜你会发布到同一个文件,并且在编写文件之前不会检查是否发出了POST请求。因此,您可能也会在GET请求中写入您的文件,导致出现空条目。

您需要以下内容:

if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
  // ...
  $shapeType = $_POST['shapeType'].','.$_POST['triangleSide1'].','.$_POST['triangleSide2']
.','.$_POST['triangleSide3'].','.$_POST['triangleColour'].'))';
  fwrite($handle, $shapeType);
  // ...
}

编辑顺便说一句,您应该使用fputcsv来处理转义引号,如果您将来更改某些内容,例如说明字段。