HTML, Excel, Word, SEOPHP êóðñ äëÿ ÷àéíèêîâ ⇒ Çàãðóçêà ôàéëîâ

PHP äëÿ "÷àéíèêîâ"

Èíñòðóìåíòû
Âûáèðàåì IDE
Âûáèðàåì Web-ñåðâåð
Âûáèðàåì ÑÓÁÄ
Ñòðóêòóðà ÿçûêà PHP
Ïåðâûé øàã
Ñèíòàêñèñ
Òèïû äàííûõ
Ïåðåìåííûå è êîíñòàíòû
Îïåðàòîðû
Âûðàæåíèÿ
Óïðàâëÿþùèå ñòðóêòóðû
Ôóíêöèè
Êëàññû
Èñêëþ÷åíèÿ
Îøèáêè
Ìàññèâû
Ãëîáàëüíûå ìàññèâû
Cookies
Ñåññèè
Çàãðóçêà ôàéëîâ
Ðàáîòà ñ ôàéëàìè
Ðàáîòà ñ ôàéëàìè íà äèñêå
Ðàáîòà ñ äàííûìè â ôàéëå
Ïðèìåð óïðàâëåíèÿ ôàéëàìè
Ðàáîòà ñ áàçàìè äàííûõ
Ïîäêëþ÷åíèå
Àíàëèç ðåçóëüòàòîâ
Âûïîëíåíèå çàïðîñîâ
Îòêëþ÷åíèå
Ïðèìåð: îòñëåæèâàíèå ïîëüçîâàòåëåé
Ðàáîòà â ñåòè
Îòïðàâêà ïî÷òû
Áåçîïàñíîñòü
HTTP-àóòåíòèôèêàöèÿ
Çàùèòà ëîãèíîì è ïàðîëåì
Àâòîìàòèçàöèÿ
Ðåãóëÿðíûå âûðàæåíèÿ â PHP
Èíòåãðàöèÿ
PHP è JavaScript

 

Çàãðóçêà ôàéëîâ


Àâòîð: Àðòåìüåâ Ñåðãåé Èãîðåâè÷
ICQ: 438856621
email: _spin_@bk.ru

Ïðàêòè÷åñêè â êàæäîì ïðîåêòå ðàçðàáîò÷èê ñòàëêèâàåòñÿ ñ íåîáõîäèìîñòüþ çàãðóçêè ôàéëîâ íà ñåðâåð. Ôîòîãðàôèè, êàðòèíêè, äîêóìåíòû, àðõèâû è ìíîãîå äðóãîå ìîæåò áûòü çàãðóæåíî íà ñåðâåð ïîñðåäñòâîì web-èíòåðôåéñà (÷åðåç áðàóçåð).


Çàãðóçêà äàííûõ íà ñåðâåð ìîæåò ïðîèñõîäèòü îäíèì èç äâóõ ìåòîäîâ: GET èëè POST. Ìåòîä GET ïîäðàçóìåâàåò, ÷òî âñå ïàðàìåòðû ïåðåäàþòñÿ â ñòðîêå URL. Íàïðèìåð, ñòðîêà:

    http://localhost/index.php?name=myname&page=10

îïðåäåëÿåò çàïðîñ GET ê ñòðàíèöå index.php. Ïðè ýòîì ñêðèïòó ïåðåäàþòñÿ ïàðàìåòðû "name" è "page" ñî çíà÷åíèÿìè "myname" è "10" ñîîòâåòñòâåííî. Êàê âèäèòå, çàïðîñ ñîñòîèò èç ïàð "èìÿ=çíà÷åíèå", îáúåäèí¸ííûõ ÷åðåç "&". Çàïðîñ îòäåëÿåòñÿ îò àäðåñà ñòðàíèöû çíàêîì âîïðîñà "?".

Íî GET íå ïîäõîäèò äëÿ ïåðåäà÷è áîëüøèõ äàííûõ. Äëÿ ýòîãî ñóùåñòâóåò ìåòîä POST. Ýòîò ìåòîä ïåðåäà¸ò äàííûå ñêðûòî îò ïîëüçîâàòåëÿ, à àäðåñ ñòðàíèöû îñòà¸òñÿ íåèçìåííûì. Òåîðåòè÷åñêè, ìåòîä POST ïîçâîëÿåò ïåðåäàâàòü îãðîìíûå áëîêè äàííûõ, íî áîëüøèíñòâî ïðîâàéäåðîâ óñòàíàâëèâàþò æåñòêîå îãðàíè÷åíèå â 5-10 ìåãàáàéò.

Äëÿ ðåàëèçàöèè çàãðóçêè ôàéëà íåîáõîäèìî ñíàáäèòü ïîëüçîâàòåëÿ ñîîòâåòñòâóþùåé ôîðìîé. Äëÿ çàãðóçêè ôàéëîâ ïðåäíàçíà÷åí òåã input òèïà file.

    <form action="receiver.php" method="post"
        enctype="multipart/form-data">

        Âûáåðèòå ôàéë äëÿ çàãðóçêè: 

        <input type="file" name="ufile" /><br />

        <input type="submit" name="send" value="Îòïðàâèòü!" />
    </form>

Ïîëüçîâàòåëü âûáèðàåò íóæíûé ôàéë, íàæèìàåò êíîïêó "Îòïðàâèòü!", ïîñëå ÷åãî áðàóçåð ïåðåäà¸ò óêàçàííûé ôàéë íà ñåðâåð. Ïî îêîí÷àíèè çàãðóçêè ôàéëà çàïóñêàåòñÿ receiver.php, è åìó àâòîìàòè÷åñêè ñòàíîâÿòñÿ äîñòóïíû âñå ïåðåäàííûå â ôîðìå äàííûå.

Ñïèñîê çàãðóæåííûõ ôàéëîâ õðàíèòñÿ â ãëîáàëüíîì ìàññèâå $_FILES. Ýòî àññîöèàòèâíûé ìàññèâ, ãäå êàæäûé ýëåìåíò ñîäåðæèò îïèñàíèå îäíîãî èç ôàéëîâ. Ðàññìîòðèì íà ïðèìåðå:

<?php
  // èíèöèàëèçèðóåì íóæíûå ïåðåìåííûå
  $filename = '';
  $filepath = '';
  $filetype = '';

  // ïðîâåðÿåì, ÷òî ôàéë çàãðóæàëñÿ
  if(isset($_FILES['ufile']) &&
      $_FILES['ufile']['error'] != 4)
  {
    // ïðîâåðÿåì, ÷òî ôàéë çàãðóçèëñÿ áåç îøèáîê
	if($_FILES['ufile']['error'] != 1 &&
        $_FILES['ufile']['error'] != 0)
	{
	  $error = $_FILES['ufile']['error'];
	  $errors []= 'Îøèáêà: Ôàéë íå çàãðóæåí.'.
                    ' Êîä îøèáêè: ' . $error;
	}
	else
    {
      // ôàéë çàãðóæåí íà ñåðâåð

      // ïðîâåðÿåì ôàéë íà ìàêñèìàëüíûé ðàçìåð
	  $filesize = $_FILES['ufile']['size'];
	  if($_FILES['ufile']['error'] == 1 ||
            $filesize > 3145728)
	  {
	   	$filesize = ($filesize != 0)?
            sprintf('(%.2f Ìá)' , $filesize / 1024): '';
	   	die('Îøèáêà: Ðàçìåð ïðèêðåïë¸ííîãî ôàéëà '.
            $filesize.' áîëüøå äîïóñòèìîãî (3 Ìá).');
	  }
	  else
	  {
	    $filename = $_FILES['file']['name'];
	   	$filepath = $_FILES['file']['tmp_name'];
	   	$filetype = $_FILES['file']['type'];
	   	if($this->filetype == null ||
            $this->filetype == '')
	   	  $this->filetype = 'unknown/unknown';
	  }
	}
  }

  echo 'Óñïåøíî çàãðóæåí ôàéë: ' . $filename;

?>

Âñå çàãðóæåííûå ôàéëû ñîõðàíÿþòñÿ ñåðâåðîì âî âðåìåííîì êàòàëîãå è àâòîìàòè÷åñêè óäàëÿþòñÿ ïîñëå çàâåðøåíèÿ ñêðèïòà. Åñëè âàì íåîáõîäèìî ñîõðàíèòü ôàéë íà ñåðâåðå - åãî íàäî ïåðåìåñòèòü â îäèí èç êàòàëîãîâ ñàéòà. Äëÿ ýòîãî ñëóæèò ñïåöèàëüíàÿ ôóíêöèÿ move_uploaded_file(). Îá÷íî îíà èñïîëüçóåòñÿ â ïàðå ñ ôóíêöèåé is_uploaded_file(), êîòîðàÿ ïîçâîëÿåò îïðåäåëèòü, áûë ëè ôàéë çàãðóæåí ÷åðåç ôîðìó. Íàïðèìåð:

<?php
    // $filename - èìÿ çàãðóæåíîãî ôàéëà
    if(is_uploaded_file($filename))
        move_uploaded_file($filename,
            'files/' . basename($filename));
    // ôàéë áóäåò ïåðåìåù¸í â êàòàëîã files/
?>

Èíôîðìàöèÿ î êàæäîì çàãðóæåííîì ôàéëå ïðåäñòàâëÿåòñÿ â ñêðèïòå êàê ýëåìåíû ìàññèâà $_FILES. Èìÿ ýëåìåíòà îïðåäåëÿåòñÿ àòðèáóòîì name òåãà ôîðìû.  íàøåì ñëó÷àå àòðèáóò name ðàâåí "ufile", çíà÷èò äàííûå îá ýòîì ôàéëå áóäóò õðàíèòüñÿ â ýëåìåíòå $_FILES['ufile'].

Êàæäûé ýëåìåíò $_FILES òàê æå ÿâëÿåòñÿ ìàññèâîì, ñîäåðæàùèì ïÿòü ýëåìåíòîâ ñ ôèêñèðîâàííûìè èìåíàìè:

$_FILES['ufile']['name'] Ñîäåðæèò èñõîäíîå èìÿ ôàéëà, êàêèì îíî áûëî íà êîìïüþòåðå ïîëüçîâàòåëÿ.
$_FILES['ufile']['type'] Ñîäåðæèò MIME-òèï ôàéëà. Íàïðèìåð, äëÿ jpeg-èçîáðàæåíèÿ áóäåò ñîäåðæàòü "image/jpeg".
$_FILES['ufile']['size'] Ñîäåðæèò èñòèííûé ðàçìåð ïåðåäàííîãî ôàéëà â áàéòàõ.
$_FILES['ufile']['tmp_name'] Ñîäåðæèò ïîëíûé ïóòü ñ çàãðóæåííîìó íà ñåðâåð ôàéëó. Åñëè âàì íå íóæíî õðàíèòü çàãðóæåííûé ôàéë íà ñåðâåðå - ìîæíî ïîëüçîâàòüñÿ ýòèì ïàðàìåòðîì äëÿ îáðàùåíèÿ ê ôàéëó.
$_FILES['ufile']['error'] Ñîäåðæèò êîä îøèáêè, åñëè òàêîâàÿ èìåëà ìåñòî. Åñëè îøèáîê íåò - ñîäåðæèò 0.

Ðàçìåð çàãðóæàåìûõ ôàéëîâ ìîæåò çíà÷èòåëüíî ìåíÿòüñÿ îò ïðîâàéäåðà ê ïðîâàéäåðó. Íåêîòîðûå àäìèíèñòðàòîðû âîîáùå çàïðåùàþò çàãðóçêó ôàéëîâ.  ýòîì ñëó÷àå ôàéë âñ¸ ðàâíî ìîæåò çàãðóçèòüñÿ, ñåðâåð åãî óäàëèò, à ñêðèïòó ñîîáùèò, ÷òî ôàéë áûë, íî óæå óäàë¸í.



 íà÷àëî ñòðàíèöû



 íà÷àëî ñòðàíèöû