Fseek将NUL = \ u0个字符添加到输出文件中

时间:2018-02-01 08:18:13

标签: php encoding fopen fwrite fseek

我创建了一个简单的PHP应用程序,其中是一个csv文件上传,然后是.stm(它是一个简单的文本文件)文件下载。记录必须在给定的字节位置写入。例如:第一个记录位置1,长度2,第二个记录等Records

所以我试图使用fwrite,fseek到达给定的位置,例如我不需要填写2条记录,所以我跳到11位,但文件中有NUL字符。

代码:

$input = $sFileName;
//a nevbol kiszedni a datumot, majd EEEEHHNN verziora konvertalni
$get_date_from_name = str_replace(".","",substr($sFileName,0,10));
$output = $get_date_from_name . '_mpl_tensoft_import.stm';

$_SESSION['file_name'] = $output;

if (false !== ($ih = fopen($input, 'r'))) {

$oh = fopen($output, 'w+b');

//Create first line of the file 11 record type
fwrite($oh,"11");
fseek($oh, 11);
fwrite($oh,"120967120159857100100007");

/*while (false !== ($data = fgetcsv($ih,0,";"))) {
    // this is where you build your new row
    //Interne cislo, Dodavatel, Dodavacie c.faktury Celk.suma, Dátum prijatia, Dátum splat. = Datum uhrady, Predmet 
    $outputData = array($data[0], $data[1], $data[2], $data[3], $data[12], $data[13],  $data[36] );
    fputcsv($oh, $outputData);
}*/

fclose($ih);
fclose($oh);

unlink($input);
}

结果是:

11NULNULNULNULNULNULNULNULNUL120967120159857100100007

Visual Studio代码提供错误,指出文件是二进制文件或大文件或使用不受支持的编码。

Notepad ++添加了NUL字符。

我应该只使用空格字符吗? 1个空格字符等于1个字节?该文件应采用CP852编码

感谢您的帮助并指出了正确的方向。

1 个答案:

答案 0 :(得分:0)

您的var canvas=document.querySelector('canvas'); //search all doc for canvas :) canvas.width= window.innerWidth; canvas.height= window.innerHeight; var c = canvas.getContext('2D'); //returning drwing context to c; c.fillRect(10, 10, 50, 50); 偏移量似乎“超出范围”。

Documentation说:

  

一般情况下,允许搜索文件结尾;如果随后写入数据,则在文件结尾和搜索位置之间的任何未写入区域中读取将产生值为0的字节

编辑:

如果你想把第二个数字放在偏移量13处,使用空格,你可以这样做:

seek()

该文件将包含:

  

$ban_pos = 13 ; $num = "11" ; $pos = $ban_pos - strlen($num) ; $ban = "120967120159857100100007" ; $oh = fopen($output, 'w+'); fwrite($oh, $num); fwrite($oh, str_repeat(' ', $pos)); fwrite($oh, $ban); fclose($oh);