0

I have form that allow me to submit text + number of files. the form submitted with AJAX.

Because it's a number of files my upload function give me error:

Warning: move_uploaded_file(images/usersFiles/14367317720-101.JPG) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files (x86)\wamp\www\new-site\func\global.func.php on line 134

line 134 is:

if (move_uploaded_file($files['file']['tmp_name'][$i], USER_FILES.$files['file']['name'][$i]))

files' var should be array (because I can load number of files).

How can I fix the error?

BTW - when function "upload_files" got only 1 file, and the "foreach" was removed, I succeed to upload the file...

define("USER_FILES", "images/usersFiles/");

HTML:

<form class="form-horizontal" action='#' method="post" id="addCommentForm" enctype="multipart/form-data">

    <textarea class="form-control" name="post[text]"></textarea>
    <input type='file' name='file[]' class='multi form-control' maxlength='1' accept='gif|jpg|png|bmp' id="files"/>
    <a class="btn btn-primary" id="submit">submit</a>

</form>

JS:

$(function() {
    $("#submit").click(function() {

        var file_data = $('#files').prop('files')[0];   
        var form_data = new FormData();                  
        form_data.append('file[]', file_data);
        var files_data =  form_data;

        var act = 'add';
        form_data.append('act', act);
        form_data.append('post[text]',  $("#addCommentForm").find("textarea").val());   

        $.ajax({
               type: "POST",
               url: "ajax/addPost.php",

               dataType: 'text',  
               cache: false,
               contentType: false,
               processData: false,  

               data: form_data,
               success: function(data)
               {
                $('#commentsBox').html(data);
                $("#addCommentForm")[0].reset(); 
               }

             });

        return false; // avoid to execute the actual submit of the form.
    });
});

server:

function upload_files ($ownerID, $msg, $files, $type)
{

    $dateLX = get_current_linuxTime();

    ///////// Upload files //////////////
    if(!empty($files))
    {

        foreach($files['file']['name'] as $i => $fileName)
        {
            $fileSurffix = pathinfo ($_FILES['file']['name'][$i]);
            $fileSurffix = $fileSurffix['extension'];

            $files['file']['name'][$i] = str_replace(' ','',$files['file']['name'][$i]);
            $files['file']['name'][$i] = $dateLX.$i."-".$ownerID.".".$fileSurffix;
            $fileName = $files['file']['name'][$i];

            if (move_uploaded_file($files['file']['tmp_name'][$i], USER_FILES.$files['file']['name'][$i]))
            {
                $uploadFilesQuery = "INSERT INTO `files` (ownerID, name, type)
                                        VALUES('$ownerID', '$fileName', '$type')";

                $res = mysql_query($uploadFilesQuery);
                if (!$res)
                    $msg['error']['uploadFile'] = "error <br />".mysql_error();
            }
            elseif ($files['file']['error'][$i] != 4)  
                $msg['error']['uploadFile'] = "ERROR ";


        }   
    }
    return ($msg);  

}
user3642988
  • 243
  • 2
  • 8
  • The folder `images/usersFiles/` doesn't exist. Make sure it is the right path. Try to use an absolute path if you are unsure. Also make sure the path exists. PHP will not create a directory for you when you call move_uploaded_file. – GolezTrol Jul 13 '15 at 17:15
  • Why when I use the full path it works? define("USER_FILES", "C:/Program Files (x86)/wamp/www/site-new/images/usersFiles/"); @GolezTrol – user3642988 Jul 13 '15 at 17:19
  • possible duplicate of [move\_uploaded\_file() failed to open stream](http://stackoverflow.com/questions/14596832/move-uploaded-file-failed-to-open-stream) – Shaiful Islam Jul 13 '15 at 23:29

0 Answers0