В этих примерах показаны только принципы программирования в php при работе с chmod. В силу особенностей языка php права доступа в нем записывается только в числовом формате, поэтому рекомендуем символьный формат chmod предварять символом 0.
Читатели должны осознавать тот факт, что при программировании они должны использовать функции для определения наличия проверяемого файла, наличия переменных, приведения типов и пр.
Изменение chmod
chmod можно выставлять средствами языка php. Это можно делать только на уровне файловой системы сервера; изменение chmod для удаленных файлов не допускается.
Функция chmod() пытается изменить права доступа для filename на указанные в параметре mode. В случае успешного завершения функция возвращает true, в случае ошибки функция возвращает false. Поскольку числовой формат записи chmod является восьмеричным числом значение параметра mode рекомендуется предварять симоволом 0.
В указанном примере первая функция установит chmod 644 для файла /contacts/index.php. Вторая функция возвратит false, так как нельзя указавать в качестве параметра удаленные файлы. Третья функция установит chmod 467 для каталога /contacts/; во избежание недоразумений лучше всегда записывать в качестве второго параметра восьмеричное число, предваряя его симоволом 0. Четвертая фунция возвратит false, так как в качестве второго параметра обятельно надо указывать числовое значение.
Определение chmod
Для определения chmod воспользуемся функцией fileperms().
Функция fileperms() возвращает информацию о filename либо false в случае ошибки. Заметим, что получение информации об удаленных файлах не допускается.
Функция fileperms() возвращает больше информации, чем нам требуется (ее мы не будем затрагивать). Нам требуется определить последние 9 бит. Для этого воспользуемся логическим оператором & и функцией decoct().
Обращаем внимание, что функция decoct() возвращает переменную строкового типа (в которой записаны права доступа в числовом формате), поэтому при использовании полученных результатов в функции chmod() необходимо либо использовать функцию octdec(), либо не использовать функцию decoct(). Приведенные ниже два примера эквивалентны.
В приведенном выше примере в переменной $perms записана строка, состоящая из трех символов. Данный способ необходимо использовать в случаях, когда необходимо получить chmod в числовом формате, а затем использовать переменную для изменения chmod.
Данный пример предпочтительнее предыдущему, его необходимо использовать в случаях, когда переменная $perms используется исключительно для изменения прав доступа без промежуточных действий.