PHP загрузка случайным образом выдаст ошибку сети - PullRequest
1 голос
/ 10 января 2020

Я в настоящее время владею и управляю сетевым FTP, с арендованного сервера, работающего на PHP, и я пытаюсь включить загрузки (так как это одна из самых основных c функций FTP). Я сделал это с помощью приведенного ниже кода, однако, когда я пытаюсь загрузить свои резервные копии на сервере, размер которых обычно составляет около 800 МБ, загрузка иногда приводит к сетевой ошибке. Что очень раздражает и неудобно. Я ценю любые мысли о том, почему это будет происходить. Заранее спасибо! У меня только 2 ГБ оперативной памяти.

header("Content-Disposition: attachment; filename=\"$name\"");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize("ftp://$u:$p@$h".$_GET['data']));
header("Connection: close");
readfile("ftp://$u:$p@$h".$_GET['data']);

The downloads bar in chrome. Different downloads will fail in different places during the download.

Ответы [ 3 ]

2 голосов
/ 20 января 2020

Вам необходимо установить ограничения для PHP, а также для веб-сервера

IN PHP

// add these in starting of the files
ini_set('memory_limit', '1G'); //according to your requirements
//only for development will show some extra debug info.
ini_set('display_errors', true);
ini_set('max_execution_time', 0); //0=NOLIMIT

ТАКЖЕ Мы должны установить эти настройки (время и размер) на уровне веб-сервера, я предполагаю, что вы используете NGINX

IN WEBSERVER (vi /etc/nginx/nginx.conf)

keepalive_timeout  60; #try this with 600, i thing your issue belongs here
send_timeout 60; #try this with 600, i thing your issue belongs here
client_body_timeout 120; #try this with 600, i thing your issue belongs here
client_max_body_size 5G; #default is 4.5 GB so you dont need this if data is less than 4.5GB

Не забудьте перезапустить NGINX после изменения веб-сервера.

для получения дополнительной информации по nginx ограничениям нажмите здесь

1 голос
/ 10 января 2020

Попробуйте поставить header('Expires: 0'); и set_time_limit(0); перед readfile() и посмотрите, поможет ли это.

Что касается сжатия, я полагаю, что вам сначала нужно загрузить файл на сервер, прежде чем сжимать его.

Не уверен, есть ли бесплатные альтернативы, но в Chilkat есть и FTP, и сжатие файлов (Zip, GZip или TAR)

Пример сжатия: https://www.example-code.com/phpExt/tar_create_bz2.asp

0 голосов
/ 22 января 2020

Поскольку вы пытались загрузить несколько файлов одновременно, и у вас есть только 2 ГБ ОЗУ, вполне вероятно, что арендованный сервер прерывает соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...