首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -跳过文本文件中的0D0A行时出现问题

问PHP -跳过文本文件中的0D0A行时出现问题
EN

Stack Overflow用户
提问于 2020-11-13 10:15:45
回答 1查看 33关注 0票数 0

我得到一个包含MySQL插入的文本文件(.sql)。我发现有时会包含空行。这些空白行包含十六进制值0D0A (Windows换行符)。当为查询发送空行时,MySQL会报告错误。因此,当我读取/发送行到MySQL时,我想跳过发送任何空行。我想出了以下代码,但它并没有像我预期的那样工作。将删除换行符,但仍会将空行发送到MySQL。我将问题追溯到PHP命令empty()。根据文件“”应该被认为是空的。那么为什么它不跳过空行呢?我已经在这上面花了几天的时间,但我尝试的都不起作用。我需要另一双眼睛,谢谢。代码如下:

代码语言:javascript
复制
<?php
$bom = pack("H*", "EFBBBF");
if(($reading = fopen("sample.sql", "r")) !== false)
{
 $sql = preg_replace("/^$bom/", "", fgets($reading));
 while(!feof($reading))
 {
  $sql = str_replace(array("\n", "\r", "\r\n"), " ", $sql);
  if(!empty($sql))
  {
   echo("{$sql}<br>");
   $sql = fgets($reading);
  }
 }
 if(!feof($reading))
 {
  echo("Unexpected read error in file." . PHP_EOL);
 }
 fclose($reading);
}
?>

我将换行符替换为空格(如果我尝试使用"“删除换行符,IIS将崩溃)。我希望空命令跳过空格,但它没有。运行此脚本所需的示例数据是here。

感谢你的帮助,

查尔斯

EN

回答 1

Stack Overflow用户

发布于 2020-11-13 16:57:23

经过一些非常需要的睡眠后,我发现了我的问题(某种程度上)。我仍然认为empty()应该看到“”为空,我会再次检查文档。

要修复我的代码,我必须更改str_replace以完全删除换行符。然后,我必须将fget移出if语句(如果该行为空,则仍然需要获取下一行)。

如果其他人遇到这个问题,这里是更正后的代码:

代码语言:javascript
复制
<?php
$bom = pack("H*", "EFBBBF");
if(($reading = fopen("sample.sql", "r")) !== false)
{
 $sql = preg_replace("/^$bom/", "", fgets($reading));
 while(!feof($reading))
 {
  $sql = str_replace(array("\r\n", "\n", "\r"), "", $sql);
  if(!empty($sql))
  {
   echo("{$sql}<br>");
  }
  $sql = fgets($reading);
 }
 if(!feof($reading))
 {
  echo("Unexpected read error in file." . PHP_EOL);
 }
 fclose($reading);
}
?>

谢谢你的关注。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64814526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档