2017-02-16 6 views
0

мне нужно загрузить два файла с разными внутр Например:Как переименовать имя файла перед загрузкой с PHP

file_1.txt и file_image.png

, когда пользователь отправил два файла, используя закачать форму :

file_1.txt и file_image.png

перед тем move_uploaded_file мне нужно переименовать изображение, чтобы быть, как TXT. Имя файла:

file_1.txt file_1.jpeg

Я просто хочу, чтобы переименовать имя файла изображения, а не расширение

код что-то вроде этого:

switch($_REQUEST['action']) { 

    case "upload": 

     $Imagefile_temp = $_FILES['file']['tmp_name']; 
     $Textfile_temp = $_FILES['file']['tmp_name']; 

     $Imagefile_name = $_FILES['file']['name']; 
     $Textfile_name = $_FILES['file']['name']; 

     $ImageFileType = array('png' ,'jpg'); 
     $TextFileType = array('txt'); 



     $Image_extension = pathinfo($Imagefile_name, PATHINFO_EXTENSION); // holds the file extension of the file 
     $Text_extension = pathinfo($Textfile_name, PATHINFO_EXTENSION); //holds the file extension of the file 



     // //Declaring Path for uploaded images 
     $file_path = "uploads"; 

     //checks for duplicate files 
     if((!file_exists($file_path."/".$Imagefile_name)) || (!file_exists($file_path."/".$Textfile_name))) { 

      $j = 0; //Variable for indexing uploaded image 

      for ($i = 0; $i < count($_FILES['file']['name']); $i++) {//loop to get individual element from the array 

       if(in_array($Image_extension,$ImageFileType)) { 

        $Image_extension = explode('.', basename($_FILES['file']['name'][$i]));//explode file name from dot(.) 
        $file_extension = end($Image_extension); //store extensions in the variable 
        $target_path = $target_path . md5(uniqid()) . "." . $Image_extension[count($Image_extension) - 1];//set the target path with a new name of image 

        $j = $j + 1;//increment the number of uploaded images according to the files in array 

        $Imagefilestatus = move_uploaded_file($Imagefile_temp,$file_path."/"."image_".$Imagefile_name) ;//if file moved to uploads folder 

       } 


       if(in_array($Text_extension,$TextFileType)) { 

        $Text_extension = explode('.', basename($_FILES['file']['name'][$i]));//explode file name from dot(.) 

        $file_extension = end($Text_extension); //store extensions in the variable 

        $target_path = $target_path . md5(uniqid()) . "." . $Text_extension[count($Text_extension) - 1];//set the target path with a new name of image 

        $j = $j + 1;//increment the number of uploaded images according to the files in array  

        $Textfilestatus = move_uploaded_file($Textfile_temp,$file_path."/".$Textfile_name) ;//if file moved to uploads folder 

       } 
      } 
     } 
    }  

ответ

0

Вы можете просто взорвать текстовый файл из расширения и использовать его в качестве имени файла изображения при его перемещении:

$text_file_name = $_FILES["text"]["name"]; // give you the text file name 
$image_file_name = $_FILES["image"]["name"]; // give you the image file name 
$file_expensions = strtolower(end(explode(".", $image_file_name))); // give you the image extension and so you can use it later for saving the file 
$n = explode(".", $text_file_name, 1); 
$name = $n[0]; // get text file name 
$name = $name.".".$file_expensions; // this is new name of the image 

move_uploaded_file($file_tmp, "path/$name") 
+0

Хотя этот фрагмент кода приветствуется и может оказать некоторую помощь, он будет [значительно улучшен, если он содержит объяснение] (// meta.stackexchange.com/q/114762) из ​​* how * и * why * this решает проблему. Помните, что вы отвечаете на вопрос читателей в будущем, а не только на человека, который спрашивает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, и укажите, какие ограничения и допущения применяются. –

0
$name = 'Whatevernameyouwant.'.pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); 

pathinfo с параметром PATHINFO_EXTENSION возвращает расширение файла.

0

Я предполагаю, что вы знаете, что представленный здесь код позволяет любому пользователю с привилегиями на загрузку upload and execute PHP code.

(причина, по которой я упоминаю об этом, заключается в том, что есть много возможностей для улучшения в другом месте - и если уязвимость безопасности будет эксплуатироваться, вам следует действительно подумать о начале с нуля с этого).

Будет ли ваше расширение всегда быть .jpg или .png? (как насчет .jpeg?)

Мне нужно переименовать изображение, чтобы оно было как txt. имя файла

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

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

У вас уже есть расширение, которое вы хотите применить в $ Image_extension

В то время как вы могли бы просто сделать ....

$destination_name=$destination_path 
    . str_replace('.txt', '.' . $image_extension, $Textfile_name); 

Однако это не будет работать, как ожидалось, если $ imageFile_name содержит более одного экземпляр '.txt'.

Вы можете использовать PCREs, чтобы указать, что вы должны применяться только изменения в конце строки:

$destination_name=preg_replace("/txt$/i", $image_extension, $Textfile_name); 

Или взять последние 4 символа от $ Textfile_name затем добавить расширение изображения.

$destination_name=substr($Textfile_name, 0, -3) . $image_extension; 

Или strrev имени текстового файла, заменить «TXT» с strrev ($ image_extension) с лимитом 1, то strrev результата обеспечить замещаются только конец строки.

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

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

+0

... а также при условии, что есть причина, по которой вы не просто используете '$ destination_path. $ Textfile_name. "" , $ image_extension' – symcbean

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