Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переписать пару строк PHP в Perl 
:(
    Опции темы
nIkTo
Дата 3.1.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Здраствуйте.
Помогите переписать эти строчки на PHP в Perl
Код
<?
$dir = '/afs/***/***/';
echo view_perms($dir);
function view_perms($o) {
 if (!is_readable($o)) {return 0;}
 elseif (!is_writable($o)) {return 0;}
 else {return 1;}
}
?>


Что то типа этого, не верно :
Код
#!/usr/bin/perl -w
my $dir = '/afs/***/***/';
print view_perms($dir);
sub view_perms {
    my $path = shift;
    if (-r $path) {
        if (-w $path) {
            return 1;
        }
    }
    return 0;
}


Катологи находятся в AFS (глобальная сетевая файловая система)

Это сообщение отредактировал(а) nIkTo - 3.1.2009, 20:16
PM   Вверх
gcc
Дата 3.1.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Код

#!/usr/bin/perl

PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 4.1.2009, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



эх.. пишем на перл
Код

#!/usr/bin/perl -w
my $dir = '/afs/***/***/';
print view_perms($dir);
sub view_perms {
    return -r $_[0] && -w $_[0];
}



Это сообщение отредактировал(а) sir_nuf_nuf - 4.1.2009, 02:24


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
tolkien
Дата 4.1.2009, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Цитата(sir_nuf_nuf @ 4.1.2009,  02:23)
эх.. пишем на перл
Код

#!/usr/bin/perl -w
my $dir = '/afs/***/***/';
print view_perms($dir);
sub view_perms {
    return -r $_[0] && -w $_[0];
}

ваш вариант ни чем не отличается от

Код

#!/usr/bin/perl -w
my $dir = '/afs/***/***/';
print view_perms($dir);
sub view_perms {
    my $path = shift;
    if (-r $path) {
        if (-w $path) {
            return 1;
        }
    }
    return 0;
}


И как написал автора этот вариант работает не так как код на php. 
PM MAIL   Вверх
nitr
Дата 7.1.2009, 04:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



если дословно:
Код

#!/usr/bin/perl -w

my $dir = '/afs/***/***/';
print view_perms($dir);
sub view_perms {
    my $path = shift;
    unless (-r $path or -w $path) {
        return 0;
    }
    return 1;
}



--------------------
PM   Вверх
nIkTo
Дата 8.1.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



nitr, те же яйца, только в профиль.
PM   Вверх
nitr
Дата 9.1.2009, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



nIkTo, я проверял данный скрипт на *nix'овых (4-х) машинах - всё работает на 100%.
Вы скажите, что вы вообще хотели от вашего скрипта?

В данном случае: проверяется есть ли возможность читать папку и писать в папку. Грубо атрибут -rw.

Для этого сделал так:
sudo mkdir /home/1
sudo chmod 711 /home/1

perl test.pl /home/1
Код

#!/usr/bin/perl -w

print view_perms($ARGV[0]), "\n";

sub view_perms {
    my $path = shift;
    unless (-r $path or -w $path) {
        return 0;
    }
    return 1;
}

Цитата

[nitr@SamsungQ210 ~]$ perl test.pl /home/1
0
[nitr@SamsungQ210 ~]$ chmod 755 /home/1
[nitr@SamsungQ210 ~]$ perl test.pl /home/1
1
[nitr@SamsungQ210 ~]$ 



--------------------
PM   Вверх
nIkTo
Дата 9.1.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



nitr, Все верно, в обычной файловой системе это работает, поэтому я и уточнил что используется AFS.
Приведённый мной php скрипт правильно определяет права на возможность записи в AFS, а perl скрипт нет.
Возможно это связано с особенностью устройства функций is_readable и is_writable, я не вкурсе.


Немного о правах доступа в AFS :

Цитата

Пользователю также необходимо иметь представление о том, что в системе AFS специфическим образом определены права и группы доступа к файлам и каталогам. Права доступа: r — чтение, w — запись, l — право просмотра списка файлов в каталоге, i — создание новых файлов и подкаталогов, d — удаление файлов и подкаталогов, k — блокирование файлов, a — полномочия изменять права и группы доступа к файлу или каталогу. Наиболее часто используются следующие три группы доступа: это любые (отовсюду, где используется AFS) AFS-пользователи (system:anyuser), любые пользователи данной организации (system:authuser) и системные администраторы данной организации (system:administartors).

Вся информация по правам и группам доступа к файлам и каталогам хранится в специальных таблицах AFS, называемых ACL (Access Control List), где определены права доступа к файлам и каталогам. Ознакомиться с содержанием этих таблиц, т.е. получить информацию по состоянию доступа к файлу или каталогу, можно с помощью команды 

fs listacl <file_name> или <dir_name>


Это сообщение отредактировал(а) nIkTo - 9.1.2009, 14:43
PM   Вверх
nitr
Дата 9.1.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



nIkTo, извиняюсь, не видел я про AFS. В доках Perl не нашел упоминанйи про эту FS.
Если не работают -r, -R, -w, -W (попробуйте с -R -W хотя это в другую степь, но всякое может ;) ), то можно попробовать через функцию stat + модули. Но это более громоздко.

Что выдает такой скрипт:
Код
#!/usr/bin/perl -w

printf "%04o\n", (stat $ARGV[0])[2] & 07777;

perl test.pl /ваш_путь/

Надо поискать пхпшные функции в исходном виде, не верится мне, что они так сильно отличаются, тут что-то другое.



--------------------
PM   Вверх
Шуранов
Дата 10.1.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.3.2007
Где: Харьков

Репутация: 1
Всего: 1



С AFS сталкиваться не приходилось, возможно модули из этого набора пригодятся: AFS?
PM MAIL WWW ICQ   Вверх
nitr
Дата 10.1.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Шуранов, я тоже думал предложить модули, но представьте какой скрипт получается. Пока хочу увидеть реализацию пхп-шных функций smile


--------------------
PM   Вверх
ginnie
Дата 11.1.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



nIkTo, попробуйте добавить

Код

use filetest 'access';


Добавлено @ 19:49
Дело в том, что для ускорения по-умолчанию используется упрощенный метод проверки, без использования ACL. Для активации нормального метода с вызово системных функций используется прагма filetest, которая задействует функцию POSIX::access().

Это сообщение отредактировал(а) ginnie - 11.1.2009, 19:50


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
nIkTo
Дата 17.1.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



ginnie, благодарю, действительно решением было использовать :
Код

use filetest 'access';


Спасибо!  smile 

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1255 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.