file_put_contents():无法打开流

时间:2015-03-04 13:21:29

标签: javascript php jquery file-upload drag-and-drop

我想在我的网页上创建拖放上传。我编写的代码使用Jquery打开文件,并使用XHR请求将数据发送到php文件。然后php文件将文件移动到我的perfered位置。当我将我的文件拖放到放置区域时,我收到了200个帖子请求,我认为这意味着数据被发送到我的PHP脚本但是后来我收到了以下错误:

file_put_contents(../../../media/SeagateHDD/Uploads/): failed to open stream

我相信这个错误是因为php无法找到位置(../../../ media / SeagateHDD / Uploads /)但是我检查了十次并且位置正确且没有拼写错误。我也检查了我的许可和所有者的位置,一切都是正确的所有者“www-data:www-data”和权限“0775”甚至tred“0777”,没有任何作用。如果有人能帮助我解决这些问题,我将非常感激。

我的Javascript

$(函数(){

var obj = $('#Upload_form');

obj.on('dragover', function(e){
    //prevent browser from open the file when drop off
    e.stopPropagation();
    e.preventDefault();
    $(this).css('border',"3px solid #000000");
});

obj.on('dragleave', function(e){
    //prevent browser from open the file when drop off
    e.stopPropagation();
    e.preventDefault();
    $(this).css('border',"3px dashed #4a4a4a");
});

obj.on('drop',function(e){
    //prevent browser from open the file when drop off
    e.stopPropagation();
    e.preventDefault();
    $(this).css('border',"3px dashed #4a4a4a");

    //retrieve uploaded files data
    var files = e.originalEvent.dataTransfer.files;
    var file = files[0];

    upload(file);
});

function upload(file){
    xhr = new XMLHttpRequest();

    //initiate Request
    xhr.open('POST','../PHP/Drop_Upload.php', true);

    //set headers
    xhr.setRequestHeader('Content-Type', 'multipart/form-data');
    xhr.setRequestHeader('X-File-Name',file.fileName);
    xhr.setRequestHeader('X-File-Size',file.fileSize);
    xhr.setRequestHeader('X-File-Type',file.fileType);

    //send the file
    xhr.send(file);
}
});

我的PHP     

$string = file_get_contents('php://input');
$path = '../../../media/SeagateHDD/Uploads/';

if ( !file_exists($path) ) {
  mkdir ($path, 0777);
 }

if (file_put_contents($path,$string)==true){
    echo 'File Uploaded Successfully';
}else{
    echo 'File Failed to Upload';
}

2 个答案:

答案 0 :(得分:1)

在$ path中,您提供目录路径。它应该提供文件路径。比如$ path =' ../../../ media / SeagateHDD / Uploads / something.txt';

file_put_contents

答案 1 :(得分:0)

您可以通过这种方式将相对路径转换为绝对路径:

$path = realpath('../../../media/SeagateHDD/Uploads/');

之后,您必须将文件名附加到要写入的位置,例如:

$path .= "text.txt";