Intereting Posts
Есть ли лучший способ транспонировать массив 2D 2D? Регулярное выражение для соответствия пробелу или концу строки HTML-адрес электронной почты, отправленный через PHP, рассматриваемый как спам в Gmail Как можно изменить всю часть тела документа xml, загруженного в php через simplexml? Базы данных MySQL и файлов Изменение пароля пользователя в PHP и mySQL Ошибка: неопределенное свойство $ load Как проверить, действительно ли адрес электронной почты действителен или действителен с помощью PHP API Adwords Исключить Content_label на уровне кампании Как проверить, существует ли почтовый адрес в YMail, Gmail и т. Д.? Параметр Magento group в поле даты Как получить loginRedirect из нескольких мест входа в CakePHP? $ this-> set ('title', 'Title Name'); не работает в CakePHP 3.x Не найдено ни одного маршрута для «GET /» Symfony при входе в систему PHP отображает / загружает файлы каталога за пределами корня веб-сервера

Разрешение PHP mkdir Отказано в работе в Windows Server 2008 IIS 7 из-за атрибута только для чтения?

У меня возникла проблема с PHP-сайтом, работающим на IIS 7 в Windows Server 2008.

Существует одна строка кода, вызывающая mkdir, которая является ошибкой, и журнал ошибок читает:

"… доступ запрещен …"

Я исключил все, что связано с разрешениями на папку (я попробовал несколько групп: «Все», «Пользователи», «IUSR», «Сетевая служба» и т.д.).

Мне нужно знать, как работает mkdir, проверяет ли атрибут только для чтения родительскую папку?

Если это так, то это может быть причиной проблемы, так как все папки в Windows Server 2008 помечены как «Только для чтения», а флажок выделен серым цветом – Microsoft заявляет, что это «по дизайну», но я думаю, что это действительно «плохо» дизайн".

Пожалуйста помоги.

PS Строка кода, в которой ошибки можно найти здесь, https://github.com/LimeSurvey/LimeSurvey/blob/070d255ba381d7abcd231d7c9e0c7d11f5578c97/admin/templates.php#L1182 это строка 1182.

РЕШЕНИЕ:

  • В конце концов, это был вопрос с разрешениями!
  • Мы применяли разрешения к неправильной папке (прикладывали руку к лбу)
  • Существуют две папки «Шаблоны»: / Шаблоны и / Загрузки / Шаблоны
  • / Шаблон предназначен для шаблонов по умолчанию, тогда как / Uploads / Templates для пользовательских
  • Мы предоставили группе «Пользователи» полномочия r / w / execute / modify для папки / Uploads / Templates
  • Если раньше мы применяли разрешения для / Шаблоны
  • Чтобы отладить это, я использовал echo для вывода $target value

УРОКИ ВЫУЧЕНЫ:

  • Всегда читайте сообщение об ошибке – он сказал, что «разрешение отклонено», и я не поверил
  • Не считайте очевидным, чтобы быть правдой – / Шаблоны не были правильной папкой
  • Если код является ошибкой, тогда отлаживайте код и не пытайтесь угадать проблему
  • Отлаживайте код, используя простые методы, такие как вывод значений переменных – например, echo
  • Слушайте большинство – большинство людей здесь были правы, говоря, что ЭТО ПРОБЛЕМА ВОПРОСОВ!
  • У большинства ошибок есть простое исправление – не ищите чего-то сложного

Баунти, присвоенная @BOMEz из-за полезной цитаты из документации mkdir() которая указала, что я должен дважды подумать о разрешениях. @BOMEz также предоставил индивидуальный ответ и взаимодействовал со мной через комментарии, которые помогли.

  • В качестве теста (желательно в среде разработки) предоставить пользователю IIS полный доступ к родительской папке. Если это заставляет его работать, медленно начинайте отбирать привилегии, чтобы узнать, какие из них вам нужны.

  • Попробуйте изменить:

    if(mkdir($target,0777))

чтобы:

if(mkdir($target))

Windows игнорирует параметр режима. Может быть, какая-то странная ошибка, из-за которой она терпит неудачу.

Кроме того, для вашей переменной $ target можно попробовать заставить ее ссылаться на полный путь к Windows? Например, C:\Program Files\ IIS\...

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

EDIT: В комментариях к документации для mkdir () один комментатор упоминает, что вам также может потребоваться добавить права доступа для пользователя:

Если вы получаете ошибку с разрешением отказа, но уверены, что права и права собственности, где вы пытаетесь создать каталог, верны, еще раз проверьте:

Место, где вы пытаетесь создать каталог, должно иметь разрешение Execute для владельца, пытающегося его создать, независимо от того, является ли папка «Readable» или «Writable».

Это может быть очевидно для некоторых, но не для меня вначале. Надеюсь, это спасет вас от неприятностей, которые я пережил.

Поскольку вы не упомянули о какой-либо панели управления, я предполагаю, что у вас есть доступ к серверу как на физическом, так и на удаленном рабочем столе. Я также собираюсь предположить, что вы проверили ваши настройки php.ini.

При этом для некоторых из этих проблем разрешения существует проблема.

Вам нужно будет создать учетную запись администратора (и добавить ее в группу администраторов) для использования этого сайта или просто использовать учетные данные администратора.

  1. Откройте диспетчер IIS
  2. Развернуть сайты
  3. Выделите соответствующий сайт
  4. В правой части экрана нажмите «Основные настройки», появится диалоговое окно.
  5. Нажмите кнопку внизу, в которой говорится: «Подключиться как …»
  6. Выберите «Конкретный пользователь», а затем нажмите кнопку «Установить …»
  7. Введите имя пользователя и пароль вашей учетной записи или созданной учетной записи.
  8. Нажмите кнопку «Ok» 3 раза.

Это немного исправление кувалды, поскольку он предоставит полный неограниченный доступ к файловой системе из ваших скриптов.

Если вы создали нового пользователя и хотите поддерживать некоторый уровень безопасности сценария, вы можете попытаться вытащить пользователя из группы администраторов, а затем предоставить ему полные разрешения только на этом сайте:

  1. Выделить сайт
  2. Щелкните правой кнопкой мыши, отредактируйте разрешения
  3. Закладка
  4. Нажмите кнопку «Изменить»
  5. Нажмите кнопку «Добавить»
  6. Нажмите «Дополнительно», затем «Найти сейчас»,
  7. Дважды нажмите на пользователя, которого вы создали.
  8. Нажмите «ОК»
  9. Выделите своего пользователя, поставьте галочку в поле под разрешением, которое находится рядом с полным контролем
  10. дважды нажмите «ОК»

В ответ на запрос выберите, что вы хотите применить ко всем каталогам и файлам.

~

Если у вас все еще есть проблемы, есть хорошая вероятность, что ваша настройка php настроена неправильно или повреждена. (Возможно, включен безопасный режим?)

Ниже приводится объяснение разрешений.

  • Читать

    • В файле: это означает чтение содержимого файлов
    • В каталоге: это означает просмотр содержимого каталога, а именно, возможность использования ls или dir
  • Написать

    • В файле: это означает возможность редактировать содержимое файлов
    • В каталоге: это означает возможность создания / изменения содержимого каталога, а именно создание новых файлов или папок в этом каталоге.
  • казнить

    • В файле: это означает выполнение кода из файла (для скриптов / исполняемых файлов)
    • В каталоге: это означает, что он входит в каталог. Вы не можете войти в этот каталог без этого разрешения.

Итак, теперь, когда вы очищаете ответ на свою проблему (как вы правильно догадались), для создания нового каталога или записи новых файлов в каталог вам нужно разрешение на запись в этом каталоге. Поэтому для того, чтобы сделать папки в C:/your_folder/ вам нужно, write и execute разрешения в этой папке. (Да, вам тоже нужно выполнить выполнение, поскольку, по-видимому, для mkdir вам нужно сначала войти в папку.)

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

Итак, одна хорошая вещь, которую нужно попробовать, – это щелкнуть правой кнопкой мыши корневую папку вашего документа, перейти к свойствам и вкладке безопасности. Нажмите кнопку «Дополнительно», установите флажок «Заменить записи разрешений на всех дочерних объектах с показаниями, показанными здесь, которые относятся к дочерним объектам». Таким образом, вы можете, по крайней мере, убедиться, что все ваши разрешения установлены во всех подпапках и файлах.

У нас nerver возникли проблемы с атрибутом read only, хотя это проверено для всех наших папок. (выделено серым цветом / отмечено). Поэтому я сомневаюсь, что это ваши проблемы.