Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kopiowanie plików
Forum PHP.pl > Forum > PHP
ziola
Witam,

w php jestem świeżutki, więc mam nadzieję, że pomożecie lub poradzicie inne rozwiązanie.

Potrzebuję napisać skrypt, który będzie kopiował pliki pomiędzy lokalizacjami sieciowymi. Tzn. mam formularz w którym użytkownik podaję ścieżkę do katalogu który trzeba skopiować i ścieżkę gdzie ma być to skopiowane. Potem w skrypcie próbuje to zrobić przez wywołanie:
  1. <?php
  2. system(' xcopy \" '.$_POST[from].' \" \" '.$_POST[to]. '\" /e /i ');
  3. ?>

ale niestety to nie działa, ale wywołanie bezpośrednio xcopy z dowolnego komputera w domenie działa, więc samo polecenie jest prawidłowe.

Czy to jest w ogóle wykonalne w php, żeby kopiować pliki pomiędzy 2 komputerami(a nie od klienta na serwer przez ftp)? I koniecznie to muszą być całe katalogi z zachowaniem ich wewnętrznej struktury. Dodam że wszystko działa w intranecie i ci co będą tego używali będą wiedzieli co robią.

Liczę na waszą pomoc.
marcio
A na servie masz wlaczana funckje system() bo defaultowo jest ona wylaczona
erix
Kod
\"

Bez escape'owania w tym wypadku.
ziola
Cytat(marcio @ 21.07.2009, 11:42:05 ) *
A na servie masz wlaczana funckje system() bo defaultowo jest ona wylaczona

W php.ini w disable_functions nic nie mam więc zakładam że tak.

A usunięcie escape'owania nic nie dało, nadal żadnej odpowiedzi
ziola
Nie działa. Przy próbie kopiowania katalogu się wykrzacza, a przy pliku niby pomyślnie wykonuje ale nie ma kopii pliku tam gdzie powinien być.
Fifi209
Może dla tego, że trzeba odpowiednie argumenty podać?
ziola
  1. <?php
  2. $dest = $_POST[to]. 'IOZT-' .$_POST[nrIOZT];
  3. echo 'dest: '.$dest.'<br />';
  4. if (!copy($_POST[from],dest)) {
  5.     echo "kopiowanie pliku $_POST[from], nie powiodło się";
  6. }
  7. ?>


Argumenty są odpowiednie. No chyba że nie umiem czytać dokumentacji.
erix
Cytat
ale niestety to nie działa, ale wywołanie bezpośrednio xcopy z dowolnego komputera w domenie działa, więc samo polecenie jest prawidłowe.

Wyświetl to sobie najpierw (bez wykonywania), skopiuj polecenie wynikowe i wklej do konsoli. Jeśli nie działa - masz błąd w składni.
ziola
Polecenie
xcopy "\\xxx.xxx.xxx.xxx\ham\testy\images" "\\xxx.xxx.xxx.xxx\user$\nowy\IOZT-0001" /e /i gdzie xxx.xxx.xxx.xxx to ip zasóbów
się wykonuje w konsoli. Zaczynam podejrzewać, że to może mogą być problemy z prawami dostępu na serwerze i zablokowaną możliwością odpalania komend prze cmd (chodzi to na ISS na W2k3 serwer).
A ta z ciekawości to czy taka operacja jest w ogóle możliwa spod php, a nie przez wywoływanie poleceń systemowych?
erix
Cytat
A ta z ciekawości to czy taka operacja jest w ogóle możliwa spod php, a nie przez wywoływanie poleceń systemowych?

A czemu nie? RecursiveDirectoryIterator i siepiesz pliczkami przez copy. [;

Jeśli chodzi o Win: może lepiej po prostu startować to przez CMD? Tzn. startujesz cmd z odpowiednimi parametrami.

Spróbuj jeszcze przez shell_exec" title="Zobacz w manualu PHP" target="_manual.
ziola
Cytat(erix @ 21.07.2009, 14:51:11 ) *
Jeśli chodzi o Win: może lepiej po prostu startować to przez CMD? Tzn. startujesz cmd z odpowiednimi parametrami.

Niestety musi być dostęp przez intranet, bo będzie musiało być rozwinięte później na inne platformy, w zależności na jakim serwerze będzie stało.

I jednak dobrze podejrzewałem, że to prawa dostępy nie działają bo dostałem takie coś:
Cytat
Warning: copy(\\filewaw9\user$\IOZT-0001): failed to open stream: Permission denied in E:\InetPub\HAM.pol.st\testy\logic.php on line 21
erix
Cytat
Niestety musi być dostęp przez intranet, bo będzie musiało być rozwinięte później na inne platformy, w zależności na jakim serwerze będzie stało.

Miałem na myśli procesor poleceń NT, a nie inne środowisko. tongue.gif

Zawsze możesz przecież stworzyć skrypt CMD i przez runas wystartować go na innych uprawnieniach.
ziola
Cytat
Zawsze możesz przecież stworzyć skrypt CMD i przez runas wystartować go na innych uprawnieniach.

Takie coś zamierzam, tylko że muszę najpierw ogarnąć jak wyciągnąć grupę do której należy użytkownik z Active Directory, bo system ma działać bez logowania "ręcznego" tylko automatycznie ma sprawdzać uprawnienia do kopiowania na określone lokalizacje sieciowe.
erix
Podpowiedź: do PHP masz rozszerzenie COM, przyda Ci się. [;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.