filemanager.php
<?php
session_start();

// определяем временную директорию, куда грузятся файлы на сервер
$tmp_dir = '';

if (!isset($_SESSION['upload_tmp_dir']))
{
    $tmp_dir_ok = false;

    $tmp_dir = ini_get('upload_tmp_dir');

    $tmp_dir_ok = true;

    // если директива upload_tmp_dir не задана в php.ini, то
    if (!is_dir($tmp_dir) || $tmp_dir=='')
    {
        // искуссвенным путем определяем временную директорию в системе
        $tmp_dir = dirname(tempnam('127631782631827', 'foo'));

        if (!is_dir($tmp_dir))
        {
            echo "<script>alert('Не удается определить временную директорию системы.');</script>";
            $tmp_dir_ok = false;
        }
    }

    // сохраняем значение временной директории в сессии 
    if ($tmp_dir_ok)
    {
        $_SESSION['upload_tmp_dir'] = $tmp_dir;
    }
}
?>
<html>
<head>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<script language="JavaScript">
<!--
var start_date = null;
var start_time = null;                  // время, прошедшее в миллисекундах
var time_limit = 30;                    // тайм-лимит в секундах для опроса сервера
var r = false;                          // XMLHttpRequest-object
var secs_elapsed = 0;                   // время прошедшее с момента загрузки
var uploaded = false;                   // флаг загрузки

function uploadFile()
{
    if (document.forms[0].upload_file.value!='')
    {
        document.getElementById('progressMess').innerHTML = 'Подождите ответа сервера...';
        document.forms[0].btnupload.disabled = true;
        start_date = new Date();
        start_time = start_date.getTime();
        uploaded = false;
        document.getElementById('progressProcents').style.width = '0%';
        setTimeout("document.forms[0].submit()", 1000);
        request();
    }
    else
    {   alert('Не выбран файл!');
        return false;
    }
}

/**
 * Выполняет асинхронный запрос к серверу
 */
function request()
{
    var n = new Date();
    var current_time = n.getTime();

    secs_elapsed = Math.round((current_time-start_time)/1000);
    iSecs = secs_elapsed%60;
    document.getElementById('progressTime').innerHTML = '00:'+ (iSecs>9 ? iSecs : '0'+iSecs);
    if (secs_elapsed>=time_limit)
    {
        document.getElementById('progressMess').innerHTML = 'Время ожидания истекло...';
        document.forms[0].btnupload.disabled = false;
        return false;
    }

    r = false;
    try {
        r = new XMLHttpRequest();
    }
    catch(trymicrosoft)
    {
        try {
            r = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (othermicrosoft)
        {
            try {
                r = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(failed) { r = false; }
        }
    }

    if (!r)
    {
        alert("Error initializing XMLHttpRequest! Your browser does not support XMLHttpRequest object.");
        window.close();
        return false;
    }

    r.open('GET', 'whileuploading.php', true);
    r.onreadystatechange = progressUpdate;
    r.send(null);
}

/**
 * Проверяет состояние запроса и обновляет содержимое страницы.
 */
function progressUpdate()
{
    if (r.readyState==4)
    {
        if (r.status==200)
        {
            /*  параметры возвращаются в формате
                current_human_filesize|current_filesize|total_filesize
            */
            var response = r.responseText;
            var t = response.split('|');

            if (t[0]!='undefined') uploaded = true;

            document.getElementById('progressBytes').innerHTML = response;

            /*if (t[1]>0 && t[2]>0)
            {
                runProgressBar(Math.round(t[1]/t[2]*100));
            }*/

            if (uploaded && t[0]=='undefined')      // загрузка уже выполнена
            {
                document.getElementById('progressMess').innerHTML = 'Загрузка завершена...';
                document.forms[0].btnupload.disabled = false;
                return;
            }
            setTimeout('request()', 1000);
        }
        else if (r.status == 404)
            alert("Error: request URL does not exist");
        else
            alert("Error: status code is " + r.status);
    }
}
//-->
</script>
</head>
<body leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0" marginwidth="1" marginheight="1">
<iframe name="upload_frame" src="upload.php" width="1" height="1" style="border: 0;"></iframe>

<form method="post" action="upload.php" enctype="multipart/form-data" target="upload_frame">
<table border="0" cellpadding="2" cellspacing="1" width="60%" style="margin: 10px; border: 1px solid black;">
<tr>
    <td colspan="4"><input type="file" name="upload_file" class="input"></td>
</tr>
<tr>
    <td width="12%"><b>Загружено</b>:</td>
    <td width="16%" nowrap><span id="progressBytes" style="color: blue; font-size: 13px">undefined</span></td>
    <td width="10%" nowrap><span id="progressProcents">0</span> %</td>
    <td width="62%"><span id="progressMess"> </span></td>
</tr>
<tr>
    <td><b>Время</b>:</td>
    <td colspan="3"><span id="progressTime">00:00</span> сек.</td>
</tr>
<tr>
    <td colspan="4"><input type="button" name="btnupload" value="Загрузить" onClick="uploadFile();"></td>
</tr>
</table>
</form>
</body>
</html>
?>