PHP: лучший способ загрузки и скачивания больших файлов - PullRequest
1 голос
/ 10 августа 2011

Я видел другие темы по этой теме, но они мало помогли.

У меня есть простое требование. Мне нужно создать простое приложение, которое позволяет пользователям загружать и скачивать большие файлы (400 - 1500 МБ) с сервера. У каждого пользователя будет свой логин, и большой файл должен быть загружен и загружен безопасно.

Каков наилучший способ добиться этого с помощью PHP? Какие-нибудь подводные камни, на которые я должен обратить внимание?

Спасибо, Amit

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

PHP поддерживает загрузка потокового файла .

Вы можете использовать такие функции, как stream_open() & stream_write().

я также нашел способ в Интернете сделать это с помощью PEAR , но я никогда не пробовал этого:

Вот что сказал автор:

В PEAR есть альтернативный метод передачи файлов на сервер1 на server2. У PEAR есть пакет HTTP для загрузки файлов.

HTTP_Request поддерживает GET / POST / HEAD / TRACE / PUT / DELETE, Basic аутентификация, прокси, аутентификация прокси, SSL, загрузка файлов и т. д.

<?php
  require_once "HTTP/Request.php";
  $req =& new HTTP_Request("http://domain.com/upload");
  $req->setBasicAuth("login", "pass");
  $req->setMethod(HTTP_REQUEST_METHOD_POST);

  $result = $req->addFile("data", "/home/svnlabs.mp4");
  if (PEAR::isError($result)) {
    echo "Error occurred during file upload!";
  } else {
    $response = $req->sendRequest();
    if (PEAR::isError($response)) {
      echo "Error occurred during file upload!";
    } else {
      echo "File successfully uploaded!";
    }
  }
?>
1 голос
/ 10 августа 2011

Должен ли перевод осуществляться через http?В противном случае вы могли бы иметь клиентское приложение, которое запускается, когда вы выбираете для загрузки изображения на свой сайт и обрабатывает загрузку соответствующего файла, используя FTP, SFTP или что-то подобное.Вероятно, это был бы лучший способ добиться хорошей производительности и не перегружать веб-сервер.

Можно просто увеличить допустимые размеры файлов и запустить скрипт до конца.

ini_set('upload_max_filesize', '1024M');  
ini_set('post_max_size', '1024M');  
ini_set('max_input_time', 0);  
ini_set('max_execution_time', 0);  

это не рекомендуется для размеров файлов, о которых вы говорите.Соединения с веб-сервером будут открыты в течение очень долгого времени, и прерывание загрузки будет трудно возобновить.

Поэтому я хотел бы рассмотреть вопрос о том, чтобы клиентское приложение выполняло фактическую загрузку.Вы могли бы сделать его в виде Java-апплета или приложения CLI / GUI, которое пользователь должен загрузить, прежде чем сможет загружать файлы.

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