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>
8 октября 2007, 12:47