为什么php没有将图像内容写入磁盘?
我有一些代码,它使用多部分表单和HTML5文件对象将图像(或电影、ppt等)上传到服务器,PHP在服务器上接收图像并将其写入磁盘。然而,PHP似乎根本没有写入磁盘 Javascript:为什么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) {
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";
}