Php 如何在解析CSV文件之前确保该文件包含数据?
我有一个PHP文件,尝试打开一个CSV文件,将数据解析为XML格式,然后保存XML文件。在解析任何内容之前,我遇到了一个难题,那就是确保CSV文件实际上包含我要查找的数据 CSV文件将每天更新新信息,PHP脚本将每天执行以更新XML文件 我尝试使用Php 如何在解析CSV文件之前确保该文件包含数据?,php,xml,csv,Php,Xml,Csv,我有一个PHP文件,尝试打开一个CSV文件,将数据解析为XML格式,然后保存XML文件。在解析任何内容之前,我遇到了一个难题,那就是确保CSV文件实际上包含我要查找的数据 CSV文件将每天更新新信息,PHP脚本将每天执行以更新XML文件 我尝试使用fgetcsv()PHP函数检查返回数组的值是否大于1,但这只检查CSV中的一行。我不确定这是最好的方法 if (($file = fopen('employees.csv', "r")) !== FALSE) { if (f
fgetcsv()
PHP函数检查返回数组的值是否大于1,但这只检查CSV中的一行。我不确定这是最好的方法
if (($file = fopen('employees.csv', "r")) !== FALSE) {
if (fgetcsv($file, 1000, ",") > 1) {
$dom = new DOMDocument();
$dom->encoding = 'utf-8';
$dom->xmlVersion = '1.0';
$dom->formatOutput = true;
$root = $dom->createElement('employees');
while (($data = fgetcsv($file, 1000, ",")) !== FALSE) {
$emp_node = $dom->createElement('employee');
$faculty = 'F';
...
我希望得到一个保存的XML文件,其中包含从employees.csv文件解析的所有数据。如果出于任何原因,CSV文件被无数据覆盖(空CSV),我不希望PHP脚本覆盖XML文件。我会这样做:
<?php
$content = file_get_contents('employees.csv');
if (!empty($content))
{
$lines = explode("\n", $content);
foreach ($lines as $line)
{
// $line = 1 line
}
}
您不应该直接覆盖您的文件,而应该创建一个新的临时文件,将解析后的数据写入其中,然后删除旧文件并将临时文件重命名为预期名称,前提是解析顺利
检查大小等是幼稚的-还有很多其他事情可能会出错,包括中间文件中格式错误的CSV内容等。在您的方法中,如果出现问题,您最终将没有有效的文件,而按照建议的方式,您手中至少还有最后一个有效的文件,就像没有发生任何错误一样。您应该总是简单地假设解析出错,除非您(根据任何选择的标准)确定不是这样 这将要求服务器具有与文件相同的PHP可用内存。如果他们希望整个文件都在内存中,只需使用file()
。啊,好的。我实际上在考虑这样做,但不确定最好的方式。我想你给了我一个好的开始。始终拥有一个有效的文件是优先级#1。非常感谢。