move_uploaded_file () не может загружать файлы на хостинг-сервере - PullRequest
0 голосов
/ 05 ноября 2019

На моем локальном сервере, с установленным apache, я могу нормально загружать файлы. Но когда я перемещаю все на хост-сервер (например, Altervista.org), файлы не загружаются.

Вот HTML-код:

<form id="fileupload" action="" method="POST">
  <input id="filesupload" type="file" multiple name="files" accept=".jpg" accessKey="PDF"/>
  <button id="MegaUpload" type="button" class="btn btn-primary start" onclick="conversion()">
</form>

Предполагается, что HTMLХорошо работает, я передаю все в AJAX, и я могу нормально подключиться к серверу. PHP-код также может принимать входной файл, но когда я пытаюсь выполнить загрузку, он не работает.

Вот код PHP:

 if (isset($_FILES['fileToUpload'])) {

    if (!isset($_COOKIE['users'])) {
       setcookie('users', md5(time()/1234), time() + (86400), "/");
    }

    if (!file_exists('files/uploads/' . $_COOKIE['users'] . '/')) {
      mkdir("files/uploads/" . $_COOKIE['users'], 0755);
      mkdir("files/uploads/" . $_COOKIE['users'] . "/tmp", 0755);
    }
    $target_dir = 'files/uploads/' . $_COOKIE['users'] . '\/tmp\/';
    for ($s=0; $s <= 10; $s++) {
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"][$s]);
       if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"][$s], 
  $target_file)) {
      //ok
       }
       else{
         //something wrong
       }
    }

 }

Еще раз: если предположить, что AJAX работает нормально (потому что я проверил, а сервер получает введенные файлы), почему на хостинге? на сервере он не работает?

Он прекрасно создает каталоги, как вы можете видеть, есть и права доступа к каталогам, и я проверил в FileZilla, установлен ли каждый .php файл в '0755'.

Если вы не можете понять, что происходит, я могу опубликовать часть AJAX, если хотите. Спасибо.

РЕДАКТИРОВАТЬ:

Я редактировал часть PHP, так что вы знаете, что это цикл.

Я добавил enctype='multipart/form-data', как высказал, но все равно ничего не получилось.

Я забыл поставить часть multiple и в HTML.

Вот часть AJAX, как вы и просили:

$("#filesupload").change(function(evnt) {

var fd = new FormData();
for (var s = 0; s < ins; s++) {
 fd.append("fileToUpload[]", document.getElementById('filesupload').files[s]);
}

$.ajax({
      url: 'upload.php', // point to server-side PHP script
      dataType: 'text',  // what to expect back from the PHP script, if anything
      cache: false,
      contentType: false,
      processData: false,
      data: fd,
      type: 'post',
      async: false,
      success: function(result){
        alert(result);
      },
      error: function(result) {
          alert(result);
      }
   });

}


Я тестировал с предупреждениями и эхом, и я знаю, что серверы получают файлы, но они не загружаются.

1 Ответ

0 голосов
/ 05 ноября 2019

Создайте файл

<?php phpinfo(); ?>

на хост-сервере и проверьте раздел file_uploads . Это должно быть на ON .

Если это OFF или FALSE , возможно, у вас нет прав на загрузку файла. Для этого вам следует обратиться к администратору хостинг-сервера. Если вы являетесь пользователем root, вы можете установить этот статус на ON , используя эту ссылку: здесь

...