upload для opera mini

<?php
/*
*upload для opera mini
*08.10.07
*автор: DG-SC
*

оригинальный код и комментарии сохранены
*/
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="no-cache">
<title>Форма отправки файла для Opera Mini</title>
</head>

<body>

<!-- v1.1/13.10.2006-->
<?php

// путь для загруженных файлов, по аналогии с настоящей загрузкой по http
//$uploaddir = '\\home\\opera-mini.ru\\www\\test\\fileup\\';
$uploaddir = 'fileup/';
/*
//НИЖЕ ИДЁТ ЗАМЕНА ВОТ ТАКОГО БЛОКА ЗАГРУЗКИ
if (move_uploaded_file($_FILES['filel']['tmp_name'], $uploaddir . $_FILES['filel']['name'])) {
echo "File is valid, and was successfully uploaded<br>";
} else {
echo "There some errors!<br>";
}

*/
/*
прикрепление файла происходит в виде отсылки имени файла и его тела, кодированного в Base64.
в post для данного примера это выглядит как:

?file1=filename.extfile=/9...данные....Q
[POST: [имя файла ][сигн][данные файла ]]
как видно, здесь нет явного определения параметра file, поэтому этот параметр вырезается из всего POST.
всё, что до него - то имя, что после - данные.

*/
// определяем реальное имя файла
$uploadedfile = $_POST['file1'];

// проверка на наличие данных в POST
if (strlen($uploadedfile)) {
    // "вырезаем" данные файла из пришедшего
    // параметр 'file=' НЕ МЕНЯТЬ!!!! иначе не получите данных файла
    $array = explode('file=', $uploadedfile);
    $tmp_name = $array[0];
    $filebase64 = $array[1];
}

// проверка на нулевой размер файла
if (strlen($filebase64)) {
    // определяем имя файла для создания
    // ЗДЕСЬ МОЖНО ИЗМЕНИТЬ ДЛЯ ИСКЛЮЧЕНИЯ СОВПАДЕНИЙ C СУЩЕСТВУЮЩИМИ
    $name = $tmp_name;
    $FileName = $uploaddir.$name;

    // декодируем данные файла
    $filedata = base64_decode($filebase64);


    // создание и запись данных в файл
    $file = @fopen($FileName, "wb");

    if($file){
        if(flock($file, LOCK_EX)){
            fwrite($file, $filedata);
            flock($file, LOCK_UN);
        }
        fclose($file);
    }

    // отчёт о результате
    echo '<script language="Javascript">';
    if (file_exists($FileName) && filesize($FileName) == strlen($filedata)) {
        echo 'alert ("File ',$tmp_name,' is valid, and was successfully uploaded")';
    } else {
        echo 'alert ("An error occured while upload ',$tmp_name,'")';
    }
    echo '</script>';



    // просто список файлов в директории загрузки
    echo '..';

    foreach (glob($uploaddir.'*.*') as $filename) {
        $name = explode('/', $filename);
        //$name = explode('.', $name[1]);
        $lastmodif = filemtime($filename);
        $size = filesize($filename);
        $time = date("G:i j-M-Y", $lastmodif);

        echo "<br><a href=\"$filename\">$name[1] [$size] [$time]</a><br>";
    }


    echo '<p><a href="upload.php">upload</a></p>';

} else {
    // расположение формы на странице не критично.
    // единственное, что ссылка на обзор файла ДОЛЖНА БЫТЬ расположена
    // непосредственно под полем отображения имени файла "file1"
    echo '<form method="post" enctype="multipart/form-data">';
    echo 'Файл для отправки';
    ////////////////////////////////////////////////////////////////////////////////
    /// ФИКСИРОВАННАЯ ЧАСТЬ: НЕ ИЗМЕНЯТЬ!!!
    // имя менять при одновременной смене его и в обрабочике POST
    echo '<br><p> <input name="file1" value = ""> ';
    // url ссылки ДОЛЖЕН БЫТЬ именно таким, для определения Оперой
    // это "op:fileselect" НЕ МЕНЯТЬ!!! иначе Opera перестанет открывать ФМ для обзора
    echo '<a href="op:fileselect">Выбрать файл</a>';
    ////////////////////////////////////////////////////////////////////////////////
    echo '<br><p> <input type="submit" value="Послать файл">';
    echo '</form>';
}


?>

</body>
<!-- Created by DG-SC © 2006-->
</html>