PHP не может перемещать загруженные файлы, несмотря на наличие полных разрешений? - PullRequest
1 голос
/ 24 апреля 2019

Я пишу блог-подобный веб-сайт с такими функциями, как публикация и корректное отображение сообщений. В настоящее время я пытаюсь добавить опцию для включения изображения в сообщения, загружая его в папку в папке моего проекта с помощью функции PHP move_uploaded_file.

Я предоставил пользователю Apache _www, права на чтение, запись и выполнение с помощью chmod. Я также гарантировал, что у него есть разрешения на запись, чтение и выполнение в родительских каталогах, ведущих к самой папке загрузки.

Я даже пытался передать полное владение папкой проекта указанному пользователю, используя chown. Тем не менее, я получаю предупреждение PHP, которое говорит:

Предупреждение PHP: файл move_uploaded_file (/ Users / MyUser / Desktop / Project / assets / php /../ uploads / 2.jpg): не удалось открыть поток: отказано в доступе в / Users / MyUser / Desktop / Project / assets / PHP / upload.php

PHP

$target_dir = __DIR__ . "/../uploads/";
var_dump($target_dir);
$file = basename($_FILES["file"]["name"]);
$target_file = $target_dir . $file;
$allowed_extensions = array("jpeg", "jpg", "png");
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));


if(isset($_POST["upload"])) {
  echo $target_file;

  $stmt = $pdo->prepare("INSERT INTO images (imgTitle, imgLocation) VALUES (:imgTitle, :imgLocation)");
  $stmt->execute(array(
    ":imgTitle" => basename($_FILES["file"]["name"]),
    ":imgLocation" => $target_file
  ));

  if ($imageFileType = in_array($imageFileType, $allowed_extensions)) {
    move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
  }
}

HTML

<form action="" method="post" enctype="multipart/form-data">
    Select Image File to Upload:
    <p><input type="file" name="file"></p>
    <input type="submit" name="upload" value="Upload">
</form>

Почему это происходит и как я могу решить эту проблему, не меняя пользователя _www на моего пользователя?

1 Ответ

0 голосов
/ 24 апреля 2019

После некоторого устранения неполадок я, наконец, выяснил причину ошибки.Собираюсь ответить на свой вопрос в качестве заметки и будущей ссылки на тех, кто может закончить делать ту же ошибку, что и я.

Пользователь MacOS Apache НЕ является пользователем Apache, который использует MAMP.

Пользователь Apache в MAMP отличается от пользователя, имеющего встроенный macOS, то есть _www.НЕ используйте _www, если вы используете MAMP, а перейдите по адресу / Applications / MAMP / conf / apache / httpd.conf , здесь находятся сведения о пользователе Apache MAMP для пользователя Apache.

Скорее всего, пользователь будет именем пользователя, которое нельзя изменить.Единственный параметр, который вы можете изменить, - это группа этого пользователя Apache.Я предлагаю вам использовать это для создания localhost, но не забудьте сменить данные нового пользователя Apache, когда вы переключаетесь на веб-хост, отличный от localhost.

Я надеюсь, что моя ошибка может спасти васчасы путаницы и некоторой степени разочарования.Веселого кодирования!

...