Nasıl php ile yükleme sonrasında dosya yeniden adlandırmak mı?

5 Cevap php

Nasıl dosya yüklenmeden girmeden önce ya da sonra yeniden adlandırmak mı? Ben sadece dosya adı değil, uzatma yeniden adlandırmak istiyorum.

$changeTXT = $_SESSION['username'];
$uploaderName = strtolower($changeTXT);
$changeTXT = strtolower($changeTXT);
$changeTXT = ucfirst($changeTXT);
$filelocation = $_POST['userfile'];
$filename = $_POST['filename'];
$max_size = $_POST['MAX_FILE_SIZE'];

$file = $_FILES['userfile'];

$allowedExtensions = array("wma", "mp3", "wav");

function isAllowedExtension($fileName) {
  global $allowedExtensions;

  return in_array(end(explode(".", $fileName)), $allowedExtensions);
}

if($file['error'] == UPLOAD_ERR_OK) {
  if(isAllowedExtension($file['name'])) {

$uploaddir = "uploads/".$uploaderName."/";

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {

    echo "Thank you for uploading your music!<br /><br />";

} else {

    echo "Your file did not upload.<br /><br />";

}

    echo "\n";

    echo "<a href='index.php'>Return</a> to index.<br /><br />$uploaddir";

} else {

    echo "You have tried to upload an invalid file type.<br /><br />";

  }

} else die("Cannot upload");

5 Cevap

Kullanırken move_uploaded_file Eğer dosya almak için olsun, böylece istediğiniz bir şey seçebilirsiniz.

Eğer dosya yüklerken, onun move_uploaded_file() bu dosyayı taşımak için izin verir ve bu size de dosyanın adını ayarlamak gerekir, geçici bir adla bir geçici dizine koydu.

Ben Verot Dosya Yükleme sınıfını kontrol öneririm. Bu php üzerinden dosya yükleme ve acı bir sürü iyileştirir, ve kod daha okunabilir / maintainable yapar.

İşte link to the class ve belgelerdir.

As to the precise answer to your question: To give a new name to an uploaded file, put it as second argument to your move_uploaded_file() function.

Eğer uzatma tutmak istiyorum, çünkü bir değişkene ilk saklayın:

$ext = explode('.',$_FILES['uploaded']['name']);
$extension = $ext[1];

Siz (burada, kendisine eklenmiş bir zaman damgası ile) yeni bir isim oluşturmak için dosya kök adı kullanabilirsiniz:

$newname = $ext[0].'_'.time();

Eğer bir dosya yükledi, ve form girdi değişken adı o myfile_2343544.png 'olacak "myfile.png" demek;

Şimdi, hedef dizin, $ Newname var ve fonksiyonun ikinci argümanı ayarlamak için dosyanın uzantısı yerel yolu birleştirmek:

$full_local_path = 'path/to/your/filefolder/'.$newname.$extension ;
move_uploaded_file($_FILES['uploaded']['tmp_name'], $full_local_path);

Bunu yaptığınızda

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {

Sadece istenilen dosya adının bütün yoluna $ yuklenecek_dosya set; yani "yüklenenler / mynewfilename.jpg"

Neden sadece farklı bir isimle kaydetmek değil:

Sadece $ yuklenecek_dosya değişkenin adını değiştirmek:

$uploadfile = $uploaddir . "somefilename" . end(explode(".", $file['name']));

Eğer kod biraz refactord eğer Ancak incitmez.

Dosya adını belirlemek için move_uploaded_file ikinci param kullanabilirsiniz. Ilk param senin / tmp klasöründeki dosyanın dosya adı ve ikinci param file dir ve yeni dosya adıdır.

move_uploaded_file($_FILES['file']['tmp_name'], "/new/file/dir/".[the new file name]);

Bu eski bir soru olduğunu biliyorum ama net bir cevap yoktu.