Answer the question
In order to leave comments, you need to log in
Problem with the progress of uploading a file to the server. How to fix?
Hello colleagues! I recently encountered the following problem:
I used to always use the onreadystatechange event of XMLHttpRequest to indicate progress, but now I want to do the same, but using the session. But for some reason the $_SESSION array - which, in theory, should contain information about the download progress - is empty for some reason.
Here are the configuration settings:
session.upload_progress.enabled = On
session.upload_progress.cleanup = On
session.upload_progress.prefix = "upload_progress_"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.freq = "10K"
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Загрузка файлов на сервер</title>
</head>
<body>
<form action="upload.php" enctype="multipart/form-data" method="POST">
<fieldset>
<legend>Загрузка файла</legend>
<input type="hidden" name="MAX_FILE_SIZE" value="1000000"
<label>Выбрать картинку<input type="file" name="picture"></label><br>
<label>Загрузить<input type="submit"></label>
</fieldset>
<input type="hidden" name="<?php echo ini_get("session.upload_progress.prefix") . ini_get("session.upload_progress.name"); ?>" value="123" />
</form>
</body>
</html>
The upload progress will be available in the $_SESSION superglobal variable during the upload, as well as when sending a POST request variable with a name equal to the value of the session.upload_progress.name option. Once PHP detects such a POST request, it will create an array in $_SESSION whose key will be the concatenation of the session.upload_progress.prefix and session.upload_progress.name options.
<?php
session_start();
if($_FILES["picture"]["error"]){
echo "Ошибка №" . $_FILES["picture"]["error"] . " - ";
switch ($_FILES["picture"]["error"]){
case 0: echo "Ошибок не возникло, файл был успешно загружен на сервер.";
break;
case 1: echo "Размер принятого файла превысил максимально допустимый размер, который задан ди:рективой upload_max_filesize конфигурационного файла php.ini.";
break;
case 2: echo "Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме.";
break;
case 3: echo "Загружаемый файл был получен только частично.";
break;
case 4: echo "Файл не был загружен.";
break;
case 6: echo "Отсутствует временная папка. Добавлено в PHP 5.0.3.";
break;
case 7: echo "Не удалось записать файл на диск. Добавлено в PHP 5.1.0.";
break;
case 8: echo "PHP-расширение остановило загрузку файла. PHP не предоставляет способа определить, какое расширение остановило загрузку файла; в этом может помочь просмотр списка загруженных расширений с помощью phpinfo(). Добавлено в PHP 5.2.0.";
}
exit;
}
if(mime_content_type($_FILES["picture"]["tmp_name"]) != "image/png"){
echo "Ошибка. Файл не является изображением PNG";
exit;
}
$destination = __DIR__ . "/uploads/" . basename($_FILES["picture"]["name"]);
if(move_uploaded_file($_FILES["picture"]["tmp_name"], $destination)){
echo "Файл был успешно загружен на сервер";
echo "Вы загрузили следующее изображение: <br>";
echo "<img src='uploads/" . $_FILES["picture"]["name"] . "'><br>";
echo "Информация о загруженном файле:<br>";
//ВОТ ТУТ НЕПОНЯТКА. Почему этот массив пуст?
var_dump($_SESSION);
}else{
echo "Произошла ошибка во время загрузки файла";
}
?>
Answer the question
In order to leave comments, you need to log in
I see a discrepancy with your documentation.
In the documentation: "sending a POST request to a variable with a name equal to the value of the session.upload_progress.name option."
Your variable is named ini_get("session.upload_progress.prefix") . ini_get("session.upload_progress.name")
The prefix is redundant.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question