вторник, 29 июня 2010 г.

Пользовательские функции в объектно-ориентированном PHP

В PHP есть множество функций, которые позволяют в качестве параметра использовать имя так называемой user defined function — функция, написанная для собственных нужд. Все было хорошо, пока не перешел на ООП.

Как указать в ООП имя собственной функции? Очень просто.

Допустим, мы хотим использовать функцию array_walk(). В процедурном стиле мы бы написали следующее:

<?php
array_walk($array_values, 'myFunction');
?>

В ООП эта конструкция не сработает, но есть выход:

<?php
array_walk($array_values, array($this, 'myFunction'));
?>

Указав массив array($this, 'myFunction') мы указываем, что нужно использовать метод "myFunction" из текущего класса.

P.S. По ходу работы пришлось вспомнить использование этой конструкции. Благо, давным-давно интересовался этим вопросом и результат оказался в песочнице.

Ярлыки: , ,

пятница, 25 июня 2010 г.

Samba - запретить удаление файлов

Столкнулся с задачей настройки Samba таким образом, чтобы пользователи могли записывать файлы, но удалять не могли. Реализация под linux.

Припустим, у нас есть директория-шара. В smb.conf прописано:

[Files]
comment = Files
path = /home/samba/Files
valid users = +UserGroup
read list = +UserGroup
write list = +UserGroup

inherit permissions = yes
browseable = yes
guest ok = no

create mask = 664
directory mask = 775

Нам интересны две последние строчки. Create mask означает маску для создаваемых файлов, directory mask — для директорий.

После этого нужно перезагрузить сервис самбы:

$ service smb restart

Далее нужно поставить бит стойкости, который не даст удалить файлы созданные другими пользователями. Свои же удаляться без проблем. Также в чужих директориях можно будет создавать/удалять свои и только свои.

$ chmod -R 1775 Files/

Ярлыки: , , , , ,