Стандартът XHTML и протоколът HTTP предлагат възможност за качване (upload) на файлове от клиентския компътър на диска директно на сървъра на уеб сайта. Това значително подобри динамиката и функицоналността на уеб сайтовете. За качване на файлове се използва HTTP форма със специална стойност на атрибута enctype. За всеки файл, който е необходим да бъде качен в рамките на една заявка, трябва отделен input таг.
При изпращането на формата, браузърът кодира съдържанието на всички избрани файлове в тялото на заявката. На сървъра файловете се записват във системната TMP директория сървъра (web server), освен ако в ини парам. upload_tmp_dir е указано друго. Всеки файл се записва във временната директория със служебно име. Отговорност на PHP програмиста е да премести файловете в желаната директория на сървъра и да ги запише там под желаните от него имена. За тази цел той разполага с масива $_FILES, съдържащ вс. данни закачените файлове, с функцията move_uploaded_file() и с някои други допълнителни функциии.
Масивът $_FILES е двумерен. Като първи индекс се използва името на input тага за поредния качен файл. За всеки файл са достъпни данните:
$_FILES['userfile']['name'] – оригин. име на файла, качен през input тага с име userfile;
$_FILES['userfile']['tmp_name'] – името, под което този файл е записан във временната директория;
$_FILES['userfile']['type'] – MIME типът на качения файл (text/html, image/gif…);
$_FILES['userfile']['size'] – размерът на качения файл (в байтове);
$_FILES['userfile']['error'] – код на възникналата при качването на файла грешка;
Ф-ята move_uploaded_file(file,destination) търси указания файл в TMP директорията и го премества в указаната дестинация. Ф-ята връща true, ако преместването е успешно и false, ако файлът не е открит, или преместването му не може да се извърши (несъществуваща дестинация, липса на права за достъп…)
В следващия пример е показано качването на файл в спе-циално създадена поддиректория:
<form method=”post” action=”uploads.php”
enctype=”multipart/form-data”>
<input type=”file” name=”my_cv” /><br />
<input type=”submit” name=”uploadBtn” />
</form>
<?php //Файлът uploads.php
if( isset($_FILES['my_cv']['name']) && $_FILES['my_cv']['name'] != ” )
{
if( !file_exists(’uploads_dir’) )
mkdir(’uploads_dir’);
$res = move_uploaded_file( $_FILES['my_cv']['tmp_name'], ‘uploads_dir/’.$_FILES['my_cv']['name']);
if( $res )
echo ‘<p>Файлът ‘.$_FILES['my_cv']['name'].
‘ с размер ‘.$_FILES['my_cv']['size'].
‘ байта бе успешно качен.</p>’;
else
echo ‘<p>Грешка при качването !</p>’;
}
?>
Преместването на качения файл в PHP програмирането се прави само ако е налице посочен за качване файл. Преди това е добре да се направи проверка съществува ли желаната дестинация, и ако е необх. – да се създаде.
При неуспех на качването, за да се открие причината за това, може да се изследва кодът на грешката, върната в $_FILES['userfile']['error']. Например при надвишаване на допустимия размер на файлове за качване, върната грешка е UPLOAD_ERR_INI_SIZE.
No related posts.
Web design and SEO topics: PHP, програмиране, уеб сайтове, файлове