什么时候使用php_ol是一个好主意?
我有时会在PHP代码示例中看到这种情况。这是否处理DOS/Mac/Unix终端线问题?
什么时候使用php_ol是一个好主意?
我有时会在PHP代码示例中看到这种情况。这是否处理DOS/Mac/Unix终端线问题?
当前回答
如果要输出多行,使用error_log()非常方便。
在我的windows安装中,我发现很多调试语句看起来很奇怪,因为开发人员在拆分字符串时假定unix结尾。
其他回答
不,PHP_EOL不处理端点问题,因为使用该常量的系统与将输出发送到的系统不同。
我完全不建议使用PHP_EOL。Unix/Linux使用\n, MacOS / OS X也从\r改为\n,在Windows上,许多应用程序(特别是浏览器)也可以正确显示它。在Windows上,更改现有的客户端代码仅使用\n并保持向后兼容性也很容易:只需将行切边的分隔符从\r\n更改为\n,并将其包装在类似trim()的函数中。
我发现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";
}
?>
如果要输出多行,使用error_log()非常方便。
在我的windows安装中,我发现很多调试语句看起来很奇怪,因为开发人员在拆分字符串时假定unix结尾。
PHP_EOL(字符串) 此平台的正确“行结束”符号。 自PHP 4.3.10和PHP 5.0.2起可用
当读写服务器文件系统上的文本文件时,可以使用这个常量。
在大多数情况下,行结束并不重要,因为大多数软件都能够处理文本文件,而不管它们的来源。你应该与你的代码保持一致。
如果行结束符很重要,则显式地指定行结束符,而不是使用常量。例如:
HTTP报头必须用\r\n分隔 CSV文件应该使用\r\n作为行分隔符
在某些系统上,使用这个常量可能是有用的,因为如果,例如,您正在发送电子邮件,您可以使用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
希望这个答案能有所帮助。