У меня есть код, который использует многочастную форму и объект файла HTML5 для загрузки изображения (или фильма, ppt и т. Д.) На сервер, где PHP получает его и записывает на диск. Однако PHP, похоже, вообще не записывает на диск.
Javascript:
function uploadFile (file, fileid) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { window["fn"+fileid] = xhr.responseText; $("progress"+fileid).innerHTML = "<a href=\""+window["fn"+fileid]+"\">"+window["fn"+fileid]+"</a>"; } } var a = new Element("div"); a.id = "progress"+fileid; a.setStyle("background-color", "#4682B4"); a.setStyle("height", "20px"); a.setStyle("width", "0px"); $("progress-wrapper").adopt(a); xhr.upload.onprogress = function(e, a) { var percent = Math.round((e.loaded*150)/e.total); var acperct = Math.round(percent/1.5); $("progress"+fileid).setStyle("width", percent); $("progress"+fileid).innerHTML = file.name+" "+acperct+"%"; } alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNNOPQRSTUVWXYZ1234567890".split(""); tmp_name = []; for (i = 0; i < 6; i++) tmp_name[i] = alpha[Math.floor(Math.random() * alpha.length)]; xhr.open("POST", "upload.php", true); xhr.setRequestHeader("Content-Type", "multipart/form-data"); xhr.setRequestHeader("size", file.size); xhr.setRequestHeader("name", file.name); xhr.setRequestHeader("type", file.type); xhr.setRequestHeader("tmp_name", ""+tmp_name.join("")); xhr.send(file); }
PHP:
<? function apache_request_headers() { foreach($_SERVER as $key=>$value) { if (substr($key,0,5)=="HTTP_") { $key=str_replace(" ","-",ucfirst(strtolower(str_replace("_","_",substr($key,5))))); $out[$key]=$value; }else{ $out[$key]=$value; } } return $out; } $headers = apache_request_headers(); $contents = file_get_contents("php://input"); echo $contents; $ffilename=$headers["tmp_name"].$headers["name"]; $all = array('png','jpeg','jpg','gif','mov','txt','wmv','pdf'); $fh = fopen("upload/".$ffilename, "w+"); fwrite($fh, $contents); fclose($fh); echo "upload/".$ffilename; ?>
Случается, что в письменном файле или в текстовой upload/
нет ничего.
Что не так?