доступ к ресурсам локальной сети

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
leonidps
Сообщения: 268
Зарегистрирован: 2011.01.18, 19:40
Откуда: Псков

доступ к ресурсам локальной сети

Сообщение leonidps »

Подскажите как получить доступ к ресурсам локальной сети. Например.

Код: Выделить всё

$filename='\\disprezerv\D\LKDSDrv\MPultPro\MPultPro.Xml';
$doc = new DOMDocument;
$doc->load($filename);
выдает ошибку
DOMDocument::load(): I/O warning : failed to load external entity "/mnt/mywww/slift0/\disprezerv\D\LKDSDrv\MPultPro\MPultPro.Xml"
Правила существуют не только для того, чтобы их нарушать.
Аватара пользователя
solo
Сообщения: 320
Зарегистрирован: 2013.03.08, 19:59
Откуда: Ukraine, VINNITSA

Re: доступ к ресурсам локальной сети

Сообщение solo »

Посмотрите на путь "/mnt/mywww/slift0/\disprezerv\D\LKDSDrv\MPultPro\MPultPro.Xml"
Аватара пользователя
leonidps
Сообщения: 268
Зарегистрирован: 2011.01.18, 19:40
Откуда: Псков

Re: доступ к ресурсам локальной сети

Сообщение leonidps »

Посмотрел на путь. Получается: basePath+$filename
А как правильно? Мб сначала надо примонтировать расшаренный ресурс в корень(../protected/data)?
Правила существуют не только для того, чтобы их нарушать.
Аватара пользователя
solo
Сообщения: 320
Зарегистрирован: 2013.03.08, 19:59
Откуда: Ukraine, VINNITSA

Re: доступ к ресурсам локальной сети

Сообщение solo »

slift0/\disprezerv это что такое ?
Аватара пользователя
leonidps
Сообщения: 268
Зарегистрирован: 2011.01.18, 19:40
Откуда: Псков

Re: доступ к ресурсам локальной сети

Сообщение leonidps »

путь можно разложить так:
/mnt/mywww/slift0/
- это корень проекта, добавлен фреймворком(yii->app->basePath)
\\disprezerv\D\LKDSDrv\MPultPro\MPultPro.Xml
- ($filename) это путь к xml-файлу на удаленной windows-машине локальной сети. Необходимо прочитать файл, скомпоновать данные, добавить в таблицу и использовать в модели. Данные в файле генерируются внешней программой. Скрипт пытаюсь запустить при инициализации класса модели. Хотя, наверное, это не совсем логично.
Правила существуют не только для того, чтобы их нарушать.
Аватара пользователя
leonidps
Сообщения: 268
Зарегистрирован: 2011.01.18, 19:40
Откуда: Псков

Re: доступ к ресурсам локальной сети

Сообщение leonidps »

Пока нашел такое решение.
1. Создаю в корне директорию "shared" и монтирую к ней удаленный ресурс в корень проекта(в protected не рискнул)
например таким скриптом

Код: Выделить всё

#! /bin/sh
#===Скрипт: Монтирование каталогов импорта===

SYNC_LOG="/mnt/mylog/import_mpult.log"
# Монтирование файла записи логов
[ -e "$SYNC_LOG" ] || touch $SYNC_LOG

SHARE_S="/mnt/mywww/slift0/shared"
[ -e "$SHARE_S" ] || mkdir -p $SHARE_S

if mount -t cifs -o rw,iocharset=utf8,user=,pass= //192.168.1.21/MPultPro $SHARE_S
then
  echo $(date +%Y.%m.%d' '%T)' mount success://192.168.1.20/EXPORT->'$SHARE_S >> $SYNC_LOG
  echo $(date +%Y.%m.%d' '%T)' BEGIN import files FROM '$SHARE_S >> $SYNC_LOG
else
  echo $(date +%Y/%m/%d' '%T)' mount error: '$SHARE_S >> $SYNC_LOG
fi

#umount -a -t cifs

exit 0
2. Далее просто

Код: Выделить всё

$filename=Yii::getPathOfAlias('webroot').'/shared/MPultPro.Xml';
$doc = new DOMDocument;
$doc->load($filename);
$rows=$doc->getElementsByTagName('STREET');
foreach ($rows as $street) {
    $houses=$street->getElementsByTagName('HOME');
    foreach ($houses as $house) {
        $lifts=$house->getElementsByTagName('LIFT');
        foreach ($lifts as $lift) {
            $text = $street->getAttribute('Name');
            $text .= '-'.$house->getAttribute('Name');
            $text .= '-'.$lift->getAttribute('Name');
            $text .= ';'.$lift->getAttribute('ID');
            echo '</br>'.$text;
        }
    }
}
Тему можно и закрыть, Но!
не понимаю все-таки как скрипт запускать из проекта, а такая надобность имеется, поскольку примонтированная шара периодически отваливается
Последний раз редактировалось leonidps 2013.12.10, 07:23, всего редактировалось 1 раз.
Правила существуют не только для того, чтобы их нарушать.
Аватара пользователя
solo
Сообщения: 320
Зарегистрирован: 2013.03.08, 19:59
Откуда: Ukraine, VINNITSA

Re: доступ к ресурсам локальной сети

Сообщение solo »

chmod +x и exec
FTP есть в конце концов.
Аватара пользователя
leonidps
Сообщения: 268
Зарегистрирован: 2011.01.18, 19:40
Откуда: Псков

Re: доступ к ресурсам локальной сети

Сообщение leonidps »

Попробовал.
Не получается запускать скрипт из проекта. Подробно что делаю.
1. В корне создаю директорию "shared", далее права доступа

Код: Выделить всё

chmod 0755 ./shared
chown www-data:www-data ./shared
2. Файл скрипта "import.sh"

Код: Выделить всё

#! /bin/sh
#===Скрипт: Монтирование каталогов импорта===

SYNC_LOG="/mnt/mylog/import_mpult.log"
# Монтирование файла записи логов
[ -e "$SYNC_LOG" ] || touch $SYNC_LOG

SHARE_S="/mnt/mywww/slift0/shared"
[ -e "$SHARE_S" ] || mkdir -p $SHARE_S

if mount -t cifs -o rw,iocharset=utf8,user=,pass= //192.168.1.21/MPultPro $SHARE_S
then
  echo $(date +%Y.%m.%d' '%T)' mount success://192.168.1.20/EXPORT->'$SHARE_S #>> $SYNC_LOG
  echo $(date +%Y.%m.%d' '%T)' BEGIN import files FROM '$SHARE_S #>> $SYNC_LOG
else
  echo $(date +%Y/%m/%d' '%T)' mount error: '$SHARE_S #>> $SYNC_LOG
fi

#umount -a -t cifs

exit 0
кладу в корень, права доступа и владелец делаю также.
3. Далее в проекте

Код: Выделить всё

$filename=Yii::getPathOfAlias('webroot').'/import.sh';
if (file_exists($filename)) {
    $conn=exec($filename,$output);
    var_dump($output);
} 
Вывод:
array(1) { [0]=> string(57) "2013/12/10 10:38:09 mount error: /mnt/mywww/slift0/shared" }
Что не так?
А вот из терминала под рутом скрипт отрабатывает без проблем. :twisted:
Правила существуют не только для того, чтобы их нарушать.
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: доступ к ресурсам локальной сети

Сообщение vladikamira »

file_get_contents() в помощь. :roll:
Аватара пользователя
solo
Сообщения: 320
Зарегистрирован: 2013.03.08, 19:59
Откуда: Ukraine, VINNITSA

Re: доступ к ресурсам локальной сети

Сообщение solo »

Пересмотрите везде права.
Но я бы поставил апач и юзал бы file_get_contents
Аватара пользователя
leonidps
Сообщения: 268
Зарегистрирован: 2011.01.18, 19:40
Откуда: Псков

Re: доступ к ресурсам локальной сети

Сообщение leonidps »

не хотелось бы на клиентскую виндузятскую машину ставить апач или фтп. пробую использовать уже существующие сетевые протоколы
Правила существуют не только для того, чтобы их нарушать.
Аватара пользователя
solo
Сообщения: 320
Зарегистрирован: 2013.03.08, 19:59
Откуда: Ukraine, VINNITSA

Re: доступ к ресурсам локальной сети

Сообщение solo »

Преимущество Apache в этом деле будет велико. Настройка займет 1-2мин. Поставить на доступ файл или папку + ограничить доступ либо по паролю либо по ip.
Например в httpd.conf прописать

Код: Выделить всё

DocumentRoot /ваш_путь/
<Directory /ваш_путь>
order deny, allow
deny from all
allow from ip_адрес_машины_которой_разрешен_доступ
</Directory>
И ваши волосы будут мягкими и шелковистыми
Аватара пользователя
solo
Сообщения: 320
Зарегистрирован: 2013.03.08, 19:59
Откуда: Ukraine, VINNITSA

Re: доступ к ресурсам локальной сети

Сообщение solo »

Я думаю это будет намного лучше чем пихать в свой код exec
Аватара пользователя
leonidps
Сообщения: 268
Зарегистрирован: 2011.01.18, 19:40
Откуда: Псков

Re: доступ к ресурсам локальной сети

Сообщение leonidps »

Не получается из проекта

Код: Выделить всё

exec('mount') 
- отказывается выполнять
в то же время другие команды, например

Код: Выделить всё

exec('ls -l') 
выполняются.
Наверное, для монтирования - только рут.
Позже покопаюсь в
man mount
Воспользусь советом, буду ставить веб-сервер на клиентскую машину. Только не апач, что-нибудь полегче
Правила существуют не только для того, чтобы их нарушать.
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: доступ к ресурсам локальной сети

Сообщение lancedevnull »

system('mount -t ext4 /dev/sda7 /mnt/sda7'); будет запущен от www юзера, как правило www-data, а маунт надо запускать от рут, можно закостылить suid - # chmod +s /usr/bin/mount а лучше заюзать уже костыльный pmount
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: доступ к ресурсам локальной сети

Сообщение dmg »

почитайте про sudo или лучше gvfs-mount
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: доступ к ресурсам локальной сети

Сообщение lancedevnull »

это же для гнома))) какая де нафик на сервере? а судо просит ввода пароля ;)
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: доступ к ресурсам локальной сети

Сообщение anton44eg »

значит плохо про судо читали )
Ответить