Как создать форму загрузки с загрузкой и пользовательским именем файла в php?

#php #forms

#php #формы

Вопрос:

Привет, я пытаюсь создать форму загрузки на php. Содержит, ввод для загрузки, ввод текста (имя, которое будет присвоено загруженному файлу) и кнопку отправки. Однако я мало php, что знаю, поэтому я не знаю, как на самом деле связать то, что я ввел, с <input type="text"/> именем файла при загрузке. Если кто-то может помочь? Спасибо.

Вот мой код:

 <!DOCTYPE html>
<html>
<head>
  <title>Tu peux uploader ici ta video.</title>
</head>
<body>
  <form enctype="multipart/form-data" action="upload.php" method="POST">
    <p>Upload your file</p>
    <input type="file" name="uploaded_file"></input><br />
    <input type="text" name="file-name"></input><br />  <!-- [ASK]: How to make this the file name of the uploaded file -->
    <input type="submit" value="Upload"></input>
  </form>
</body>
</html>
<?PHP
  if(!empty($_FILES['uploaded_file']))
  {
    $path = "uploads/";
    $path = $path . basename( $_FILES['uploaded_file']['name']);
​
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {
      echo "The file ".  basename( $_FILES['uploaded_file']['name']). 
      " has been uploaded";
    } else{
        echo "There was an error uploading the file, please try again!";
    }
  }
?>
 

Комментарии:

1. Как вы получаете доступ к обычным полям формы после отправки в PHP, это то, что вы можете прочитать практически в любом руководстве для начинающих, на случай, если вы все еще не знаете. И целевое имя файла задается в move_uploaded_file вызове.

Ответ №1:

move_uploaded_file ( строка $filename , строка $destination ) принимает filename, который является именем загруженного файла, а destination — местом назначения перемещаемого файла. Обратите внимание, что каталог назначения должен существовать; move_uploaded_file() не создаст его автоматически. Итак, давайте получим имя сейчас…

  • $_FILES[‘uploaded_file’][‘tmp_name’] дает вам временное имя файла, в котором загруженный файл был сохранен на сервере, например. C:UsersUSERAppDataLocalTempphpD3C.tmp в то время как
  • $_FILES[‘uploaded_file’] [‘name’] дает вам фактическое имя, которое вам нужно для извлечения расширения, например. myfile.jpg
  • Чтобы связать то, что вы ввели, сначала получите его через $_POST[«file-name»] , затем объедините с расширением. Используйте pathinfo для получения исходного расширения.

Измените свой код на become…

  <!DOCTYPE html>
<html>
<head>
  <title>Tu peux uploader ici ta video.</title>
</head>
<body>
  <form enctype="multipart/form-data" action="upload.php" method="POST">
    <p>Upload your file</p>
    <input type="file" name="uploaded_file"></input><br />
    <input type="text" name="file-name"></input><br />  <!-- [ASK]: How to make this the file name of the uploaded file -->
    <input type="submit" value="Upload"></input>
  </form>
</body>
</html>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {

  if(!empty($_FILES['uploaded_file']))
  {
    $file_parts = pathinfo(basename( $_FILES['uploaded_file']['name'])); //access the actual name instead of tmp_name
    //just pick the extension of the file_parts and concatenate it to your path
    $path = 'images/';
    $path = $path . $_POST["file-name"] . "." . $file_parts['extension'] ;
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {
      echo "The file ". basename($path) ." has been uploaded";
    } else{
        echo "There was an error uploading the file, please try again!";
    }
  }
}
?>
 

Это должно дать вам желаемое имя. Итак, если вы загружаете файл dog.php и в текстовом поле у вас есть cow, результирующее имя должно быть cow.php .

Результат: введите описание изображения здесь

Комментарии:

1. дайте мне знать, если это ответит на ваш запрос. Также не забудьте отметить мой ответ как правильный, если он работает. Спасибо.

2. почти готово, спасибо. Единственное, что, когда я, наконец, переместил его в $path . Я теряю расширение файла этого конкретного файла.

3. Теперь вы там. Я отредактировал свой ответ, см. Выше. Спасибо.