| ЗАГАЛЬНІ ВІДОМОСТІ
Щоб користувач міг завантажити файл на сервер з web-страницы, на цій сторінці має бути присутньою форма з параметром заголовка enctype, рівному "multipart/form-data", а також із спеціальним полем типа file (виглядає як поле введення імені файлу з кнопкою "Огляд", натискує на яку, можна відображувати вікно вибору файлу) і кнопкою submit (див., наприклад, ріс.7.3). Як тільки ця кнопка натискуватиме, браузер почне передавати файл, вказаний в полі типа file, на сервер. У заголовку форми також слід вказати параметр action, значенням якого має бути ім'я сторінки з оброблювальним завантажений файл сценарієм.
Завантаження файлу на сервер уміють здійснювати практично всі браузери (лише найстаріші моделі Microsoft
Internet Explorer і Netscape Navigator цього не можуть), а сприйняти її можуть всі web-серверы (окрім CERN і деяких найпростіших), у тому числі і найпоширеніший - Apache. Після того,
як файл повністю завантажений на сервер, він поміщається в його тимчасову теку і знаходиться там до тих пір, поки web-сервер не закінчить обробляти і віддавати браузеру користувача ту сторінку, ім'я якої було вказане в параметрі action форми завантаження файлу. Після повної видачі сторінки користувачеві файл віддаляється. Звідси витікає, що на цій сторінці мають бути обов'язково присутніми команди, що переміщають цей файл в яку-небудь теку.
Сторінці, вказаній
в параметрі action заголовка форми, передаються декілька змінних ( Якщо в конфігураційному файлі РНР - php.ini - параметр regis-ter_globals встановлений в on) тих, що містять інформацію про завантажений файл. Саме на їх основі сценарій на ній зможе працювати із завантаженим файлом. Крім того, ці ж самі змінні поміщаються в масив $HTTP_POST_FILES (
Якщо в конфігураційному файлі РНР -php.ini - параметр track_varsустановлен в on), а в РНР версій 4.1 і вище -і в масив SFILES (на відміну від змінних і масиву SHTTPPOSTFILES цей масив за умовчанням доступний і у всіх функціях, розміщених на сторінці з програмою-обробником завантажених файлів).
Ось ці змінні:
- 1. Змінна, що має те ж ім'я, що і поле з типом file у вихідній формі. Якщо воно виглядало як < input name= "Uploadf ile" type= " f ile">, то змінна матиме ім'я $uploadfile (і відповідно ще $HTTP_POST_FILES['uploadfile']['tmp_name'], $_FILES [ ' uploadf ile ' ] [ ' tmp_name ' ]). У цю змінну записується те ім'я (тимчасове, таке, що створюється автоматично), яке завантажений файл має в теці тимчасових файлів. Саме з ним працюватимуть команди копіювання файлу.
Якщо
у вихідній формі присутнє декілька полів типа file з різними іменами, то для кожного з них створюється своя змінна із значенням, що відноситься до відповідного файлу.
- 2. Змінна, що має ім'я "Змінна 1
jiame", - тобто до імені першої змінної просто приписується
горизонтальна риска і слово name, наприклад, для вищезгаданого прикладу
її ім'я виглядатиме як $uploadf ile_name (ну і, зрозуміло, те ж саме
значення набудуть елементи вищезазначених масивів
$HTTP_POST_FILES['uploadfile']['name'], $_FILES ['uploadf ile ' ] ['name
' ]). Її значенням є вихідне ім'я файлу в системі відправника.
- 3. Змінна, що має ім'я "Змінна
1_size". Її значення -размер завантаженого файлу в байтах.
- 4. Змінна, що має ім'я "Змінна 1_type". Її значення -тіп завантаженого файлу згідно специфікації MIME (наприклад, "image/gif").
Всі ці змінні можна використовувати в PHP-сценарии, розташованому на вказаній в параметрі action заголовка форми, належній передавальній файл сторінці. Для копіювання файлу використовується команда сміттю ("ім'я копійованого файлу (і дорога до нього)", "дорога до теки, в яку потрібно файл скопіювати і його нове ім'я там"). Дорога до файлу в тимчасовій теці можна не вказувати (вона використовується за умовчанням), а дорога до теки, куди файл має бути поміщений, повинна вказуватися відносний від того каталога, в якому знаходиться сторінка з оброблювальним завантажений файл сценарієм.
Про видалення файлу з тимчасової теки після копіювання його в потрібний каталог можна не думати - це, як вже було сказано, станеться автоматично.
|