【问题标题】:Failed to read csv file from a server directory in PHP无法从 PHP 中的服务器目录读取 csv 文件
【发布时间】:2019-12-05 06:38:15
【问题描述】:

在服务器中,有一些 csv 文件。我想获取数组中的所有 csv 文件,然后从数组中读取最后更新的 csv 文件。然后,我想将最后更新的 CSV 数据保存到一个数组中。 我从目录中获取所有文件名。但我无法读取 csv 文件。我该如何解决这个问题?

这是我的代码。

//directory
$dir = DATA_DIR . '/' . date("Y") . '/' . date("md");

//copy filenames to array
$files = array();
$files = glob($dir."/*.csv");

// sort files by last modified date
usort($files, function($x, $y) {
    return filemtime($x) < filemtime($y);
});

$baseFile = [];

foreach($files as $file) {

    if (($handle = fopen($file, "r")) !== FALSE) {
        $baseFile[] = basename($file);

    } else {
        echo "Could not open file: " . $file;
    }

}

print_a($baseFile);

// output of baseFile array
/*
Array(
[0] => 34342658.csv
[1] => 34342325.csv
[2] => 34342007.csv
[3] => 34341709.csv
[4] => 34341407.csv
[5] => 34341077.csv
[6] => 34340752.csv

.............)
*/

// print the last updated csv file name
print_a($baseFile[0]);
// output: 34342658.csv

$csvFile = file($baseFile[0]);
print_a($csvFile);

【问题讨论】:

  • 那么当您打印$csvFile 时会发生什么?另外你确定那个文件不是空的吗?
  • 显示为空。但是 csv 文件包含数据。我已经检查过了。
  • $csvFile = file($baseFile[0]); - 不要那样做,如果你的任何单元格在数据中包含换行符,它会搞砸的。 php.net/manual/en/function.fgetcsv.php 是正确使用的函数。

标签: php fgetcsv scandir


【解决方案1】:

你错了。 $baseFile 数组只包含文件名,不包含路径。调用file(...)函数时必须使用完整路径。

在你的情况下应该是:

$csvFile = file($dir . '/' . $baseFile[0]);

也只是一个通知 - 您多次调用 fopen() 但从不关闭处理程序。您应该每次都调用fclose(),以免留下一堆打开的描述符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2016-07-06
    • 2021-09-29
    • 2019-10-19
    • 2015-07-10
    • 1970-01-01
    相关资源
    最近更新 更多