Windows 与 Linux PHP PHP_EOL - php 数据不同
Posted
技术标签:
【中文标题】Windows 与 Linux PHP PHP_EOL - php 数据不同【英文标题】:Windows vs Linux PHP PHP_EOL - php data different 【发布时间】:2021-06-08 17:01:33 【问题描述】:我将一个脚本从 windows 迁移到 rhel 8,我的 php 脚本中有以下代码:
$Data = file_get_contents('https://example.com/api/data');
$Array = json_decode($Data, true);
$Output = '';
foreach ($Array as $key => $value)
if ($Output != '')$Output .= PHP_EOL;
$Output .= $value["id"] . ":" . $value["status"];
file_put_contents($Response,$Output);
在 Windows 中,它会在数据中添加一个漂亮的新行。在 hrel 中它不是。
我做了一个简单的测试:
$Output = '1';
$Output .= PHP_EOL;
$Output .= '2';
$Output .= PHP_EOL;
$Output .= '3';
file_put_contents($Response,$Output);
如果我执行 hexdump,我会得到以下信息:
sh-4.4$ hexdump -c active.resp
0000000 1 \n 2 \n 3
0000005
和
sh-4.4$ hexdump active.resp
0000000 0a31 0a32 0033
0000005
带有 -c 的 hexdump 看起来是正确的。
如果我使用 vi 创建相同的文件,则 hexdump 会显示一个额外的 \n 并以十六进制显示, 0a31 0a32 0a33
我在 $output 末尾添加了一个额外的 PHP_EOL,它可以正常工作,并且 hexdump 显示的内容与 vi 创建的文件上的 hexdump 完全相同。
我很茫然。在 linux 上执行 file_put_contents 之前是否需要添加换行符?
有人可以解释一下这个和没有最后一个 php_eol 的 hexdump 吗?
【问题讨论】:
尝试在 file_put_contents 之前 var_dump$Output
以查看换行符是否正确,然后再保存到文件。
您使用什么程序/方法来检查输出文件?
我刚刚用notepad++打开数据,是正确的。我正在使用 jbase 基本程序读取此文件,并且必须对数据执行某些操作。我应该删除这个问题吗?这不是 php 问题。
也许您可以用您的发现更新问题,并更改标签
\012
看起来像是一个正确的旧 Unix 换行符的八进制转储。如果只是显示问题,那么这个问题不太可能对其他人有帮助。
【参考方案1】:
我明白了这一点。这是我很确定发生的事情。在 linux 中,行以新行结束。我通过在最后没有换行符(或更准确地说是 EOL)的连接来构建这些数据。这一定不是 windows 的问题。我在最后添加了一个换行符,它现在可以很好地处理它。当 jbase 读取这样的文件时,它会将其作为原始数据读取,我认为是对还是错。
【讨论】:
以上是关于Windows 与 Linux PHP PHP_EOL - php 数据不同的主要内容,如果未能解决你的问题,请参考以下文章