php - Windows 与 Linux PHP PHP_EOL - php 数据不同
问题描述
我将脚本从 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 吗?
解决方案
我明白了这一点。这是我很确定发生的事情。在 linux 中,行以新行结束。我通过在最后没有换行符(或更准确地说是 EOL)的连接来构建这些数据。这一定不是 windows 的问题。我在最后添加了一个换行符,它现在可以很好地处理它。当 jbase 读取这样的文件时,它会将其读取为我认为的原始数据,无论对错。
推荐阅读
- javascript - 仅当当前选项不返回匹配项时,我才想在 mongoDB 中创建一个新行
- reactjs - 从 react-redux 中的动作负载中获取数据
- laravel - Laravel 播种多对多表
- sql-server - T-SQL:是否有可能两个有两个单独的 RAISERROR 消息输出到同一行?
- javascript - Microsoft Azure 文本转语音 - 按下按钮时停止录制 - StopRecognitionOnceAsync() 不起作用?
- c# - 为对象的主体属性生成一个唯一 ID,该 ID 在运行时是一致的,并且在实施时不会给开发人员带来任何开销
- javascript - Promise.All 返回空
- java - 在 Spring Boot 中实现自定义异常
- html - 如何使弹性项目的宽度适合弹性框中的内容图像?
- python - "Requested OpenGL implementation is not supported. Implementation: 1" error in pyqt5