标签: fgetcsv

从目录中读取*.csv文件并显示每个文件的内容失败

我需要帮助阅读文件夹和打开/输出csv数据,我已经使用了其他人写的例子,但没有一个对我有用.

我目前拥有的是这个,但它不输出文件:

$files = scandir($PathToCreate.$version."/"); //scan the folder
foreach($files as $file) { //for each file in the folder

//The following is another example I found but does not output anything I just need to open each file and be able to output / target specific data

$csv = array();
$lines = file($file, FILE_IGNORE_NEW_LINES);

foreach ($lines as $key => $value)
{
    $csv[$key] = str_getcsv($value);
} 
print_r($csv)

}
Run Code Online (Sandbox Code Playgroud)

php csv scandir fgetcsv opencsv

6
推荐指数
1
解决办法
6728
查看次数

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

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

代码看起来像这样

if (($handle = fopen($filename, "r")) !== FALSE)
{
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
         $teljing[] = $data;

     fclose($handle);
}
Run Code Online (Sandbox Code Playgroud)

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

føroyskir stavir, "Kr. 201,50"
óvirkin ting, "Kr. 100,00"
Run Code Online (Sandbox Code Playgroud)

这将导致以下结果

array 
(
     [0] => array 
          (
                 [0] => 'føroyskir stavir',
                 [1] => 'Kr. 201,50'
          )
     [1] => array 
          (
                 [0] => 'virkin ting', <--- Should be 'óvirkin ting'
                 [1] => 'Kr. 100,00'
          )
)
Run Code Online (Sandbox Code Playgroud)

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

有谁熟悉这个问题?

编辑:

谢谢你,这个问题现在解决了.

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

是解决方案.

php csv fgetcsv

5
推荐指数
1
解决办法
2379
查看次数

如何在PHP中上传文件时获取完整的文件路径?

我真的想知道当我在PHP上传文件时,我将如何获得完整的文件路径?

这是我的问题......

我正在PHP中导入一个csv文件.上传文件不是问题,但用于导入fscsv()的csv文件的函数需要fopen.fopen让我头疼,因为它需要一个确切的文件路径,这意味着该文件应与php文件在同一目录中.如果用户从其他目录获取文件,该怎么办?

这是我的代码:

index.php:

<form action="csv_to_database.php" method="POST" enctype="multipart/form-data">
 <input type="file" name="csv_file" />
 <input type="submit" name="upload" value="Upload" />
</form>
Run Code Online (Sandbox Code Playgroud)

csv_import.php:

<?php
 if ($_FILES['csv_file']['error'] > 0) {
  echo "Error: " . $_FILES['csv_file']['error'] . "<br />"; 
 }else{ 

  if (($handle = fopen($_FILES['csv_file']['name'], "r")) !== FALSE) {

   while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

    for ($c=0; $c < count($data) ; $c++) {
     echo $data[$c] . " ";
    }
    echo "<br />";
   }
   fclose($handle);
  }
 }
?>
Run Code Online (Sandbox Code Playgroud)

fopen here只能获取变量传递的文件名$_FILES['csv_file']['name'].我试图让任何函数在互联网上获取$ …

php csv fopen filepath fgetcsv

5
推荐指数
1
解决办法
3万
查看次数

如何使用 fgetcsv 省略空白行

我一直致力于将 csv 文件导入 mysql 数据库。问题是我的客户获取的文件已经带有一些错误的格式。行以 43 结束,但文件下降到 65078!

导入时,脚本需要很长时间。我该怎么做才能确保只导入从 0 到 44 的行?这是我正在使用的代码。

  <table>
<?php
//fgetcsv($handle, 1024, delimiter)
$file = fopen("prices.csv", "r");
$row = 0;

    while($csv_line = fgetcsv($file,1024)) {

      if($row ==    4){
        echo "How many headers do we have: ".count($csv_line)."<tr>";

         foreach($csv_line as $header){

           if($header !== NULL){
            print "<td>$header</td>";
           }
         }
         echo "</tr>";
      } 

      if($row > 6) {

        echo '<tr>';

        for ($i = 0, $j = count($csv_line); $i < $j; $i++) {

          echo '<td>'.$csv_line[$i].'</td>';

        }

        echo "</tr>\n";

      } else {

        $row++; …
Run Code Online (Sandbox Code Playgroud)

php fgetcsv

5
推荐指数
1
解决办法
8929
查看次数

fgetcsv 后数组第一行中的奇怪字符

我有一个 CSV 文件,在这种情况下,第一个“单元格”只是一个整数 9。下一行是第一个“单元格”的 10,依此类推。当我做$array = fgetcsv($file);第一行的第一个单元格时,值前面有这些奇怪的字符:??

它搞乱了我的数据库导入,因为这个单元格应该只包含一个整数。它只发生在第一行的第一个单元格上。

关于为什么会发生这种情况以及我可以做些什么来避免这种情况的任何想法?

php csv illegal-characters fgetcsv

5
推荐指数
2
解决办法
2111
查看次数

php; 将 fgetcsv 与 SplFileObject::fseek 结合使用;行读取问题

当读取 csv 文件中的特定行时,我尝试使用SplFileObject::fseekwith fgetcsv

要读取第 2 行(例如),我执行 afseek(1)并使用 读取fgetcsv,这给出了第 2 行。

当我执行 afseek(0)并使用 读取时fgetcsv,我得到了第 0 行。

所以以这种方式读取第 1 行存在一个问题。(我知道我可以连续阅读两行,但我认为这不太好)。

我发现这个问题在 2008 年 PHP 版本 5.2.6 中报告:SplFileObject: fgetcsv aftereek returns error line

我使用的是 PHP 版本 5.4.19。

有人有这方面的信息吗?这是故意的吗?

php fseek fgetcsv splfileobject

5
推荐指数
1
解决办法
1685
查看次数

删除 CSV 中的第一行,然后保存文件并覆盖现有的

我有一个动态生成的 CSV 文件。我想删除 CSV 的第一行,然后再次保存。

我已经用谷歌搜索并能够获得 csv 的第一行,但删除后再次写入的部分是我陷入困境的地方。

这是例子

line1,data1
line2,data2
line3,data3
Run Code Online (Sandbox Code Playgroud)

我想要达到的目标

line2,data2
line3,data3
Run Code Online (Sandbox Code Playgroud)

即删除第一行并再次保存文件

这是我的代码

$file = fopen('words.csv', 'r');
$data = fgetcsv($file,10000,",");
$data = array_shift($data);
$file = fopen('words.csv', 'w');
fputcsv($file,$data,",");
fclose($file);
Run Code Online (Sandbox Code Playgroud)

我得到这个: ! ) Warning: fputcsv() expects parameter 2 to be array, string given in C:\wamp\www\scrape\test.php on line7

并且输出文件为空。

艾哈迈尔

php csv fgetcsv fputcsv

5
推荐指数
1
解决办法
9845
查看次数

将 CSV 中的特定列读取到数组

我正在尝试读取 csv 文件中的某些数据并将其传输到数组。我想要的是获取某一列的所有数据,但我想从某一行开始(例如,第 5 行),有没有可能的方法来做到这一点?我现在只获取特定列中的所有数据,想从第 5 行开始,但想不出任何办法。希望大家能帮帮我。谢谢!

<?php

//this is column C
$col = 2;

// open file
$file = fopen("example.csv","r");

while(! feof($file))
{
    echo fgetcsv($file)[$col];
}

// close connection
fclose($file);

?>
Run Code Online (Sandbox Code Playgroud)

php fgetcsv

5
推荐指数
1
解决办法
8981
查看次数

如何在php中解析包含1500万行数据的csv文件

我有一个脚本可以解析 CSV 文件并开始验证电子邮件。这对于 1000 行来说效果很好。但在 1500 万行时,它显示内存耗尽错误。文件大小为 400MB。有什么建议么?如何解析和验证它们?

服务器规格:Core i7 和 32GB RAM

function parse_csv($file_name, $delimeter=',') {
  $header = false;
  $row_count = 0;
  $data = [];

  //  clear any previous results
  reset_parse_csv();

  // parse
  $file = fopen($file_name, 'r');
  while (!feof($file)) {
    $row = fgetcsv($file, 0, $delimeter);
    if ($row == [NULL] || $row === FALSE) { continue; }
    if (!$header) {
      $header = $row;
    } else {
      $data[] = array_combine($header, $row);
      $row_count++;
    }
  }
  fclose($file);

  return ['data' => $data, 'row_count' => …
Run Code Online (Sandbox Code Playgroud)

php csv fgetcsv

5
推荐指数
1
解决办法
6204
查看次数

从外部 FTP 服务器读取 &gt; 1GB GZipped CSV 文件

在我的 Laravel 应用程序的计划任务中,我在外部 FTP 服务器上读取了几个大的 gzipped CSV 文件,范围从 80mb 到 4gb,其中包含我根据产品属性存储在我的数据库中的产品。

我遍历要导入的产品提要列表,但每次都返回一个致命错误:“已用尽 536870912 字节的允许内存大小”。我可以增加极的长度参数fgetcsv从函数1000100000其解决的较小的文件(<500MB)的问题,但对于较大的文件,将返回致命错误。

有没有一种解决方案可以让我下载或解压缩 .csv.gz 文件、读取行(按批次或逐行)并将产品插入到我的数据库中而不会耗尽内存?

$feeds = [
    "feed_baby-mother-child.csv.gz",
    "feed_computer-games.csv.gz",
    "feed_general-books.csv.gz",
    "feed_toys.csv.gz",
];

foreach ($feeds as $feed) {
    $importedProducts = array();
    $importedFeedProducts = 0;

    $csvfile = 'compress.zlib://ftp://' . config('app.ftp_username') . ':' . config('app.ftp_password') . '@' . config('app.ftp_host') . '/' . $feed;

    if (($handle = fopen($csvfile, "r")) !== FALSE) {
        $row = 1;
        $header = fgetcsv($handle, 1, "|");
                
        while (($data = fgetcsv($handle, 1000, …
Run Code Online (Sandbox Code Playgroud)

php csv fgetcsv laravel

5
推荐指数
1
解决办法
273
查看次数