#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?