php mkdir () chmod и разрешения - PullRequest
       6

php mkdir () chmod и разрешения

8 голосов
/ 22 сентября 2010

Я использовал этот базовый скрипт:

$folderPath = "../path/to/$folder/";
mkdir("$folderPath");

Я создаю этот каталог, а затем загружаю в него фотографии.Я делал это в течение добрых 4-5 месяцев, и внезапно я получаю «ЗАПРЕЩЕНО» ошибки, когда я пытаюсь просмотреть содержимое папки через веб-браузер

Каталог создается так же, ифотографии все еще загружаются без проблем, но я не могу получить доступ к фотографиям

Я попытался переписать сценарий и использовать chmod для изменения разрешений, но мне совсем не повезло

Всестарые папки создавались с помощью: -w- rwx rx rx

, и я не могу восстановить это

Я попытался добавить строку chmod в мой скрипт:

$folderPath = "../sales/inventory/$folder/";
mkdir("$folderPath");
chmod("$folderPath", 0755);

но я не могу воссоздать те же разрешения, я пытаюсь понять, как работает chmod, но я не могу понять, как заставить эту основную функцию снова работать правильно

Ответы [ 3 ]

10 голосов
/ 22 сентября 2010

Попробуйте найти файл HTAccess, в котором будет указан параметр «Параметры-Индексы», так как он в основном используется для отображения содержимого папки в веб-браузере.Поиск файла необходимо выполнить следующим образом: -

  • В папке "root_folder/sales/inventory/$folder/", где "$folder" соответствует указанному в вашем коде.
  • Еслине найден, попробуйте в папке "root_folder / sales / inventory /".
  • Если не найден, попробуйте в папке" root_folder / sales /".
  • Если не найден, попробуйте впапка "root_folder /".

Когда вы получите код" Options -Indexes ", записанный в файле HTAccess, вы можете удалить / прокомментировать эту строку кода оттуда, или вы также можете написать другуюФайл HTAccess в вашей требуемой папке "$folder", где код будет "Параметры индексов".

Также на странице PHP логика должна быть такой: -

<?php
$folderPath = "../sales/inventory/$folder/";
mkdir("$folderPath");
chmod("$folderPath", 0755);

// Use of "copy()" / "move_uploaded_file()" function here, using some "$targetFile" variable.
chmod($targetFile, 0755);
?>

Это поможет вам, когда вы будете удалять / удалять загруженные файлы из папки «$ folder»,

Надеюсь, это поможет.

7 голосов
/ 13 июня 2013

Если ваша переменная $ folder содержит несколько подкаталогов, возможно, ваши родительские каталоги не синхронизированы с нужными разрешениями. Эта проблема возникла у меня на арендованном сервере Gentoo OVH.

Представьте, что $folder = '/store1/ally23/shelf42';, поэтому ваша окончательная структура каталогов ../sales/inventory/store1/ally23/shelf42, и вы хотите 0777 разрешений. Вы делаете:

mkdir($folderPath, 0777, true) || chmod($folderPath, 0777);

Только конечная директория shelf42 преобразуется в 0777. Промежуточные каталоги создаются с разрешениями по умолчанию (в моем случае 0744).

В PHP-команде chmod нет рекурсивного параметра, поэтому вы должны циклически переходить по промежуточным каталогам и индивидуально их изменять.

2 голосов
/ 18 сентября 2012

Если вы находитесь в общедоступной среде, вы можете также захотеть chown после загрузки, чтобы быть в безопасности. Особенно, если вы используете свой веб-сервер под пользователем, отличным от вашего виртуального хоста, у которого есть права доступа (например, «никто» против «mysite».) Это часто встречается на серверах cPanel, FWIW.

...