PHP mkdir (): доступ запрещен - PullRequest
       22

PHP mkdir (): доступ запрещен

0 голосов
/ 07 ноября 2018

У меня есть простое приложение PHP / HTML / CSS, которое создает папку для новых зарегистрированных пользователей. Он отлично работал на моем тестовом сайте, и не так, что я готов к работе, я получаю ошибку «mkdir (): Permission denied». Насколько я знаю, все настройки одинаковы на обоих сайтах, а разрешение файла для корневой папки и файлов загрузки установлено на 755. Все остальное работает как положено, примите код ниже ...

if (count($errors) == 0) {
        $pword = md5($pword_1);//encrypt the pword before saving in the database
        $rand = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz";
        $rand = str_shuffle($rand);
        $folder = substr($rand, 0, 10);
        $regDate = date("Y-m-d");
        $token = 0;
        $tokenExp = 0;
        $curDir = getcwd();

        if(mkdir($curDir . "/uploads/" . $folder, 0755)){
            $query = "INSERT INTO users (uname, email, pword, folder, regDate, token, tokenExp) VALUES ('$uname', '$email', '$pword', '$folder', '$regDate', '$token', '$tokenExp')";
            mysqli_query($db, $query);
            $_SESSION['uname'] = $uname;
            $_SESSION['success'] = "You are now logged in";
            header('location: index.php');
        }else{
            array_push($errors, "An error occurred creating your account!!!");
        }
    }

Насколько я могу судить, что я не могу создать папку пользователя, я не могу загружать файлы. Однако при устранении неполадок, когда я вручную добавляю папку на сервер, я все равно получаю ошибку «путь не найден». Вот код загрузки файла ...

if(isset($_POST['uploads'])){
    $uname = mysqli_real_escape_string($db, $_POST['uname']);
    $name = $_FILES['file']['name'];
    $size = $_FILES['file']['size'];
    $type = $_FILES['file']['type'];
    $tmp_name = $_FILES['file']['tmp_name'];
    $extension = substr($name, strpos($name, '.') + 1);
    $max_size = 2500000; //bytes

    if(empty($name)) {
        echo "<p class='error'>Please Select a File</p>";
    }else{
        if($extension == "jpg" || $extension == "jpeg" || $extension == "gif" || $extension == "tif" || $extension == "png" || $extension == "pdf"){
            if($extension == $size<=$max_size){
                $getFold = "SELECT * FROM users WHERE uname='$uname'";
                $getFold = mysqli_query($db, $getFold);
                while($for = mysqli_fetch_assoc($getFold)){
                    $folder = $for['folder'];
                }
                $location = "uploads/" . $folder . "/";
                if(move_uploaded_file($tmp_name, $location . $name)){
                    $query = "INSERT INTO `upload` (name, size, type, location, uname, folder) VALUES ('$name', '$size', '$type', '$location', '$uname', '$folder')";
                    $result = mysqli_query($db, $query);
                    if($result){
                        echo "<p class='success'>File has been uploaded successfully!!!</p>";
                    }else{
                        echo "<p class='error'>Failed to upload file information to database!!! Filename already exist!</p>";
                    }               
                }else{
                    echo "<p class='error'>Failed to Upload File</p>";
                }
            }else{
                echo "<p class='error'>File size should be 3MB or less</p>";
            }
        }else{
            echo "<p class='error'>The selected file is not a JPG, JPEG, GIF, TIF, PNG, or PDF file type!!!</p>";
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Вам необходимо изменить владельца папки, в которой вы пытаетесь создать подпапки для своих пользователей, на:

  1. apache - для сервера CentOS
  2. www-data - для сервера Ubuntu

Вы можете сделать это с помощью следующей команды

sudo chown -R www-data /folder

Флаг -R означает, что он рекурсивный, поэтому процесс apache / httpd, выполняющий php, будет владеть всеми вложенными папками, которые вы, возможно, также создали.

Для получения дополнительной информации об этой команде посмотрите на SO post

0 голосов
/ 08 марта 2019

Спасибо за вашу помощь, я последовал вашему совету, и оказалось, что мой хост-провайдер запретил функционирование в неясном «установочном» месте, доступном через cPanel. Ранее (т. Е. На моем старом тестовом сервере / учетной записи) учетные записи настраивались автоматически, чтобы разрешить доступ для чтения / записи, более новые учетные записи настраивались как доступные только для чтения и требовали, чтобы владелец учетной записи сделал переключение с помощью этой настройки.

0 голосов
/ 07 ноября 2018

Вы создаете каталог с разрешениями 0755, что означает полный доступ для владельца и только чтение + выполнение для остальных. Измените его на 0777 или 0766; полный доступ кому угодно или полный доступ владельцу и чтение + запись любому.
Это также относится к родительской папке.

...