<?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>