Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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 - Fatal编程技术网

Php 为什么代码可以';是否更新csv中的内容?

Php 为什么代码可以';是否更新csv中的内容?,php,Php,我想删除上传,并将数量列中的0更改为888, 下面是我的代码,它使csv文件内容混乱。如何更正我的代码。多谢各位 $dir = getcwd(); $files = scandir($dir); foreach ($files as $file) { $parts = pathinfo($file); if($parts['extension']!="csv") continue; if (($handle = fopen($fi

我想删除
上传
,并将
数量
列中的0更改为888, 下面是我的代码,它使
csv
文件内容混乱。如何更正我的代码。多谢各位

 $dir   = getcwd();
   $files = scandir($dir);
   foreach ($files as $file)
   {
       $parts = pathinfo($file);
       if($parts['extension']!="csv") continue;
       if (($handle = fopen($file, "r")) !== FALSE)
       {
           $new_content =  implode(',', fgetcsv($handle, 1000, ","))."\n";
           while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
           {
               $data[12]=substr($data[12],9);
               $data[13]=substr($data[13],9);
               $data[14]=substr($data[14],9);
               $data[42]=888;
               $new_content .= implode(',', $data)."\n";
           }
           fclose($handle);
        file_put_contents($file, $new_content);
       }
   }
测试csv文件
这是因为.csv文件的第一行超过1000个字符。如果您不能提前确定每条线可以有多大,我建议:

$data = fgetcsv($handle, 0, ','); // >= PHP 5.0.4

第一个选项可能会减慢处理速度,但可能是可以忽略的

您还应该考虑使用<代码> FPTCCSV < /代码>来编写输出。

$dir   = getcwd();
$files = scandir($dir);
foreach ($files as $file) {
   $parts = pathinfo($file);
   if ($parts['extension']!="csv") {
       continue;
   }
   if (false === ($outfile = fopen("$file.tmp", "w"))) {
       continue;
   }
   if (($handle = fopen($file, "r")) !== FALSE) {
       fputcsv($outfile, fgetcsv($handle, 4096, ","));

       while (($data = fgetcsv($handle, 4096, ",")) !== FALSE) {
           $data[12]=substr($data[12],9);
           $data[13]=substr($data[13],9);
           $data[14]=substr($data[14],9);
           $data[42]=888;
           fputcsv($outfile, $data);
       }
       fclose($handle);
       fclose($outfile);
       if (false === rename("$file.tmp", $file)) {
           die("Could not rename temporary file");
       }
   }
}

这是因为.csv文件的第一行超过1000个字符。如果您不能提前确定每条线可以有多大,我建议:

$data = fgetcsv($handle, 0, ','); // >= PHP 5.0.4

第一个选项可能会减慢处理速度,但可能是可以忽略的

您还应该考虑使用<代码> FPTCCSV < /代码>来编写输出。

$dir   = getcwd();
$files = scandir($dir);
foreach ($files as $file) {
   $parts = pathinfo($file);
   if ($parts['extension']!="csv") {
       continue;
   }
   if (false === ($outfile = fopen("$file.tmp", "w"))) {
       continue;
   }
   if (($handle = fopen($file, "r")) !== FALSE) {
       fputcsv($outfile, fgetcsv($handle, 4096, ","));

       while (($data = fgetcsv($handle, 4096, ",")) !== FALSE) {
           $data[12]=substr($data[12],9);
           $data[13]=substr($data[13],9);
           $data[14]=substr($data[14],9);
           $data[42]=888;
           fputcsv($outfile, $data);
       }
       fclose($handle);
       fclose($outfile);
       if (false === rename("$file.tmp", $file)) {
           die("Could not rename temporary file");
       }
   }
}

当我将1000更改为0或4096时。新的csv文件无法工作,您可以尝试一下。phplist.xxmn.com/1.csv这个csv文件也不能工作,杰克,你知道为什么吗?很多人都对我的答案表示感谢,并提出了一些可能对你有用的改进措施。这很有效,非常感谢,但有一句话我不能很好地理解$你能解释一下吗。谢谢你在你的情况下,你可能只是做
fread($file,3)打开文件之后。当我将1000更改为0或4096时,请确保不要在同一个文件上运行两次脚本。新的csv文件无法工作,您可以尝试一下。phplist.xxmn.com/1.csv这个csv文件也不能工作,杰克,你知道为什么吗?很多人都对我的答案表示感谢,并提出了一些可能对你有用的改进措施。这很有效,非常感谢,但有一句话我不能很好地理解$你能解释一下吗。谢谢你在你的情况下,你可能只是做
fread($file,3)打开文件之后。只需确保不要在同一个文件上运行脚本两次。