Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在解析CSV文件之前确保该文件包含数据?_Php_Xml_Csv - Fatal编程技术网

Php 如何在解析CSV文件之前确保该文件包含数据?

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

我有一个PHP文件,尝试打开一个CSV文件,将数据解析为XML格式,然后保存XML文件。在解析任何内容之前,我遇到了一个难题,那就是确保CSV文件实际上包含我要查找的数据

CSV文件将每天更新新信息,PHP脚本将每天执行以更新XML文件

我尝试使用
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。非常感谢。