2015-05-19 3 views
0

Я ищу какую-то помощь с моим PHP-скриптом для моего сайта, я преподаю небольшой класс учеников, а некоторые спрашивали, как именно мы на самом деле положить его в Интернет? Поэтому я создал сценарий загрузки php, чтобы он мог загрузить его на мой сайт, чтобы поделиться со своими друзьями.PHP Предотвращение загрузки файлов, удаление пробелов в загруженных файлах

У меня есть две проблемы:

1) Как именно я сделать это так, когда кто-то загружает файл будет удалить все пробелы в загруженном имени файлов? 2) Как именно я могу это сделать, чтобы я мог запретить людям загружать определенные файлы? (Например, JPG файлы, PNG файлы внутр)

Heres мой код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    <head> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
     <meta name="viewport" content= 
     "width=device-width, initial-scale=1" /> 
     <title> 
     File Upload 
     </title> 
     <link rel="icon" type="image/png" href="icons/favicon.png" /> 
     <link href="css/bootstrap.min.css" rel="stylesheet" type= 
     "text/css" /> 
     <script src="js/bootstrap.min.js" type="text/javascript"></script> 
     <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script> 
     <script src="js/bootstrap-filestyle.js" type="text/javascript"></script> 
     <script src= 
     "https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js" 
     type="text/javascript"></script> 
     <script src= 
     "https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js" 
     type="text/javascript"></script> 
    </head> 
    <body> 
     <div class="container" style= 
     "margin-top: 30px;margin-bottom: 30px"> 
     <div class="row"> 
      <div class="span12"> 
       <h2 style="text-align: center;"> 
        <strong>Alydus.net File Upload</strong> 
       </h2> 
       <div class="well"> 
        <form role="form" enctype="multipart/form-data" method= 
        "post"> 
        <h3> 
         Upload a file 
        </h3> 
        <hr /> 
        <div class="row"> 
         <div class="col-xs-6"> 
          <div class="form-group"> 
           <input type="file" name="example" id="input01" 
           class="filestyle" data-buttonbefore="true" /> 
           <?php 
           $dir_upload = '/usr/local/nginx/html/upload/uploads/'; 
           $max_size = 200000000; 

           $file = $_FILES['example']; 

           if ($file['size'] <= $max_size && $file['size'] > 0) { 
             $new_name = time() . '-' . $file['name']; 
             $copied = copy($file['tmp_name'], $dir_upload . $new_name); 

             if ($copied) { 
               print("Successfully uploaded to server, you can download/view the uploaded file now."); 
             } else { 
               print("An unknown error has occurred."); 
             } 
           } else { 
             print(""); 
           } 
           ?> 
          </div> 
         </div> 
         <div class="col-xs-2"> 
          <div class="form-group"> 
           <button type="submit" class= 
           "btn btn-primary">Upload File</button> <a href= 
           "http://alydus.net/upload/uploads/<?=$new_name; ?>" 
           class="btn btn-primary" role= 
           "button">Download/view uploaded file</a> 
          </div> 
         </div> 
        </div> 
        </form> 
       </div> 
       <div class="container" style= 
        "margin-top: 30px;margin-bottom: 30px"> 
        <div class="row"> 
        <div class="span12"> 
         <div class="well"> 
          <form role="form" enctype="multipart/form-data" 
           method="post"> 
           <h3> 
           Instructions 
           </h3> 
           <hr /> 
           <div class="row"> 
           <div class="col-xs-6"> 
            <div> 
             <ul> 
              <li>Click choose file 
              </li> 
              <li>Select your file you'd like to 
              upload 
              </li> 
              <li>Click upload file once 
              </li> 
              <li>When the file is finished you 
              should see a complete message, then 
              click view/download uploaded file 
              </li> 
              <li>You can then copy the link and send 
              it to anyone so they can view your 
              images, your html files, and even 
              download your files! 
              </li> 
             </ul> 
            </div> 
           </div> 
           </div> 
          </form> 
         </div> 
        </div> 
        </div> 
        <div class="container" style= 
        "margin-top: 30px;margin-bottom: 30px"> 
        <div class="row"> 
         <div class="span12"> 
          <div class="well"> 
           <form role="form" enctype="multipart/form-data" 
           method="post"> 
           <h3> 
            Files Uploaded 
           </h3> 
           <hr /> 
           <div class="row"> 
            <div class="col-xs-6"> 
             <div style= 
              'width: 1015px; height: 2500px; overflow: hidden;'> 
              <center> 
              <iframe style= 
               'width: 1015px; height: 2500px;' src= 
               'http://alydus.net/upload/uploads/index.php'> 
              </iframe> 
              </center> 
             </div> 
            </div> 
            <div class="col-xs-2"></div> 
            <center> 
             © <?php echo date("Y"); ?> Copyright 
             Alydus.net 
            </center> 
           </div> 
           </form> 
          </div> 
         </div> 
        </div> 
        </div> 
       </div> 
      </div> 
     </div> 
     </div> 
    </body> 
</html> 

Вы можете просмотреть его в действии на http://alydus.net/upload

+0

Есть слишком много возможных ответов, или хорошие ответы будут слишком длинными для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или изолировать проблему, на которую можно ответить в нескольких параграфах. Я бы предположил, что вы нашли форум для разработки (возможно, [reddit] (https://www.reddit.com/)?) выработать общие положения. Затем, когда у вас возникнут проблемы с кодированием, вернитесь в StackOverflow, и мы будем рады помочь. –

+0

Извините, Джей, я не искал «общей» помощи, мне просто нужны какие-то методы, с которыми я мог бы это сделать. Я сейчас обновляю свой пост. Спасибо. – Alydus

ответ

1

1) Как именно я сделать это так, когда кто-то загружает файл будет удалить все пробелы в имени загруженных файлов?

Это может быть достигнуто путем использования preg_replace("/\s/g", "", $new_name); Пример, который заменяет все пространство с помощью T. https://regex101.com/r/tR8uJ7/1

2) Как именно я сделать это так, я могу помешать людям с загрузкой некоторых типов файлов? (например, файлы jpg, файлы png ext)

Перед перемещением загруженного файла вы можете проверить расширение файла с помощью регулярного выражения, например. preg_match("/^(.*)\.(png|jpeg|exe)$/", $filename); Это регулярное выражение соответствует любой строке, начинающейся с любого символа, и заканчивается либо .png, .jpg, либо .exe. https://regex101.com/r/tJ7tH6/1

Вы можете отрегулировать его в соответствии с вашими потребностями. Если вы не знакомы с поиском регулярных выражений в Интернете, там есть много учебников. Имейте в виду, что расширения файлов могут быть легко обмануты.

Здесь мы идем с образцомЭто не тестировался, но должен работать, иначе сказать мне, что это не работает.

      <?php 
           $dir_upload = ''; 
           $max_size = 200000000; 
           $regexAllowedFileExtensions = "/^(.*)\.(png|jpeg|exe)$/"; 

           $file = $_FILES['example']; 

           if ($file['size'] <= $max_size && $file['size'] > 0) { 
            if (preg_match($regexAllowedFileExtensions, $file['name'])) 
            { 
              $filename_temp = str_replace(" ", "", $file['name']); 
              $new_name = time() . '-' . $filename_temp; 

              $copied = move_uploaded_file($file['tmp_name'], __DIR__ . '/' . $new_name); 

              if ($copied) { 
               print("Successfully uploaded to server, you can download/view the uploaded file now."); 
              } else { 
               print("An unknown error has occurred."); 
              } 
            } 
            else{ 
             print("The file type is not allowed."); 
            } 
           } else { 
            print(""); 
           } 
          ?> 
+0

Где именно следует помещать preg_replace ("/ \ s/g", "", $ new_name); в моем php-коде? Я попробовал это выше, если ($ file ['size'] <= $ max_size && $ file ['size']> 0) {и несколько других мест, но он все еще заставляет загруженные файлы иметь пробелы, например: http://alydus.net/upload/uploads/1432060176-Homemade%20Grenade.png – Alydus

+0

Я обновил сценарий с помощью фрагмента, который должен работать. См. Свой общий html/php с приведенным выше фрагментом php: http://www.codeshare.io/kWEnT – AMartinNo1

+0

Если вы перейдете на http://alydus.net/upload, я обновил его с помощью кодового кода.io, после загрузки, когда вы идете посмотреть файл, он загружает этот действительно очень странный файл без расширения файла и только номер tmp и тире? – Alydus

Смежные вопросы