PHP File Upload не может перемещать файлы из Temp - PullRequest
0 голосов
/ 19 октября 2018

Когда я пытаюсь использовать move_uploaded_file() в сценарии upload.php, он просто возвращает запрограммированную ошибку «Где-то произошла ошибка. Попробуйте еще раз или обратитесь к администратору.», Он не может переместить файл, который кажется.Кажется, я не могу отследить проблему, я убедился, что форма имеет все необходимые части, такие как enctype="multipart/form-data" и тому подобное, и все работает до тех пор, пока не попытается переместить файл из каталога tmp в каталог uploads.Есть идеи?

console.php

<form action="upload.php" method="POST" enctype="multipart/form-data" data-ajax="false">
  <ul data-role="listview" class="ui-grid-a">
    <li><label for="admin">Posting As:</label><input type="text" placeholder="<?php echo $_SESSION['user']; ?>" name="admin" disabled></li>
    <li><label for="title">Post Title:</label><input type="text" name="title"></li>
    <li><label for="body">Post Body:</label><textarea name="body" placeholder="Type your post here. Feel free to use HTML!"></textarea></li>
    <li><label for="myfile">Upload Post Image:</label><input type="file" accept="image/*" id="myfile" name="myfile"></li>
    <li><input type="submit" id="submitPost" name="submitPost" value="SUBMIT"></li>
  </ul>
</form>

upload.php

<?php
    $currentDir = getcwd();
    $uploadDirectory = "./uploads/";

    $errors = []; // Store all foreseen and unforseen errors here

    $fileExtensions = ['jpeg','jpg','png','gif','svg']; // Get all the file extensions

    $fileName = $_FILES['myfile']['name'];
    $fileSize = $_FILES['myfile']['size'];
    $fileTmpName  = $_FILES['myfile']['tmp_name'];
    $fileType = $_FILES['myfile']['type'];
    $fileExtension = strtolower(end(explode('.',$fileName)));

    $uploadPath = $currentDir . $uploadDirectory . basename($fileName); 

    if (isset($_POST['submitPost'])) {

        if (! in_array($fileExtension,$fileExtensions)) {
            $errors[] = "This file extension is not allowed. Please upload a JPEG, JPG, GIF or PNG file";
        }

        if ($fileSize > 2000000) {
            $errors[] = "This file is more than 2MB. Sorry, it has to be less than or equal to 2MB";
        }

        if (empty($errors)) {

            $didUpload = move_uploaded_file($fileTmpName, $uploadPath);

            if ($didUpload) {
                echo "The file " . basename($fileName) . " has been uploaded";
            } else {
                echo "An error occurred somewhere. Try again or contact the admin";
            }
        } else {
            foreach ($errors as $error) {
                echo "These are the errors" . "\n" . $error;
            }
        }
    }
?>

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Это может быть проблема с разрешением.Вы можете проверить, существует ли каталог и доступен ли для записи.

if (empty($errors)) {

  if(!is_dir($uploadPath)){
    mkdir($uploadPath, 0655);
  }

  if(!is_writable($upload_path)){
    chmod($upload_path, 0655); // Note 0655 is not a string but an int
  }

  // ... Rest of code ...
0 голосов
/ 19 октября 2018

Сначала проверьте, существует ли целевой путь, а затем проверьте, что целевой путь или папка имеют права на чтение и запись.

...