为什么php没有将图像内容写入磁盘?

为什么php没有将图像内容写入磁盘?,php,javascript,image,file-upload,Php,Javascript,Image,File Upload,我有一些代码,它使用多部分表单和HTML5文件对象将图像(或电影、ppt等)上传到服务器,PHP在服务器上接收图像并将其写入磁盘。然而,PHP似乎根本没有写入磁盘 Javascript: function uploadFile (file, fileid) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4) {

我有一些代码,它使用多部分表单和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);
}
函数上传文件(文件,文件ID){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=函数(){
if(xhr.readyState==4){
窗口[“fn”+文件ID]=xhr.responseText;
$(“进度”+文件ID).innerHTML=“”;
}
}
var a=新元素(“div”);
a、 id=“progress”+文件id;
a、 设置样式(“背景色”,“4682B4”);
a、 设置样式(“高度”、“20px”);
a、 设置样式(“宽度”,“0px”);
$(“进度包装”)。采用(a);
xhr.upload.onprogress=函数(e,a){
变量百分比=数学四舍五入((e.loaded*150)/e.total);
var acperct=数学四舍五入(百分比/1.5);
$(“进度”+文件ID).setStyle(“宽度”,百分比);
$(“progress”+fileid.innerHTML=file.name+“”+acperct+“%”;
}
alpha=“abcdefghijklmnopqrstuvxyzabefghijklmnnopqrstuvxyz1234567890”。拆分(“”);
tmp_名称=[];
对于(i=0;i<6;i++)tmp_name[i]=alpha[Math.floor(Math.random()*alpha.length)];
open(“POST”,“upload.php”,true);
setRequestHeader(“内容类型”、“多部分/表单数据”);
setRequestHeader(“size”,file.size);
setRequestHeader(“name”,file.name);
setRequestHeader(“type”,file.type);
setRequestHeader(“tmp_名称”、“”+tmp_名称.join(“”);
发送(文件);
}
PHP:


发生的情况是,写入的文件或文本中没有任何内容
upload/


怎么了?

您没有指定在哪个平台上运行此代码,但是如果它是基于unix的,请检查上载目录上的权限-确保为apache运行的所有者/组设置了写入权限。作为快速测试,请执行
chmod 0777 upload/
并查看是否显示文件。

您没有指定在哪个平台上运行此代码,但如果是基于unix的,请检查upload目录上的权限-确保为apache运行的所有者/组设置了写入权限。作为一项快速测试,请执行
chmod 0777 upload/
并查看您的文件是否显示。

在回显内容之前,为内容的文件类型设置mime类型,例如,如果是jpg:

header("Content-type: image/jpg");
echo $contents;
。。。确保不要重复任何其他内容。如果您看到该图像,那么您知道它至少正确地到达了服务器

不管怎样,它并没有像应该的那样保存文件中的字符串。正如其他人所说,检查权限。此外,请尝试此操作以测试写入尝试(在删除header()调用后):


在回显内容之前,为内容的文件类型设置mime类型,例如,如果是jpg:

header("Content-type: image/jpg");
echo $contents;
。。。确保不要重复任何其他内容。如果您看到该图像,那么您知道它至少正确地到达了服务器

不管怎样,它并没有像应该的那样保存文件中的字符串。正如其他人所说,检查权限。此外,请尝试此操作以测试写入尝试(在删除header()调用后):


你有没有试着回显收到的内容,以确保你收到了你所期望的?这可能是接收问题。我尝试回显,然后
alert
ing,它显示为随机ASCII字符。要调试,请尝试var_dump()'ing$fh并查看是否有任何错误。还要查看ffilename是否可写,并启用错误报告()。很可能它在关闭错误的情况下默默地失败了。@MyStream如何打开错误报告?对于var_dump也可以。您是否尝试回显接收到的内容以确保收到了预期的内容?这可能是接收问题。我尝试回显,然后
alert
ing,它显示为随机ASCII字符。要调试,请尝试var_dump()'ing$fh并查看是否有任何错误。还要查看ffilename是否可写,并启用错误报告()。很可能它在关闭错误的情况下默默地失败了。@MyStream如何打开错误报告?将为基于var_dump.Unix的用户提供,并将尝试基于.Unix的,并将尝试。
$fwrite = fwrite($fh, $contents);
if ($fwrite === false) {
    echo 'write failed';
}
else {
    echo "wrote $fwrite bytes";
}