Как загрузить файл байт за байтом в php

#php #javascript #upload

#php #javascript #загрузка

Вопрос:

У меня есть элемент form input type=»file», и он принимает файл. Когда я загружаю его и передаю это php-скрипту на стороне сервера.

Как мне записать временный файл, хранящийся в $ _FILES[«file»][«tmp_name»] байт за байтом? Приведенный ниже код не работает . Кажется, он записывается в конце запроса . ЕСЛИ, например, соединение между ними потеряно, я хотел бы посмотреть, завершено ли 40%, чтобы я мог возобновить его.

Какие-либо указатели?

 $target_path = "uploads/";
$target_path = $target_path . basename($name);
if (isset($_FILES['file']['tmp_name']) amp;amp; is_uploaded_file($_FILES['file']['tmp_name'])) {
        // Open temp file
        $out = fopen($target_path, "wb");
        if ($out) {
            // Read binary input stream and append it to temp file
            $in = fopen($_FILES['file']['tmp_name'], "rb");

            if ($in) {
                while ($buff = fread($in, 4096))
                    fwrite($out, $buff);

            } 

            fclose($in);
            fclose($out);

        }
} 
 

Комментарии:

1. Загрузка PHP не работает таким образом.

Ответ №1:

PHP не передает управление целевому сценарию загрузки файла до тех пор, пока загрузка не будет завершена (или не завершится неудачно). Вам не нужно ничего делать, чтобы «принять» файл — PHP и Apache позаботятся о его записи в имя файла, указанное в ['tmp_name'] параметре массива $ _FILES .

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

Комментарии:

1. «вам понадобится гораздо более сложный скрипт» — ему тоже понадобится что-то гораздо более сложное на стороне клиента. Загрузка HTML просто не возобновляется. Хотя могут быть какие-то экзотические хитрости API во Flash или Java, которые могли бы это сделать.

2. Привет, Марк, ты можешь подсказать, что мне нужно сделать? На стороне клиента html5 с использованием функции slice? и что мне нужно сделать на стороне php?