2015-05-09 5 views
2

Я прочитал несколько сообщений SO относительно загрузки файлов и просто использовал их, чтобы понять, как это работает. Но, к сожалению, я не могу заставить его работать:Загрузка файла на локальный сервер apache

код

<html> 
    <head> 
    <script type="text/javascript" src="lib/jquery-2.1.3.min.js"></script> 
    <script type="text/javascript" src="lib/jquery-validate.min.js"></script> 
    </head> 

    <script> 
     $(
      function() 
      { 

       $(':button').click(function(){ 
        var formData = new FormData($('form')[0]); 
        $.ajax({ 
         url: 'upload.php', 
         xhr: function() { 
          var myXhr = $.ajaxSettings.xhr(); 
          return myXhr; 
         }, 
         success: function(s,e) 
         { 
          console.log('Completed'+" "+s+" "+e); 
         }, 
         error: function(xhr,status,error) 
         { 
          console.log('Error '+xhr+" "+status+" "+error); 
         }, 
         data: formData, 
         cache: false, 
         contentType: false, 
         processData: false 
        }); 
       }); 
    }) 
    </script>  
    <body> 
    <form enctype="multipart/form-data"> 
     <input name="file" type="file" /> 
     <input type="button" value="Upload" /> 
    </form> 
    </body> 

Это ошибка я получаю:

<b>Warning</b>: move_uploaded_file(/new 1.txt): failed to open stream: 
Permission denied in <b>C:\Users\gopir\Server\Apache24\htdocs\front- 
    page\upload.php</b> on line <b>6</b><br /><br /> 

<b>Warning</b>: move_uploaded_file(): Unable to move 'C:\Users\gopir 
\AppData\Local\Temp\php306E.tmp' to '/new 1.txt' in <b>C:\Users\gopir 
\Server\Apache24\htdocs\front-page\upload.php</b> on line <b>6</b><br /> 

There was an error uploading the file, please try again! 

Я понимаю, что новый 1.txt разрешение вызывает проблему.

Мои сомнения

Как пользователь знает об этих разрешениях, когда он/она загружает файл? Нужно ли им изменять разрешения, если они должны загружаться? Или я понял неправильно?

Я не понимаю о функциях xhr здесь. Я искал ее. Но я не понимаю этого и его необходимость здесь.

Прошу прояснить мои сомнения. Если этот вопрос не соответствует качеству SO, дайте мне знать. Я отредактирую/удалю его.

Благодаря

Забудь загрузить PHP

<?php 

    $folder = "/"; 
    $path = $folder . basename($_FILES['file']['name']); 

    if(move_uploaded_file($_FILES['file']['tmp_name'], $path)) { 
    echo "The file ". basename($_FILES['file']['name']). " has been uploaded"; 
    } else{ 
    echo "There was an error uploading the file, please try again!"; 
    } 
    ?> 
+1

Это сообщение об ошибке php и не имеет никакого отношения к вашему коду. Разделите код на стороне сервера (= php). Но чтобы угадать: ваш PHP-код пытается переместить загруженный файл в каталог, на который php не имеет доступа для записи. – tworabbits

+0

Речь идет не о разрешении пользователей. Кажется, php не имеет права на запись в папку назначения. Можно ли увидеть скрипт для upload.php? – Sisir

+0

@tworabbits Итак, это проблема разрешения папки, в которой я пытаюсь переместить загруженный файл. Я прав? –

ответ

0

Дайте PHP доступ на запись к каталогу вы хотите, чтобы переместить загруженный файл. Более подробная информация и различные подходы уже были сделаны here.

Чтобы настроить каталог загрузки верхнего уровня, пожалуйста, проверьте this article for what the proper permissions of an upload directory are.

Лично мне нравится this подход, который показывает, как проверить, существует ли какой-либо определенный каталог загрузки, а если нет, то как вы его создаете с помощью php. Преимущество заключается в том, что ваш httpd или php-процесс является владельцем созданного каталога автоматически (без применения ручных изменений в структуре каталогов на стороне сервера), и вы не ошибетесь, изменив разрешения на свой каталог загрузки до 0777, чтобы быстро получить и простое решение. Это хороший способ организовать дерево под вашим каталогом загрузки верхнего уровня.

Смежные вопросы