How can JavaScript be integrated with PHP to handle file upload interruptions?

When handling file uploads in PHP, interruptions can occur if the user's internet connection is lost or if the user navigates away from the page before the upload is complete. To address this issue, JavaScript can be used to send periodic AJAX requests to update the server-side PHP script on the progress of the file upload. This allows the PHP script to resume the upload process from where it left off if it was interrupted.

<?php
// Check if file upload is in progress
if(isset($_POST['upload_progress'])){
    // Get the file upload progress
    $progress_key = ini_get("session.upload_progress.prefix") . $_POST['upload_progress'];
    $upload_progress = $_SESSION[$progress_key];

    // Return the file upload progress
    echo json_encode($upload_progress);
    exit;
}

// Handle file upload
if(isset($_FILES['file'])){
    // Start the session
    session_start();

    // Handle file upload interruption
    if($_FILES['file']['error'] == UPLOAD_ERR_PARTIAL){
        // Resume the file upload process
        $progress_key = ini_get("session.upload_progress.prefix") . $_SESSION['upload_progress_key'];
        $upload_progress = $_SESSION[$progress_key];

        // Move uploaded file to desired location
        move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);

        // Clear the session variables
        unset($_SESSION[$progress_key]);
        unset($_SESSION['upload_progress_key']);
    } else {
        // Start the file upload process
        $upload_progress_key = uniqid();
        $_SESSION['upload_progress_key'] = $upload_progress_key;

        // Move uploaded file to temporary location
        move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);

        // Clear the session variables
        unset($_SESSION['upload_progress_key']);
    }
}
?>