[php] upload na ftp

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
Asit
Zaczyna działać
Zaczyna działać
Posty: 402
Rejestracja: ndz lis 28, 2004 9:17 pm
Kontakt:

[php] upload na ftp

Post autor: Asit »

czy mozna wyslac plik przez php na serwer ftp?
jesli tak to moze ktos wie jak to zrobic..
z gory dzieki
adax2000
Nowy
Nowy
Posty: 31
Rejestracja: ndz kwie 24, 2005 10:11 pm

Re: [php] upload na ftp

Post autor: adax2000 »

8O żartujesz?! albo ja nie rozumiem pytania, w każdym razie opcje masz dwie:

opcja 1. (polecam) ściągnij sobie manual do php (php_manual_pl.chm) np. stąd http://pl2.php.net/get/php_manual_pl.ch ... his/mirror
i wyszukaj hasło FTP

opcja 2. w razie całkowitego braku czasu (chęci) zaopodaję od powiedni fragment z poręcznika:

Przykład 1. Przykład użycia FTP

[php]<?php
// ustaw podstawowe połączenie
$conn_id = ftp_connect($ftp_server);

// zaloguj się nazwą użytkownika i hasłem
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// sprawdź połączenie
if ((!$conn_id) || (!$login_result)) {
echo "Połączenie FTP się nie powiodło!";
echo "Próbowano połączyć się do $ftp_server jako użytkownik"
. $ftp_user_name;
die;
} else {
echo "Połączony z $ftp_server jako użytkownik $ftp_user_name";
}

// prześlij plik
$upload = ftp_put($conn_id, $plik_docelowy, $plik_zrodlowy, FTP_BINARY);

// sprawdź stan operacji
if (!$upload) {
echo "Wstawienie pliku przez FTP się nie powiodło!";
} else {
echo "Przesłano $plik_zrodlowy na $ftp_server jako $plik_docelowy";
}

// zamknij strumień FTP
ftp_close($conn_id);
?>[/php]
Asit
Zaczyna działać
Zaczyna działać
Posty: 402
Rejestracja: ndz lis 28, 2004 9:17 pm
Kontakt:

Re: [php] upload na ftp

Post autor: Asit »

ok dzieki tylko takie pytanie..
podlaczylem sie do serwa i wszsytko gra az do momentu kiedy chce cos grac na serwer
[php]$upload = ftp_put ($conn_id, $plik_docelowy, $plik_zrodlowy, FTP_BINARY);[/php]
wytlumacz mi co mam podac pod $plik_zrodlowy..
rozumiem ze $plik_zrodlowy to jest ten plik z kompa wiec mam podac do niego sciezke typu C:/windows/pulpit/costam.txt ? od razu mowie ze taka opcja nie dziala..upload dziala tylko wtedy gdy $plik_zrodlowy = ""; a chyba nie o to chodzi..
adax2000
Nowy
Nowy
Posty: 31
Rejestracja: ndz kwie 24, 2005 10:11 pm

Re: [php] upload na ftp

Post autor: adax2000 »

no wszystko fajnie tylko jeżeli mówimy o scieżce katalogów w windows to separatorem katalogów jest \ i php nie robi tu wyjątku.

więc masz trzy możliwości:
[php]<?php
$plik_zródłowy = "c:\\windows\\pulpit\\a.txt";
$plik_zródłowy = 'c:\windows\pulpit\a.txt';
$plik_zródłowy = 'c:\\windows\\pulpit\\a.txt';
?>[/php]

wyjaśniam:
jeśli ciąg znaków zamkniesz w cudzysłowach to niektóre (escape secquences) sekwencje znaków zaczynających się od \ są zamieniane na znaki ascii o kodach poniżej 32 np \n zostanie zamienione na znak nowej linii jeśli ciąg znaków zamkniesz w apostrofach to nie będzie ich zamieniał, a jeśli trafi się tam \\ to zamieni to na \.

podsumowując
1. zawsze dawaj \\ to nic ci się nie pogmatwa
2. zamykaj ciąg znaków tym samym znakiem którym go otworzyłeś bo zrobi się siara.

pozdro i nara

ps.

w adresie docelowym (ftp) nie ważne jaki by on był, windowsowy czy unixowy użyjesz zawsze / do oddzielenia katalogów
Asit
Zaczyna działać
Zaczyna działać
Posty: 402
Rejestracja: ndz lis 28, 2004 9:17 pm
Kontakt:

Re: [php] upload na ftp

Post autor: Asit »

jednak to nie pomoglo :(
nadal jest: Wstawienie pliku przez FTP się nie powiodło!
adax2000
Nowy
Nowy
Posty: 31
Rejestracja: ndz kwie 24, 2005 10:11 pm

Re: [php] upload na ftp

Post autor: adax2000 »

przed chwilą specjalnie sprawdziłem to: przesłałem plik z windowsa do ftp.webpark.pl zadziałało znakomicie.

może błędnie wpisujesz ścieżkę docelową, nie może ona być pusta, może to być np. a.txt, spróbuj na początek
[php]<?php
$plik_docelowy = 'a.txt';
?>[/php]

(bez ścieżki), bo może popełniasz gdzieś błąd w ścieżce dostępu, nie jest ona nigdy w stylu ftp.webpark.pl/a.txt tylko raczej /.www/a.txt albo /usr/home/adax2000/www/a.txt

może też problem leży gdzie indziej np. nie masz uprawnień by zapisywać w danym katalogu, plik już istnieje a ty nie masz prawa go nadpisać, sprawdź najpierw przy pomocy total commandera czy wogóle uda ci się coś tam skopiować (po skopiowaniu wciśnij ctrl+r, żeby odświeżyć widok).

popróbuj z innym plikiem, serverem, sama procedura jest wzorcowa (wzięta z podręcznika) i działa idealnie w związku z czym nie wiem jak ci pomóc.

pozdro

ps.

[php]<?php
ftp_pasv ($conn_id, TRUE); //przełącza server w tryb pasywny
ftp_pasv ($conn_id, FALSE); //przełącza server w tryb aktywny

?>[/php]
może to coś pomoże, nie wiem
FanFataL
Nowy
Nowy
Posty: 113
Rejestracja: pn lut 28, 2005 1:33 am
Lokalizacja: Kraków / Katowice / Bydgoszcz
Kontakt:

Re: [php] upload na ftp

Post autor: FanFataL »

Nie wiem czy doczytałeś manulala odnośnie funkcji [manual]ftp_put[/manual].
int ftp_fput ( int strumien_ftp, string plik_zdalny, int fp, int tryb [, int pozycja_początkowa] )

ftp_fput() umieszcza na serwerze dane pobrane ze wskaźnika fp do końca pliku.
Co oznacza że $plik_zródłowy to nie ścieżka do pliku tylko uchwyt dopliku otwarty przez [manual]fopen[/manual] czyli
[php]<?php
// ...
$plik_zródłowy = fopen('a.txt','r');
upload = ftp_put ($conn_id, $plik_docelowy, $plik_zrodlowy, FTP_BINARY);
// ...
?>[/php]

Pozdrawiam :wink:
...
Asit
Zaczyna działać
Zaczyna działać
Posty: 402
Rejestracja: ndz lis 28, 2004 9:17 pm
Kontakt:

Re: [php] upload na ftp

Post autor: Asit »

Warning: fopen(C:\\WINDOWS\\Pulpit\\test.txt): failed to open stream: No such file or directory in /home/download/upload.php on line 24
czyli niestety :(
FanFataL
Nowy
Nowy
Posty: 113
Rejestracja: pn lut 28, 2005 1:33 am
Lokalizacja: Kraków / Katowice / Bydgoszcz
Kontakt:

Re: [php] upload na ftp

Post autor: FanFataL »

Asit pisze:
Warning: fopen(C:\\WINDOWS\\Pulpit\\test.txt): failed to open stream: No such file or directory in /home/download/upload.php on line 24
czyli niestety :(
[manual]fopen[/manual] dziła na plikach dostępnych na serwerze tudzień np. na krasnalu jak to jest windows ;]
Czyli nie da sie zrobic bezpośredniego uploadu na ftpa pliku z kompa, trzeba najpierw wgrać na serwer ;] np. przez [manual]move_uploaded_file[/manual] i dopiero wtedy robisz przez ftpa ;]

Pozdrawiam :wink:
...
adax2000
Nowy
Nowy
Posty: 31
Rejestracja: ndz kwie 24, 2005 10:11 pm

Re: [php] upload na ftp

Post autor: adax2000 »

fanfatal: to ty nie doczytałeś o czym my tu wogóle mówimy, bo my tu mówimy o
ftp_put, a ty mówisz o ftp_fput a to są dwie różne instrukcje, nie mieszaj chłopakowi w głowie

ale nasunąłeś mi pewną myśl:

asit: zakładałem dotąd, że serwer i plik masz tak samo uruchomione pod windowsem na tym samym kompie jeśli jest inaczej to oczywiście musisz wpierw
pobrać (np. ftp_get) żeby wysłać wspomnij jeśli tak jest to rozwinę wrazie czego

2. czy ten plik napewno istnieje w tym katalogu o tej nazwie?
Asit
Zaczyna działać
Zaczyna działać
Posty: 402
Rejestracja: ndz lis 28, 2004 9:17 pm
Kontakt:

Re: [php] upload na ftp

Post autor: Asit »

ale czekaj.. bo sie zaplatalem ;]
ja nie mam pliku na serwie.. ja chce go tam dopiero wgrac przez upload..
wiec ftp_get chyba odpada.. probuje wgrac plik lokalny na serwer ftp a nie odwrotnie..
FanFataL rzeczywiscie mowil o ftp_fput ale z move_uploaded_file mial dobry pomysl.. tyle ze nie dokonca potrafie polaczyc te dwie rzeczy..
chodzi mi o move_uploaded_file i ftp_put.. nie wiem czy dobrze rozumuje wiec jesli nie to poprawiac! :wink:
no wiec najpierw wysylam plik na serwer przez move_uploaded_file a jak plik (tzn plik tymczasowy) jest juz tam to stosuje ftp_put mam racje? tyle ze nadal to mi nie dziala :/ przez caly czas jest: failed to open stream
adax2000
Nowy
Nowy
Posty: 31
Rejestracja: ndz kwie 24, 2005 10:11 pm

Re: [php] upload na ftp

Post autor: adax2000 »

jeżeli skrypt jest uruchomiony na zdalnym serwerze i przy jego pomocy chcesz pobrać plik ze swojego komputera, to:
1. musisz uruchomić u siebie server ftp np. PWS w starych windowsach albo IIS na nowszych
2. umieścić pliki do pobrania w katalogu, który będziesz udostępniał jako FTP
3. w skrypcie w miejsce $ftp_server wpisz swój IP
4. zamiast ftp_put daj ftp_get składnia jest taka sama tylko tam gdzie miałeś $plik_docelowy teraz jest $plik_zrodłowy
to tyle
pozdro i nara
ODPOWIEDZ