PHP

Php upload

Когда поставлена задача передачи серверу файлов для их последующего прочтения, следует воспользоваться незаменимой функцией: move_uploaded_file().

Здесь показан пример работы этой функции.

Задача: Надо положить на сервер картинку в формате .jpeg, чтобы в дальнейшем создать галерею. Картинки должны лежать на сервере, чтобы их можно было прочитать и вывести затем в броузер.

Для начала надо создать .html форму:
<form ENCTYPE='multipart/form-data' action='' method='post'>
<input TYPE='hidden' name='MAX_FILE_SIZE' value='450000'>
<br>Вложить файл, размер <b>не более 45000 байт</b>
<br><input class='dats' type='file' name='file_name' size='20'> 
<input type='submit' value='добавить'>
</form>

Из этой формы через массив $_FILES мы получим :
имя файла $_FILES['file_name']['name']
размер файла $_FILES['file_name']['size']
тип файла $_FILES['file_name']['type']
Кроме этого, форма ничего не отправит на сервер, если размер файла будет превышать 450000 байт, которые мы прописали в форме строкой: name='MAX_FILE_SIZE' value='450000'

Скрипт будет такой:

<?php
    // база картинок
$base_images = 'base_img.dat';

    // если нет файла с базой, то его создаем
if (! @file_exists ($base_images)){ @touch ($base_images); }

    // если хочет удалить файл
if (! empty ($_GET['del'])){
$content = '';
$name_f = str_replace ("\\","/", getcwd ())."/".$_GET['del'];
if (@ file_exists ($name_f)) { @unlink ($name_f); }
$general = file ( $base_images );
$lines = count ($general);
for ( $i = 0; $i < $lines; $i++ ){ 
list ($name,$size)= explode ("::", $general[$i]);
if ($_GET['del']==$name){ continue; }
$content .= $general[$i]; 
}
$fp = fopen ( $base_images, "w" );
fwrite ( $fp, $content );
fclose ( $fp ); 
}

    // печатаем форму посылки
print"
<form ENCTYPE='multipart/form-data' action='' method='post'>
<input TYPE='hidden' name='MAX_FILE_SIZE' value='450000'>
Добавьте файл с расширением <b>.jpeg</b>
<br>Вложить файл, размер <b>не более 450000 байт</b>
<br><input type='file' name='file_name' size='20'> 
<input type='submit' value='добавить'>
</form>
";
    // функция основная
function _Post_Files(){
if ( substr ( phpversion (),0,1)==4){ 
if ( ! empty ($HTTP_POST_FILES["file_name"]["name"])){ return $HTTP_POST_FILES; }
return false;
}
if ( ! empty ($_FILES["file_name"]["name"])){ return $_FILES; }
return false;
}

    // если сказали закачиваем файл
if (_Post_Files()){ $array_post=_Post_Files(); add_images($array_post); }

    // фукция, которая добавляет картинку
function add_images($arr){ 
global $base_images;
$fname = str_replace ("\\","/", getcwd ())."/".$arr["file_name"]["name"]; 
if (move_uploaded_file($arr["file_name"]["tmp_name"],$fname)){
$name_file = $arr["file_name"]["name"];
$size_file = $arr["file_name"]["size"];
}
if ( ! file_exists ($fname)){return print "\n<br><Error: Файл $fname не найден <br>\n";}
$content = '';
$general = file ( $base_images );
$lines = count ($general);
for ( $i = 0; $i < $lines; $i++ ){ $content .= $general[$i]; }
$content .= "$name_file::$size_file::\n"; 
$fp = fopen ( $base_images, "w" );
fwrite ( $fp, $content );
fclose ( $fp ); 
return print "\n<br><b>Файл: $name_file </b>($size_file байт) успешно загружен \n"; 
}

    // фукция, которая печатает закачанные картинки
function print_images($path){
$content = '<table>';
$general = file ( $path );
$lines = count ($general); 
$a=0;
for ($i = $lines-1; $i >= 0; $i--) {
if ( empty ($general[$i])) continue;
$a++;
list ($name,$size)= explode ("::", $general[$i]);
$name_f = str_replace ("\\","/", getcwd ())."/".$name;
if (! @file_exists ($name_f)) continue;
if ($a == 1) { $content .= "<tr>"; }
$content .= "<td valign='top' align='center'><a href='?del=".$name."'>".$name."</a><br><a href='".$name."' target='_blank'><img src='".$name."' alt='".$size." bt' border='0' width='150'></a></td>\n";
if ($a > 3) { $content .= "</tr>"; $a = 0; }
}
return $content."</tr></table>";
}

    // напечатаем картинки, что закачаны
print print_images($base_images);
?>
Теги:
upload
Добавлено: 02 Апреля 2018 21:44:47 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...