Главная страница  /  Занятия  /  #12  /  Загрузка файлов на сервер средствами PHP

Загрузка файлов на сервер средствами PHP

Задание:

Рассказать о загрузке файлов на сервер средствами PHP.

phtml-документ (index.phtml):

   <!DOCTYPE html>
   
   <html lang="ru">
   
    <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Загрузка файлов на сервер средствами PHP</title>
     <link rel="stylesheet" href="styles.css">
     <script src="scripts.js"></script>
    </head>
   
    <body>
     <h1>Загрузка файлов на&nbsp;сервер:</h1>
     <form method="post" action="action.php" enctype="multipart/form-data">
      <input type="text" name="fileToUploadInput" id="fileToUploadInput" disabled>
      <input type="file" name="fileToUpload" id="fileToUpload">
      <label for="fileToUpload">Выберите файл</label>
      <input type="submit" value="Загрузить">
     </form>
     <div>
   <?
    $filesList = scandir('uploaded_files');
    if(sizeof($filesList) > 2)
    {
     echo '<b>Загруженные файлы:</b><br><br>';
     foreach($filesList as $fileName)
     {
      if($fileName != '.' && $fileName != '..') echo $fileName.'<br>';
     }
     echo '<br><a href="cleardirectory.php">Удалить все загруженные файлы</a>';
    }
   ?>
     </div>
    </body>
   
   </html>

CSS–разметка (styles.css):

   h1						{ font-family: Arial, Tahoma, Verdana; font-size: 20px; }
   form						{ display: block; width: 100%; max-width: 500px; box-sizing: border-box; background-color: #f0f0f0; padding: 15px; font-family: Arial, Tahoma, Verdana; font-size: 16px; color: #404040; }
   label					{ margin: 0; display: block; float: right; width: 31%; padding: 4px 3px 4px 3px; text-align: center; background-color: #e0e0e0; border: 1px solid #a0a0a0; cursor: pointer; font-family: Arial, Tahoma, Verdana; font-size: 16px; }
   input[type=text]:disabled			{ width: 65%; display: block; float: left; box-sizing: border-box; background-color: #ffffff; border: 1px solid #e0e0e0; font-family: Arial, Tahoma, Verdana; font-size: 16px; outline: 0; color: #404040; padding: 4px; margin: 0; }
   input[type=submit]				{ width: 130px; height: 26px; border: 1px solid #a0a0a0; font-size: 16px; background-color: #e0e0e0; color: #404040; outline: 0; margin-top: 20px; }
   input[type=file]				{ width: 0.1px; height: 0.1px; opacity: 0; overflow: hidden; position: absolute; z-index: -1; }
   div						{ margin-top: 20px; font-family: Arial, Tahoma, Verdana; font-size: 16px; }

JS–скрипты (scripts.js):

   window.onload = function()
   {
    document.getElementById('fileToUpload').onchange = function()
    {
     document.getElementById('fileToUploadInput').value = document.getElementById('fileToUpload').files[0].name;
    };
   };

PHP–скрипты:

action.php:

   <?
    require("{$_SERVER['DOCUMENT_ROOT']}/includes/lessonnumber.inc");
    $uploadToPath = $_SERVER['DOCUMENT_ROOT'].'/lessons/'.$fullLessonNumber.'/files-uploading/result/uploaded_files/';
    $LocationString = 'Location: https://'.$_SERVER['HTTP_HOST'].'/lessons/'.$fullLessonNumber.'/files-uploading/result/';
   
    if(isset($_FILES['fileToUpload']['name']) && $_FILES['fileToUpload']['name'])
    {
     if(move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $uploadToPath.$_FILES['fileToUpload']['name']))
     {
      chmod($uploadToPath.$_FILES['fileToUpload']['name'], 0644);
      if(!filesize($uploadToPath.$_FILES['fileToUpload']['name']))
      {
       if(file_exists($uploadToPath.$_FILES['fileToUpload']['name'])) unlink($uploadToPath.$_FILES['fileToUpload']['name']);
       echo 'Не&nbsp;удалось загрузить файл на&nbsp;сервер';
       exit;
      }
      else
      {
       echo 'Файл '.$_FILES['fileToUpload']['name'].' успешно загружен на сервер';
       header($LocationString);
       exit;
      }
     }
     else
     {
      echo 'Не&nbsp;удалось загрузить файл на&nbsp;сервер';
      header($LocationString);
      exit;
     }
    }
    else
    {
     echo 'Не&nbsp;удалось загрузить файл на&nbsp;сервер';
     header($LocationString);
     exit;
    }
   ?>

cleardirectory.php:

   <?
    require("{$_SERVER['DOCUMENT_ROOT']}/includes/lessonnumber.inc");
    $deletePath = $_SERVER['DOCUMENT_ROOT'].'/lessons/'.$fullLessonNumber.'/files-uploading/result/uploaded_files/';
    $LocationString = 'Location: https://'.$_SERVER['HTTP_HOST'].'/lessons/'.$fullLessonNumber.'/files-uploading/result/';
   
    $filesList = scandir('uploaded_files');
    foreach($filesList as $fileName)
    {
     unlink($deletePath.$fileName);
    }
   
    header($LocationString);
    exit;
   ?>

Результат:

Результат выполнения задания можно посмотреть здесь.