Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Zapis pliku z url na dysk
wicy
post
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.02.2008

Ostrzeżenie: (0%)
-----


Za pomocą skryptu na swoim serwerze próbuję zgrać plik z innego url. Plik zapisuje się na moim serwerze funkcją fwrite() lub file_put_contents().
  1. $data = file_get_contents($file_url);
  2. file_put_contents($save_to, $data);

Po użyciu $save_to = "C:\\katalog\\plik.roz" plik i tak zapisał mi się w domyślnym katalogu serwera pod nazwą "c:katalogplik.roz".

Jak zapisać plik bezpośrednio na dysku?
Ewentualnie pobrać ten plik z serwera, z którego uruchamiany jest skrypt?
Go to the top of the page
+Quote Post
!*!
post
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Może tak C:/katalog/plik.roz chociaż wątpię, skoro zapisujesz to przez php to zapisze się tylko tam gdzie dostęp ma, czyli w obrębie serwera a nie całego dysku.
Go to the top of the page
+Quote Post
wicy
post
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.02.2008

Ostrzeżenie: (0%)
-----


Właśnie skrypt uruchamiany jest na serwerze i ściąga plik z jeszcze innej lokalizacji. Z zapisem na serwer nie ma problemu, ale chciałbym pominąć zapis na serwerze i mieć bezpośredni download. Ewentualnie zapis na serwer, download i usunięcie pliku z serwera.
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #4





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Ściągnij plik na serwer, a potem z serwera przerzuć do katalogu końcowego z uprawnieniami dla skryptu.
Go to the top of the page
+Quote Post
wicy
post
Post #5





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.02.2008

Ostrzeżenie: (0%)
-----


Nie rozumiem (IMG:style_emoticons/default/sad.gif)

Ściągnąć na serwer? Nie ma problemu. Plik się kopiuje z innego serwera na mój. Ale jak go ściągnąć na dysk tym samym skryptem? Jest do tego jakaś funkcja? Czy może źle podaję ścieżki w fwrite()?
Go to the top of the page
+Quote Post
!*!
post
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


To zaraz po pobraniu wymuś ściągnięcie go przez przeglądarkę

Kod
header("Content-type: application/octet-stream");
header("Content-Length: " . filesize('image.jpg'));
header('Content-Disposition: attachment; filename="image.jpg"');
readfile('image.jpg');


lub zwyczajnie daj do niego link. A jak koniecznie chcesz zapisać go na dysk, to użyj jakiegoś skryptu zewnętrznego który php uruchomi (bo nie jestem pewien czy da się zapisać plik poza obszar) np. w bashu, python.
Go to the top of the page
+Quote Post
wicy
post
Post #7





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.02.2008

Ostrzeżenie: (0%)
-----


OK, takie rozwiązanie otwiera mi okno "zapisz plik jako" i mógłbym go zapisac na dysku, ale..... plików tych będzie więcej (IMG:style_emoticons/default/smile.gif) Więc chciałbym żeby skrypt robił download bez czekania na moje klikanie.
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #8





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. <?
  2.  
  3. //oczywiście zakładając że ten plik jest już na serwerze
  4.  
  5. $plik = 'jakisplik.roz';
  6. $nplik = 'jakas_sciezka/jakisplik.roz';
  7.  
  8. if (!copy($plik, $nplik)) {
  9. echo "błąd przy kopiowaniu";
  10. }else{
  11. unlink($plik)//usunięcie pliku z serwera
  12. }
  13. ?>


Ten post edytował kpt_lucek 6.05.2012, 14:34:42
Go to the top of the page
+Quote Post
wicy
post
Post #9





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.02.2008

Ostrzeżenie: (0%)
-----


Używając
  1. copy($_SERVER['DOCUMENT_ROOT'].'/katalog/plik.roz', 'c:\\katalog\\plik.roz');

plik zapisuje się w domowym folderze serwera pod nazwą c:katalogplik.roz.

Czyli że co, nie da się skryptem php skopiować pliku z serwera na dysk?? (IMG:style_emoticons/default/sad.gif)

No dobra. Skoro skrypt z serwera nie wie co to dla niego "c:\" więc może przez moje IP dostępne z zewnątrz?
Powiedzmy, że udostępniłem katalog "d:\katalog", mam stałe IP zewnętrzne to jaka powinna być ścieżka dla copy()?
Go to the top of the page
+Quote Post
!*!
post
Post #10





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Aby zapisać coś poza obszar serwera musisz wykorzystać zewnętrzne skrypty które będą działać w powłoce systemu, a które bedą uruchamiane z poziomu php. Pomyśl jaka byłaby to bzdura gdyby skrypt php mógł zapisać Ci pliki na pulpicie lub kasować katalog c:/windows a jeśli to nie ma być zapisywane na Twojej maszynie, to tym bardziej tego nie zrobisz. Musisz wtedy pakować pliki w ZIP i podać do nich link.

Ten post edytował !*! 6.05.2012, 15:11:19
Go to the top of the page
+Quote Post
wicy
post
Post #11





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.02.2008

Ostrzeżenie: (0%)
-----


Owszem, zgodzę się. Ale jeśli mam IP, mój komputer powinien być widziany przez serwer ze skryptem jak każdy inny zewnętrzny url (np. ten, z którego dopiero pobrałem plik do dalszego przesłania). Więc pobieram plik z http://coś_tam i wysyłam na IP. Jeśli po swojej stronie (tzn. komputera) mam ustawione udostępnianie katalogu na zewnątrz, powinno to zadziałać. Czy nie?

Nie wiem tylko jak ubrać to w ścieżki żeby spróbować czy to działa. Poza tym wchodząc na http://mójIP trafiam na router (IMG:style_emoticons/default/sad.gif) i tu kolejne schody (IMG:style_emoticons/default/sad.gif)

Ten post edytował wicy 6.05.2012, 15:16:28
Go to the top of the page
+Quote Post
!*!
post
Post #12





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


To nie Twój komputer w sensie C:// tylko Twój katalog w sensie serwer jest widziany po wpisaniu IP. Poza tym nie ma co kombinować, zainstaluj pythona pod windows i poszukaj w google "python przenoszenie plików" jest tego dużo, odpalisz ten skrypt pythona z poziomu php i z głowy.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 23:23