В js с помощью функции readAsBinaryString получаю часть файла в виде байтовой строки, по средствам ajax передаю её php скрипту, в котором нужно её сохранить. Если сохранять через file_put_contents или (fopen,fwrite,fclose) то строка сохраняется как текст. Проверял, на сервер приходит строка как если открыть в hex редакторе и посмотреть на dump. Как записать в файл эту байтовую строку?
Для fopen параметр b не помогает, пишет все равно как строку(файл получается будто исходник открыть через hex редактор, скопировать dump и вставить в блокнот). Нашел где то что file_put_contents можно запускать с флагом FILE_BINARY но результат тот же.
Под dump я имею ввиду текстовое представление байтов, то что обычно с права от шестнадцатеричного представления.
Короче так я отправляю файл
function _ajax_file(file,path,onprogress,onend,onerror,size){
size=size||2000000;
var start= 0,
end=size<file.size?size-1:file.size-1,
r= new FileReader,
_af=function(){
var x = new XMLHttpRequest;
x.open('POST', path, true);
x.setRequestHeader('Content-Type', 'application/ajax-file');
x.onreadystatechange=function(){
if(x.readyState==4){
console.log(x.responseText);
if(onprogress)
onprogress(start/file.size*100);
if(start<file.size)
_af();
else if(onend)
onend();
delete x;
}
};
r.onload=function(){
if(start<=size)
x.setRequestHeader('ajax-file','start');
else if(start>=file.size)
x.setRequestHeader('ajax-file','end');
x.send(this.result);
//console.log(this.result);
};
r.readAsBinaryString(file.slice(start,end));
start=end+1;
end=size+end<file.size?size+end:file.size;
};
_af();
}
_ajax_file(this.files[0],location.pathname,function(x){progress.value=x;},function(){progress.value=0;});
Так принимаю
if($_SERVER["CONTENT_TYPE"]=='application/ajax-file; charset=UTF-8')
{
$postdata=file_get_contents("php://input");
if($_SERVER['HTTP_AJAX_FILE']=='start')
if(file_exists('temp.txt'))
unlink('temp.txt');
//file_put_contents('temp.txt',$postdata,FILE_APPEND);
$fs=fopen('temp.txt','ab');
fwrite($fs,$postdata);
fclose($fs);
die();
}
Что я делаю не так?