问题标签 [fgetcsv]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
731 浏览

php - .csv 文件和缺少逗号的问题

大家好,我在通过 PHP 代码打开 CSV 时遇到问题。我的 PHP 代码是:

问题不在于 PHP 代码,问题在于 .csv 文件。当 PHP 代码以正常方式显示信息时,即使缺少逗号也必须工作。

.csv 文件:

0 投票
3 回答
1253 浏览

php - PHP fgetcsv 遇到致命错误:在 Firefox 上超过了最大执行时间

首先我猜PHP中的“致命错误:超过最大执行时间”是服务器端错误,不应该取决于浏览器版本,对吧?不过好像有啊!?!

我有这段代码来读取来自表单中文本区域的 csv 数据。

而数据就是这样,没什么特别的,4列3行。

代码适用于所有浏览器(IE、Chrome 等),我可以看到除 Firefox 之外的解析数据!!!!!!我在不同的 PC 上进行了测试,但相同。所有浏览器都可以,但 Firefox 为具有“fgetcsv”的行给出“致命错误:超出最大执行时间”

我正在使用 PHP 版本 5.2.10 和 2 个不同的 firefox 版本 3.5.16 和 3.6.6

以前有人见过这个问题吗?

编辑:代码在两台不同的 Linux 服务器 CentOS 5.3 和 5.5 上进行测试,使用两台具有所有浏览器的不同 PC。

编辑 2:已解决

好的,我发现了问题。$delimiter 值来自具有 3 个值的 "," ";" 和 "\t" 哪个浏览器将 "\t" 显示为空格,我没有注意它。

似乎 firefox 正在对 \t 做一些事情,所以 PHP 不明白它是选项卡。但其他浏览器按预期发送 \t 。

如果我像 fgetcsv($handle, 1000, "\t", '"') 对 "\t" 进行硬编码,也适用于 firefox。

第一次 Firefox 给我带来了这么多麻烦,而不是 IE :)

0 投票
1 回答
843 浏览

php - fputcsv 和 fgetcsv

我的代码看起来像这样.. o/p 是一个 csv 文件,在一个单元格中有 4 个值,依此类推,仅在第一列中

请提供此代码的更好版本。尽快

0 投票
1 回答
686 浏览

php - PHP csv 解析器在字段开头吃“é”、“í”等字符

我正在尝试用 PHP 解析一个 csv 文件。我的问题如下:如果有一个带有“é”或“í”的字段,解析器会从字段的开头吃掉所有这些字符。

该问题仅存在于我的主机上,在本地使用 XAAMP(较新的 PHP 版本)时不存在。我的主机上存在该 bug 的 PHP 版本是:5.2.6-1+lenny9

代码不过是一行 fgetcsv。

这段代码已经输出了“吃过的”版本,例如当被 print_r 查看时。

有什么我可以做的吗?它一定是PHP中的一个错误,从那时起就已经修复了。我发现的另一种选择是通过在字段末尾放置一个逗号来转义序列(我的 csv 源,如果里面有 , ,Google Spreadsheets 会自动将该字段包装在 " " 中)。然后我可以编写一个函数,如果它是逗号,则删除最后一个字符(对此有任何帮助吗?)。

是(或曾经是)PHP 中的一个已知错误,是否有任何解决方案?如果没有,您能帮我使用 delete-last-character-if-its-a-comma 功能吗?

0 投票
6 回答
27154 浏览

php - php fgetcsv 返回所有行

我有以下 csv 文件:

当我这样做时:

我得到一个包含 183 个元素的数组,我希望只得到 csv 的一行,但我得到了整个文件。

我什至尝试过$data = fgetcsv($handle, 1000);,我得到了相同的结果

0 投票
2 回答
669 浏览

php - PHP - CSV 到 MySQL 到前端,然后返回到 CSV,最佳编码/字符串函数实践?

我有一个使用 CSV 文件来维护 MySQL 数据库中的数据(产品)的场景。基本上客户维护产品的步骤如下:

  • 将项目添加到预定义列中的 CSV 文件
  • 在后端上传 CSV
  • PHP 脚本遍历 CSV 数据
  • 数据经过验证/清理并发送到 MySQL 数据库

当客户端编辑、添加或删除项目时,同样适用于相反的情况,但是这也可以直接从后端完成。我遇到了某些字符在数据库或下载的电子表格中没有正确显示的问题,所以我的问题是:

通常,在以 CSV 文件的形式添加和检索数据时,适用于数据的一组好的编码或字符串函数是什么?我的 MySQL 连接编码是 UTF-8,但是我尝试使用 UTF-8 字符集保存 CSV 文件,但似乎 Excel 会自动对其应用默认的 Windows-1252 编码,从而破坏所有 ym UTF-8 字符。

像 Open Office.org 这样的应用程序会提示您输入导入字符集,并且当设置为 Unicode UTF-8 时,它显示正常。显然不能依赖客户端总是使用 Excel 或 Open Office,那么 PC / CSV > MySQL > 回到 PC / CSV 工作的好的解决方案是什么?

欢迎和赞赏所有建议。

西蒙

0 投票
2 回答
8917 浏览

php - PHP fgetcsv()没有读取所有行

我有一个 php 脚本,它正在读取远程 CSV 文件,并根据 CSV 文件的内容将产品添加到数据库中。目前大约有 2800 行(产品),但脚本一直停在第 1388 行。

我使用的代码如下:

我已将 php 内存限制设置为 64M,甚至尝试了 128M。我还将 max_execution_time 设置为 60 分钟。我还尝试按如下方式更改代码:

这确实导致更多的行被解析,但数据不正确,即图像列正在成为描述列等。我认为这与添加 \r 作为我的行尾有关。我试过\n,没有运气。最后,我还在 ini 中将 auto_detect_line_endings 添加为 true。

任何人都可以提出为什么我的数据被缩短的原因吗?

问候,西蒙

编辑

我注意到了一些有趣的事情。我在上面代码中循环的每一行都有一个 MySQL 插入。现在,我数据库中的最后一条记录是 CSV 文件中的第一行,这是否意味着文件是从最后一行开始解析的?

这些似乎是休息处或附近的行:


解决方案

事实证明,将文件复制到我的服务器并处理副本对我来说效果要好得多。我遵循的步骤如下:

  • 我使用读取远程文件的内容file_get_contents()
  • 然后我使用iconv() 函数将数据重新编码为 UTF-8
  • 我使用和函数制作了一个临时文件fopen(),文件的内容是上面的编码数据fwrite()fclose()
  • 我使用该chmod()函数将文件的权限设置为 0750
  • 然后我将该fgetcsv()函数应用于我的临时文件
  • 做了所有需要做的事
  • 完成后删除临时文件,使用unlink()函数

那成功了。所以,我怀疑问题的一半实际上是远程服务器超时,另一半是编码问题。

感谢大家在正确方向上的所有推动

0 投票
2 回答
951 浏览

php - 在解析之前重新编码整个 CSV 文件 - 使用简单的 PHP?

我有一个脚本,它读取远程 CSV 文件的内容,遍历行,并将数据项添加到数据库中。该文件平均有大约 3000 行,因此有 3000 个产品。

澄清几点:

  • 我没有事先控制 CSV 文件中的数据
  • 我无权访问/控制创建此 CSV 文件的方式
  • CSV 文件每天从 MySQL 数据库中的数据动态生成一次

问题:

我的脚本只迭代了大约 1300 行然后停止,没有错误,什么都没有。所有文本都用双引号括起来,通常 CSV 文件格式正确。奇怪的是:如果我下载 CSV 文件,在 Notepad++ 中打开它并将编码更改为 UTF-8 不带 BOM,将其上传到测试服务器并在该文件上运行我的脚本,我得到了 FULL 3000 个项目和所有很好。

那么,我假设生成此文件的人需要将数据插入为 UTF-8?因为我无法控制该过程,所以我想知道是否有一种相当简单的方式可以将没有 BOM 编码的 UTF-8 应用于该文件,或者至少将文件内容读入一个变量并重新编码?

非常感谢

0 投票
6 回答
59282 浏览

php - 我如何解析 csv 文件以先获取列名,然后再获取与之相关的行?

这是我的 csv

第一行当然是列名。我尝试了 fgetcsv() 但所做的只是显示所有行。而不是我想要的。我该怎么做?

因此,如果我最后将数据放入数组中,我将能够打印出数据的表格格式,就像它在 excel 中显示的那样。

谢谢

这是我的样本:

这是我的输出:(我将 $row 放入 pre 中,以便显示它)

0 投票
2 回答
2803 浏览

php - csv中缺少字段的第一个字符

我正在处理 php 中的 csv 导入脚本。它工作正常,除了字段开头的外来字符。

代码看起来像这样

这是一个显示我的问题的数据示例

这将导致以下结果

我在 php.net 的一些评论中看到了这种行为,并且我试图ini_set('auto_detect_line_endings',TRUE);检测行尾。没有成功。

有谁熟悉这个问题?

编辑:

谢谢AJ,这个问题现在已经解决了。

setlocale(LC_ALL, 'en_US.UTF-8');

是解决方案。