我创建了一个简单的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编码
感谢您的帮助并指出了正确的方向。
答案 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);
偏移量似乎“超出范围”。
一般情况下,允许搜索文件结尾;如果随后写入数据,则在文件结尾和搜索位置之间的任何未写入区域中读取将产生值为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);