Начало arrow Пакети arrow Articles arrow Прехвърляне на файлове в php
Прехвърляне на файлове в php
Методът POST
Тази опция ще позволи транспортирането както на текстови, така и на файлове с друго съдържание. Чрез функциите на PHP ще имате пълен конгрол над това кой ще има право за транспортиране на файлове, а също и над това какво да бъде направено с транспортираните файлове.

PHP е способно да получава ъплоаднати файлове от всеки браузер, който подържа RFC-1867 (което включва Netscape Navigator 3 или следващите му версии, Microsoft Internet Explorer 3 с разширение от Microsoft или по-късните му версии).

Пример 1. Форма за ъплоадване на файлове
Формата за ъплоадване на файлове може да изглежда така:

<!-- Типът на енкодинга ТРЯБВА да бъде специфициран както е посочено по-надолу -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE трябва да е преди полето за посочване на фаил -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Името на входния елемент определя името в $_FILES array -->
    Изпрати файла: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

В случая __URL__ трябва да бъде заменено и насочено към съответния .php файл.
Скритото поле MAX_FILE_SIZE (размерът е в байтове) трябва да предхожда полето за посочване на файлове и неговата стойност определя максималният размер на файловете, които ще бъдат допуснати от php. Да се заобиколи тази настройка от страна на клиентската страна е съвсем лесно, така че не бива да се разчита, че по този начин е гарантирана максималната големина на прехвърляните на сървъра файлове. PHP настройките за максимален размер на файловете обаче, не могат да бъдат заобиколени. Този елемент на формата е хубава да бъде използван, за да предпази обикновения потребителя от чакането за трансфер на файлове, резултатът, от което ще бъде единствено съобщението, че файлът е твърде голям, за да бъде транспортиран.

Заблежка: Във вашата форма за трансфер на файлове задължително трябва да присъства атрибута enctype="multipart/form-data", в противен случай трансфера няма да се осъществи.

Общата променлива $_FILES съществува след PHP 4.1.0 (Вместо нея използвайте $HTTP_POST_FILES в по-ранни версии). Този масив ще съдържа цялата информация за ъплоаднатате файлове.

Съдържанието на $_FILES от примерната форма е показано по-надолу. Обърнете внимание, че за име на транспортирания файл се използва userfile, което е посочено в примерния скрипт по-горе.

$_FILES['userfile']['name']

оригиналното име на файла на клиентската машина.

$_FILES['userfile']['type']

типът на файла – ако браузерът осигурява тази информация. Например може да бъде "image/gif". Така или иначе на сървъра не се извършва проверка за коректността на тези данни, така че не ги приемайте за сигурни.

$_FILES['userfile']['size']

размерът в байтове на транспортирания файл.

$_FILES['userfile']['tmp_name']

временно име на файла, с което той бива складиран на сървъра

$_FILES['userfile']['error']

Код за грешка асоцииран с трансфера. Този елемент е добавен в PHP 4.2.0

По подразбиране транспортираните файлове ще бъдат складирани в общата temp директория на сървъра, с случай, че не бъде изрично посочена друга чрез променливата upload_tmp_dir в php.ini. Подразбиращата се temp директория на сървъра може да бъде променена чрез задаване на променливата на средата TMPDIR, в която PHP стартира. Ако я зададем използвайки putenv() вътре в скрипта, той няма да работи.

Пример 2. Валидация на транспортирания файл.

<?php
// В PHP версии, по-ранни от 4.1.0, ще трябва да се изпозва $HTTP_POST_FILES вместо
// of $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

?>


PHP скриптът, който посреща транспортирания файл описва каквато логика е необходима за обработката на файла. Например можете да използвате променливата $_FILES['userfile']['size'], за изхвърлите всички файлове, които са или прекалено малки или прекалено големи; променливата $_FILES['userfile']['type'], за да отстраните файловете, които не отговарят на определен критерий за типа на файла (последната е добре да използвате само като начало на серия от проверки, защото стойността й е изцяло под контрола на клиента и не се проверява на сървъра). След PHP 4.2.0 можете да използвате $_FILES['userfile']['error'] и да организирате логиката си в съответствие с кодовете за грешки. Така или иначе можете да изберете дали да изтриете транспортирания във временната директория файл или да го преместите другаде.

Ако във вашата форма не е посочен файл за трансфер, PHP ще върне $_FILES['userfile']['size'] като 0 и $_FILES['userfile']['tmp_name'] като празна стойност.

След края на заявката файлът във временната директория ще бъде изтрит в случай, че не е преместен другаде или преименуван.


Пример 3. Транспортиране на масив от файлове.

<form action="" method="post" enctype="multipart/form-data">
<p>Pictures:
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="submit" value="Send" />
</p>
</form>

    
<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "data/$name");
    }
}

?>

 
< Предишна   Следваща >

IT Новини

Апостол Тноковски се опитва да отговори на този въпрос, представяйки концептуален модел на компютър във формата на топка.

Продължава...
 

Допълнителни услуги


Атрибут

Описание

Цена

Хостинг

Уеб хостинг е услуга, която позволява качването на сайта Ви на сървър, така че да е видим за посетителите от цял свят денонощно.

100 лв./год.

Поддръжка

Ние сме готови да осигурим цялостна и частична професионална поддръжка на Вашия сайт. Поддръжката е също толкова важен  аспект, както и активното присъствие и дейност в интернет. Много често готовите сайтове не са обновявани и достатъчно добре поддържани, поради което не достигат ефективността, за която са проектирани.

договаряне

Продуктов каталог

Можете да представите продуктите си в интернет с минимални усилия. Продуктовият каталог включва снимка, описание на продукта, цена и т.н.

250 лв.

Skype

Предоставя възможност на потребителите да се свържат с Вас по Skype дирекно през сайта.

85 лв.

Разширена анкета

Неограничен бройвъпроси и отговори, добавяне на картинка във въпроса или отговора, различен тип отковори, e-mail известяване и потвърждаване и др.

80 лв.

Анкета

Позволява да направите проучване на потребителското мнение, относно определен продукт, услуга или въпрос.

40 лв.

Карта на сайта

Динамична карта на сайта, която подпомага пълното индексиране на страниците на вашия сайт от търсещите машини

55 лв.

Книга за гости

Посетителите имат възможност да оставят своите впечатления, препоръки и забележки.

80 лв.

Система за публикуване на новини

С минимални усилия, Вие можете да добавяте, изтривате и редактирате нивините всоя сайт.

140 лв.

Галерия

Интегрирана в сайта Ви галерия.

150 лв.

Малки обяви

Позволява на потребителите да въвеждат малки обяви

210 лв.

Система за управление на файлове

 

190 лв.

Система за управление на рекламни банери

Поставяне на рекламни полета във Вашия сайт.

150 лв.

Азбучен указател

Този компонент подрежда съдържанието във вашия сайт в азбучен ред

150 лв.

Чат

Позволява на посетителите на сайта ви да обменят кратки съобшения

50 лв.

Коментари

Позволява на посетителите да оставят своите коментари, относно вашите публикации

50 лв.

Календар

 

40 лв.

Часовник

 

35 лв.

Статистика

Статистика на посещенията

30 лв.

Допълнителни страници

 

15 лв./стр.

Езици

Всеки допълнителен език се таксува 30% от цената на проекта

30%