Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zapis pliku z url na dysk
Forum PHP.pl > Forum > Przedszkole
wicy
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?
!*!
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.
wicy
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.
kpt_lucek
Ściągnij plik na serwer, a potem z serwera przerzuć do katalogu końcowego z uprawnieniami dla skryptu.
wicy
Nie rozumiem 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()?
!*!
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.
wicy
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 smile.gif Więc chciałbym żeby skrypt robił download bez czekania na moje klikanie.
kpt_lucek
  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. ?>
wicy
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?? 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()?
!*!
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.
wicy
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 sad.gif i tu kolejne schody sad.gif
!*!
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.
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.