私はPHPがそれを受け取ってディスクに書き込むサーバーに画像(またはムービー、pptなど)をアップロードするために、マルチパート形式とHTML5ファイルオブジェクトを使用するコードをいくつか持っています。しかし、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/
のいずれかがないということです。
どういうところが間違っていますか?
は、あなたがちょうどあなたが何を期待受け取ったことを確認し、受信した内容をエコーバックしようとしていますか?受信の問題かもしれません。 – MyStream
私はエコーバックしてから、 'alert'してみました。ランダムなASCII文字で表示されます。バイナリ。 – tekknolagi
をデバッグするには、var_dump()を実行して$ fhを実行し、そこにエラーがあるかどうかを確認してください。また、ファイル名が書き込み可能かどうかを確認し、error_reporting()をオンにします。それはおそらく、エラーが消されて黙って失敗している可能性があります。 – MyStream