Cóż, ten wydaje się dość prosty i jest. Aby pobrać plik na serwer, wystarczy:
file_put_contents("Tmpfile.zip", file_get_contents("http://someurl/file.zip"));
Jest tylko jeden problem. Co jeśli masz duży plik, na przykład 100 MB. Wówczas zabraknie pamięci i nie będzie można pobrać pliku.
To, czego chcę, to sposób na zapisanie pliku na dysku podczas jego pobierania. W ten sposób mogę pobierać większe pliki bez problemów z pamięcią.
Odpowiedzi:
Od PHP 5.1.0
file_put_contents()
obsługuje pisanie kawałek po kawałku, przekazując uchwyt strumienia jako$data
parametr:Z instrukcji:
(Dzięki Hakre .)
źródło
allow_fopen_url Off
jest ustawiony w php.ini (dobry pomysł na bezpieczeństwo), twój skrypt zostałby uszkodzony.file_get_contents()
to też by nie działało, gdyby tak było (patrz OP).fopen
; zapobiega niekorzystnym skutkom obrazów i innych nie zwykłych plików tekstowych.źródło
Spróbuj użyć cURL
Nie jestem pewien, ale wierzę w
CURLOPT_FILE
opcję, która zapisuje podczas pobierania danych, tj. nie buforowane.źródło
$fh = fopen('/path/to/download/the/file/to.zip', 'w');
i zamknij za pomocąfclose($fh);
pocurl_close($ch);
. I ustawCURLOPT_FILE => $fh
Odpowiedź prodigitalona nie działała dla mnie. Mam
missing fopen in CURLOPT_FILE
więcej szczegółów .To zadziałało dla mnie, w tym lokalnych adresów URL:
źródło
.php
pliku i uruchom na serwerze docelowymDownloader:
źródło
set_time_limit (24 * 60 * 60);
musi być umieszczony w pętli. Na początku skryptu nie działa.źródło
Istnieją 3 sposoby:
Można znaleźć przykłady stąd .
źródło
Użyj prostej metody w php
copy()
Uwaga: jeśli plik docelowy już istnieje, zostanie zastąpiony
Funkcja PHP copy ()
Uwaga: Musisz ustawić uprawnienie 777 dla folderu docelowego. Użyj tej metody podczas pobierania na komputer lokalny.
Uwaga specjalna: 777 to uprawnienie w systemie uniksowym z pełnym uprawnieniem do odczytu / zapisu / wykonania dla właściciela, grupy i wszystkich. Zasadniczo dajemy to zezwolenie na zasoby, które nie są zbytnio potrzebne do ukrywania przed publicznością na serwerze WWW. Przykład: folder zdjęć.
źródło
Używam tego do pobierania pliku
źródło
Rozwiązanie PHP 4 i 5:
readfile () nie stwarza żadnych problemów z pamięcią, nawet przy wysyłaniu dużych plików. Za pomocą tej funkcji można użyć adresu URL jako nazwy pliku, jeśli włączone są opakowania fopen.
http://php.net/manual/en/function.readfile.php
źródło