什么时候使用php_ol是一个好主意?

我有时会在PHP代码示例中看到这种情况。这是否处理DOS/Mac/Unix终端线问题?


当前回答

当我的PHP没有浏览器时,我使用PHP_EOL常量。实际上,我间接地使用它。查看下面的示例。 例如,有一个叫code的网站。Golf(基本上是堆栈交换代码,但具有交互性)。有一个PHP只有控制台输出,我需要使用PHP_EOL常量来使用这个。

一种缩短它的方法是,一旦你需要使用PHP_EOL常量,就像这样做:

<?php
echo $n = PHP_EOL;
?>

这声明了变量$n,您可以使用它代替PHP_EOL常量作为换行符。甚至比<br>还要短,而且几乎任何需要换行符的东西都可以使用$n !

其他回答

我有一个站点,其中一个日志脚本在用户的操作之后向文本文件写入新一行文本,用户可以使用任何操作系统。

在这种情况下,使用PHP_EOL似乎不是最优的。如果用户是在Mac OS上,并写入文本文件,它将放置\n。当在windows计算机上打开文本文件时,它不会显示换行符。因此,我使用“\r\n”来代替在任何操作系统上打开文件时的工作。

如果要输出多行,使用error_log()非常方便。

在我的windows安装中,我发现很多调试语句看起来很奇怪,因为开发人员在拆分字符串时假定unix结尾。

在某些系统上,使用这个常量可能是有用的,因为如果,例如,您正在发送电子邮件,您可以使用PHP_EOL让跨系统脚本在更多系统上工作…但即使它是有用的,有时你会发现这个常数未定义,现代主机与最新的php引擎没有这个问题,但我认为一件好事是写一些代码来挽救这种情况:

<?php
  if (!defined('PHP_EOL')) {
    if (strtoupper(substr(PHP_OS,0,3) == 'WIN')) {
      define('PHP_EOL',"\r\n");
    } elseif (strtoupper(substr(PHP_OS,0,3) == 'MAC')) {
      define('PHP_EOL',"\r");
    } elseif (strtoupper(substr(PHP_OS,0,3) == 'DAR')) {
      define('PHP_EOL',"\n");
    } else {
      define('PHP_EOL',"\n");
    }
  }
?>

所以你可以毫无问题地使用php_ol…很明显,PHP_EOL应该在脚本上使用,应该在多个系统上同时工作,否则你可以使用\n或\r或\r\n…

备注:PHP_EOL可以为

1) on Unix    LN    == \n
2) on Mac     CR    == \r
3) on Windows CR+LN == \r\n

希望这个答案能有所帮助。

我发现PHP_EOL对于文件处理非常有用,特别是在向文件中写入多行内容时。

例如,您有一个很长的字符串,希望在写入普通文件时将其分解成多行。使用\r\n可能行不通,所以简单地将PHP_EOL放入脚本,结果非常棒。

看看下面这个简单的例子:

<?php

$output = 'This is line 1' . PHP_EOL .
          'This is line 2' . PHP_EOL .
          'This is line 3';

$file = "filename.txt";

if (is_writable($file)) {
    // In our example we're opening $file in append mode.
    // The file pointer is at the bottom of the file hence
    // that's where $output will go when we fwrite() it.
    if (!$handle = fopen($file, 'a')) {
         echo "Cannot open file ($file)";
         exit;
    }
    // Write $output to our opened file.
    if (fwrite($handle, $output) === FALSE) {
        echo "Cannot write to file ($file)";
        exit;
    }
    echo "Success, content ($output) wrote to file ($file)";
    fclose($handle);
} else {
    echo "The file $file is not writable";
}
?>

PHP_EOL(字符串) 此平台的正确“行结束”符号。 自PHP 4.3.10和PHP 5.0.2起可用

当读写服务器文件系统上的文本文件时,可以使用这个常量。

在大多数情况下,行结束并不重要,因为大多数软件都能够处理文本文件,而不管它们的来源。你应该与你的代码保持一致。

如果行结束符很重要,则显式地指定行结束符,而不是使用常量。例如:

HTTP报头必须用\r\n分隔 CSV文件应该使用\r\n作为行分隔符