Как переименовать файл, если имя уже существует? - PullRequest
1 голос
/ 12 августа 2011

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

Код:

$sql="SELECT filename FROM doc_u WHERE person_id= '$pid'";  

    $result=mysql_query($sql);

    $query = mysql_query($sql) or die ("Error: ".mysql_error());

 if ($result == "")
 {
 echo "";
  }
   echo "";


    $rows = mysql_num_rows($result);

    if($rows == 0)
    {
   print("");

    }
    elseif($rows > 0)
    {
   while($row = mysql_fetch_array($query))
    {

   $existing = $row['filename'];

   print("");
   }

   }

     if ( $filename === $existing ) {
$filename = $uniqueidgenerator.strrchr($_FILES['filename']['name'], ".");

    } else {
     $filename = $_FILES['filename']['name'];;
    }

//After checking it will move the files

      if(move_uploaded_file($_FILES['filename']['tmp_name'],$upload_path . $filename))
     echo ''; 
  else
     echo ''; 

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Учитывая, что вы уже используете базу данных, позвольте мне сказать это как можно проще: НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ПРЕДСТАВЛЕННОЕ ПОЛЬЗОВАТЕЛЕМ FILENAME.Вместо этого сохраняйте каждый загруженный файл по соответствующему идентификационному номеру первичного ключа соответствующей записи в БД (вы используете автоматически увеличивающиеся целые числа для идентификаторов, верно?).Сохраните имя файла в базе данных, и теперь вы можете иметь столько файлов «text.txt», сколько хотите, потому что каждый фактический файл будет называться «1», «53» и «207» и т. Д.

1 голос
/ 12 августа 2011

Здесь не так много кода. Я подозреваю, что $filename не инициализирован должным образом. Так что в вашем if ( $filename === $existing ) это действительно говорит if(undefined === undefined), что всегда будет правдой.

Я не понимаю, почему файлы будут повреждены. Это может быть совсем другая проблема.

Кроме того, следите за своим SQL-заявлением. Это SQL-инъекция, ожидающая своего появления. Было бы намного лучше, если бы вы использовали подготовленные заявления или, по крайней мере, использовали mysql_escape_string. Это, конечно, не рекомендуется в пользу подготовленных заявлений.

Лучшим рабочим процессом было бы сначала вставить в базу данных строку с метаданными файла, а затем переименовать файл, используя полученный вами первичный ключ. Он всегда будет уникальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...