无法从 PHP 中的服务器目录读取 csv 文件
Failed to read csv file from a server directory in PHP
在服务器中,有一些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);
你搞错了。 $baseFile
数组只包含文件名,不包含路径。调用 file(...)
函数时必须使用完整路径。
你的情况应该是:
$csvFile = file($dir . '/' . $baseFile[0]);
也只是一个通知 - 您多次调用 fopen()
但从未关闭处理程序。你应该每次都调用 fclose()
,不要留下一堆打开的描述符。
在服务器中,有一些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);
你搞错了。 $baseFile
数组只包含文件名,不包含路径。调用 file(...)
函数时必须使用完整路径。
你的情况应该是:
$csvFile = file($dir . '/' . $baseFile[0]);
也只是一个通知 - 您多次调用 fopen()
但从未关闭处理程序。你应该每次都调用 fclose()
,不要留下一堆打开的描述符。