| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Сеть > синхронизация содержимого папок |
| Автор: Acer 23.1.2008, 02:59 |
| Есть локальная сеть (Windows). На одном из компов локальной сети стоит Apache. На нем есть директория, называемая Secondary На другом компе находится директория, которая называется Prime. Необходимо, чтобы файлы в директории Secondary были такие же, как в директории Prime(вычесляется CRC32 код). Алгоритм я уже написал. Одна проблема возникает. Как скопировать файлы по локальной сети с помощью PHP. Либо как это сделать через cmd... Подскажите пожалуйста. |
| Автор: Sardar 23.1.2008, 04:31 |
| Качественно и на долго: http://en.wikipedia.org/wiki/Rsync (только для винды тяжёлый Cygwin просит) fopen понимает \\server\share пути, т.е. расшарь директорию (виндовая сеть задумчива, может тормозить). Можно FTP поднять на Secondary и сливать файлы. Можно на прямую друг к другу сокеты открывать и файлы передавать (firewall локальный должен позволить) |
| Автор: Acer 23.1.2008, 10:45 |
| Sardar, можешь подсказать, как с помощью сокетов такое делать? То, есть кусочичек кода... Я читал про них, но ниче не понял |
| Автор: GeneralElectric 23.1.2008, 11:33 |
| Acer, ты уверен, что это надо делать "с помощью соектов"? Ты, собственно, имеешь представление о том, что такое сокет? |
| Автор: MoLeX 23.1.2008, 11:48 |
| ИМХО: на второй компьютер поставил бы ftp-сервер и в дальнейшем через фтп передавал файлы. |
| Автор: Sardar 23.1.2008, 12:47 |
В первом же http://nl2.php.net/manual/en/function.socket-create-listen.php пример. Идея проста:
|
| Автор: Acer 23.1.2008, 12:57 | ||||
Не уверен, что это надо делать с помощью сокетов. И имею очень маленькое представление о них Добавлено через 5 минут и 43 секунды
Спасибо. Щас попробую смастерить что-то. Просто первый раз имею дело с такими вещами |
| Автор: GeneralElectric 23.1.2008, 13:08 |
| Sardar, мне кажется, что вы друг друга немного не поняли =) Acer, по локальной сети файлы копируются в PHP точно так же, как и в файловой системе. Указываешь имена файлов - и в путь. Как минимум, тебе надо хотя бы попробовать это сделать. А с помощью сокетов что-то сделать можно только в том случае, если у тебя есть этот сокет. Т.е. порт, в котором сидит кто-то, кто понимает команды, которые ты собираешься ему отдать. На втором компе ничего такого, как я понимаю, нету. |
| Автор: Sardar 23.1.2008, 13:20 |
| 2GeneralElectric, вариант с сокетами был самый последний, как наименее гибкий (но быстрый в реализации В данном случае пишется и клиент, и сервер. В предыдущем посте подсказал как создать именно серверную сторону. Клиент думаю всем предельно ясен (fsockopen, fread/fwrite). |
| Автор: MoLeX 23.1.2008, 13:34 |
лишнии действия, не стоит заново изобретать велосипед если он уже есть. Вопрос к Acer'у: это единоразовая операция по копированию или она должна выполняться при появлении новых файлов в указанной папке? |
| Автор: Acer 23.1.2008, 18:53 | ||
При нажатии кнопки файлы начинают проверяться... Ну, с одной стороны единоразовая с другой нет |
| Автор: Acer 25.1.2008, 17:19 |
| Народ, ниче не получилось. :( Может что-то надо включить в httpd.conf? Я пробовал стандартными функциями пхп. fopen(), readdir(), copy() с указанием сетевых путей к расшаренным директориям.... |
| Автор: GeneralElectric 25.1.2008, 18:36 |
| что ты делал функцией fopen()? какая из этих трех функций не работает? И - самое главное - что значит "ниче не получилось"? не получилось написать эти функции без ошибок? Не получилось запустить PHP скрипт? Или браузер? Что именно не получилось? Как можно помочь человеку, у которого вся проблема укладывается в три слова: "я пробовал функцию readdir"? Как именно пробовал? Что хотел получить? что получил в итоге? Какие сообщения об ошибках выдавались? Добавлено через 2 минуты и 23 секунды может и надо. Но не тыкать же наугад! Если включать - то осмысленно, наверное? Проанализировав ошибки, и установив причину. такой настройки "чтобы работала функция readdir" в httpd.conf нету. |
| Автор: Acer 25.1.2008, 19:37 |
| fopen( '//10.55.1.129/Shared/text.txt', 'r' ); Warning: fopen(//10.55.1.129/Shared/text.txt) [function.fopen]: failed to open stream: Permission denied in D:\WWW\htdocs\pal\test.php on line 3 opendir( '//10.55.1.129/Shared' ); Warning: opendir(//10.55.1.129/Shared) [function.opendir]: failed to open dir: Permission denied in D:\WWW\htdocs\pal\test.php on line 7 Права есть. На чтение тем более. |
| Автор: GeneralElectric 25.1.2008, 19:42 |
| Файрволл? |
| Автор: Acer 25.1.2008, 20:23 |
| Стоит NOD. Не знаю, работает он как файерволл или нет... |
| Автор: GeneralElectric 25.1.2008, 20:25 |
| В виндоусе, обычно, есть файрволл. Плюс утверждение "права есть" требует серьёзной проверки. |
| Автор: Acer 25.1.2008, 20:44 | ||
| Перед тем, как писать про права доступа, я их проверил. Там было все разрешено. Но вендовский файрволл был включен... Выключил его. Теперь:
|
| Автор: GeneralElectric 25.1.2008, 21:20 |
| А с таким наклоном косой черты точно работает ? как директори сепаратор оно катит, но как идентификатор смб ресурса? |
| Автор: Acer 25.1.2008, 21:49 |
| GeneralElectric, не знаю, что такое смб ресурс, но с обратным(виндовским) наклоном все тоже самое... То же предупреждение |
| Автор: Acer 28.1.2008, 12:54 | ||
| Люди, всем спасибо за содействие. Я уже во всем разобрался. Видел еще одну темку, связанную с локальной сетью. Так вот. Для того, чтобы был доступ к сетевым ресурсам, нужно, чтобы Apache был запущен от имени того пользователя, у кого есть доступ к необходимому ресурсу в локальной сети. У меня работает... например:
--------------------------- Apache 2.2.6 PHP 5.2.5 |