Решения для потенциального отсутствия разрешения на mkdir () из сценария установки php - PullRequest
2 голосов
/ 14 января 2010

Хорошо, у меня проблема. Мне нужно создать папку для хранения скомпилированных шаблонов в php. У меня есть скрипт установки, который пытается mkdir() соответствующий каталог (compiled_templates).

Неизменно возвращается это предупреждение.

Warning: mkdir() [function.mkdir]: Permission denied in /home/tchalvak/sites/quotesite/quotes/install.php on line 92

Выполнение изменения режима папки, в которой будет создана папка compiled_template, также при ошибках из-за той же проблемы с разрешениями.

Нет ли способа заверить, что вы можете создать то, что составляет папку хранилища через php? Вам нужно использовать стороннюю программу php, чтобы убедиться, что папка создана? Как другие разработчики php решают эту проблему?

Редактировать: это устанавливаемый скрипт, поэтому общая цель - позволить 10 различным случайным людям установить скрипт на свой сервер. Вот почему «убедиться, что php обладает всеми необходимыми правами на запись в каталог compiled_templates», к сожалению, непрактично, как ручной процесс.

Редактировать: Черт, такая же ошибка прав доступа при попытке создать временный каталог. Lame.

Ответы [ 4 ]

3 голосов
/ 14 января 2010

Если это временный каталог, создайте каталог в системном временном каталоге.

mkdir(sys_get_temp_dir() . 'example');

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

1 голос
/ 14 января 2010

Я согласен с указанием директории в tmp. Чтобы ответить на более общий вопрос о том, как справиться с этим, в скрипте установщика в целом ... Вы должны установить perms в корневом веб-каталоге перед запуском скрипта, а также убедиться, что они верны для любых каталогов в вашем пакете. С учетом сказанного я обычно стараюсь избегать веб-установщиков и вместо этого пишу установщики для CLI-версии php. Конечно, для этого нужен доступ по SSH на коробке, но для меня, по крайней мере, очень редко бывает, что я этого не делаю.

1 голос
/ 14 января 2010

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

Поскольку вы упомянули, что вам нужна временная папка, возможно, tmpfile(), tempnam() и sys_get_temp_dir() функции могут быть полезны для вас.

0 голосов
/ 14 января 2010

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

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

...