PHP + appending Uploaded filename

Discussion in 'Web Design and Development' started by citizenzen, Apr 17, 2010.

  1. citizenzen macrumors 65816

    Joined:
    Mar 22, 2010
    #1
    I'm working with Easy PHP Upload - version 2.31 and it's working well for a noob like me. But one function that I'd like to add or change is for it to append the filename if a file of that same name already exists. What it currently does is to replace the filename with strtotime("now"). I haven't been able to modify the code to keep the old name while adding strtotime("now")... but then I'm not the brightest star in the sky.

    Any help would be appreciated. Thanks!

    Code:
    function set_file_name($new_name = "") { // this "conversion" is used for unique/new filenames 
    		if ($this->rename_file) {
    			if ($this->the_file == "") return;
    			$name = ($new_name == "") ? strtotime("now") : $new_name;
    			sleep(3);
    			$name = $name.$this->get_extension($this->the_file);
    		} else {
    			$name = str_replace(" ", "_", $this->the_file); // space will result in problems on linux systems
    		}
    		return $name;
    	}
     
  2. angelwatt Moderator emeritus

    angelwatt

    Joined:
    Aug 16, 2005
    Location:
    USA
    #2
    Try changing the following line to the next one.
    PHP:
    $name = ($new_name == "") ? strtotime("now") : $new_name;
    // new line, using original name plus time
    $name = ($new_name == "") ? $name.strtotime("now") : $new_name;
     
  3. citizenzen thread starter macrumors 65816

    Joined:
    Mar 22, 2010
    #3
    I get the following error: Notice: Undefined variable: name in /Applications/XAMPP/xamppfiles/htdocs/upload_class.php on line 55

    Line 55 is the one I replaced.

    It still uploads the file and still replaces the name with the timestamp.
     
  4. angelwatt Moderator emeritus

    angelwatt

    Joined:
    Aug 16, 2005
    Location:
    USA
    #4
    OK, the function was done weird, I was confused on what it's doing.
    PHP:
    $name = ($new_name == "") ? $new_name.strtotime("now") : $new_name;
    If that doesn't work it would be helpful to see the line that calls this function, namely what gets passed into the function.
     
  5. citizenzen thread starter macrumors 65816

    Joined:
    Mar 22, 2010
    #5
    Here's the whole shabang...

    PHP:
    /*Easy PHP Upload - version 2.31
    A easy to use class for your (multiple) file uploads

    Copyright (c) 2004 - 2006, Olaf Lederer
    All rights reserved.*/
     
    class file_upload {

        var 
    $the_file;
        var 
    $the_temp_file;
        var 
    $upload_dir;
        var 
    $replace;
        var 
    $do_filename_check;
        var 
    $max_length_filename 100;
        var 
    $extensions;
        var 
    $ext_string;
        var 
    $language;
        var 
    $http_error;
        var 
    $rename_file// if this var is true the file copy get a new name
        
    var $file_copy// the new name
        
    var $message = array();
        var 
    $create_directory true;
        
        function 
    file_upload() {
            
    $this->language "en"// choice of en, nl, es
            
    $this->rename_file true;
            
    $this->ext_string "";
        }
        function 
    show_error_string($br "<br />\n") {
            
    $msg_string "";
            foreach (
    $this->message as $value) {
                
    $msg_string .= $value.$br;
            }
            return 
    $msg_string;
        }
    function 
    set_file_name($new_name "") { // this "conversion" is used for unique/new filenames 
            
    if ($this->rename_file) {
                if (
    $this->the_file == "") return;
                
    $name = ($new_name == "") ? strtotime("now") : $new_name;
                
    sleep(3);
                
    $name $name.$this->get_extension($this->the_file);
            } else {
                
    $name str_replace(" ""_"$this->the_file); // space will result in problems on linux systems
            
    }
            return 
    $name;
        }
        function 
    upload($to_name "") {
            
    $new_name $this->set_file_name($to_name);
            if (
    $this->check_file_name($new_name)) {
                if (
    $this->validateExtension()) {
                    if (
    is_uploaded_file($this->the_temp_file)) {
                        
    $this->file_copy $new_name;
                        if (
    $this->move_upload($this->the_temp_file$this->file_copy)) {
                            
    $this->message[] = $this->error_text($this->http_error);
                            if (
    $this->rename_file$this->message[] = $this->error_text(16);
                            return 
    true;
                        }
                    } else {
                        
    $this->message[] = $this->error_text($this->http_error);
                        return 
    false;
                    }
                } else {
                    
    $this->show_extensions();
                    
    $this->message[] = $this->error_text(11);
                    return 
    false;
                }
            } else {
                return 
    false;
            }
        }
        function 
    check_file_name($the_name) {
            if (
    $the_name != "") {
                if (
    strlen($the_name) > $this->max_length_filename) {
                    
    $this->message[] = $this->error_text(13);
                    return 
    false;
                } else {
                    if (
    $this->do_filename_check == "y") {
                        if (
    preg_match("/^[a-z0-9_]*\.(.){1,5}$/i"$the_name)) {
                            return 
    true;
                        } else {
                            
    $this->message[] = $this->error_text(12);
                            return 
    false;
                        }
                    } else {
                        return 
    true;
                    }
                }
            } else {
                
    $this->message[] = $this->error_text(10);
                return 
    false;
            }
        }
        function 
    get_extension($from_file) {
            
    $ext strtolower(strrchr($from_file,"."));
            return 
    $ext;
        }
        function 
    validateExtension() {
            
    $extension $this->get_extension($this->the_file);
            
    $ext_array $this->extensions;
            if (
    in_array($extension$ext_array)) { 
                
    // check mime type hier too against allowed/restricted mime types (boolean check mimetype)
                
    return true;
            } else {
                return 
    false;
            }
        }
        
    // this method is only used for detailed error reporting
        
    function show_extensions() {
            
    $this->ext_string implode(" "$this->extensions);
        }
        function 
    move_upload($tmp_file$new_file) {
            if (
    $this->existing_file($new_file)) {
                
    $newfile $this->upload_dir.$new_file;
                if (
    $this->check_dir($this->upload_dir)) {
                    if (
    move_uploaded_file($tmp_file$newfile)) {
                        
    umask(0);
                        
    chmod($newfile 0644);
                        return 
    true;
                    } else {
                        return 
    false;
                    }
                } else {
                    
    $this->message[] = $this->error_text(14);
                    return 
    false;
                }
            } else {
                
    $this->message[] = $this->error_text(15);
                return 
    false;
            }
        }
        function 
    check_dir($directory) {
            if (!
    is_dir($directory)) {
                if (
    $this->create_directory) {
                    
    umask(0);
                    
    mkdir($directory0777);
                    return 
    true;
                } else {
                    return 
    false;
                }
            } else {
                return 
    true;
            }
        }
        function 
    existing_file($file_name) {
            if (
    $this->replace == "y") {
                return 
    true;
            } else {
                if (
    file_exists($this->upload_dir.$file_name)) {
                    return 
    false;
                } else {
                    return 
    true;
                }
            }
        }
        function 
    get_uploaded_file_info($name) {
            
    $str "File name: ".basename($name)."\n";
            
    $str .= "File size: ".filesize($name)." bytes\n";
            if (
    function_exists("mime_content_type")) {
                
    $str .= "Mime type: ".mime_content_type($name)."\n";
            }
            if (
    $img_dim getimagesize($name)) {
                
    $str .= "Image dimensions: x = ".$img_dim[0]."px, y = ".$img_dim[1]."px\n";
            }
            return 
    $str;
        }
        
    // this method was first located inside the foto_upload extension
        
    function del_temp_file($file) {
            
    $delete = @unlink($file); 
            
    clearstatcache();
            if (@
    file_exists($file)) { 
                
    $filesys eregi_replace("/","\\",$file); 
                
    $delete = @system("del $filesys");
                
    clearstatcache();
                if (@
    file_exists($file)) { 
                    
    $delete = @chmod ($file0644); 
                    
    $delete = @unlink($file); 
                    
    $delete = @system("del $filesys");
                }
            }
        }
        
    // this function creates a file field and if $show_alternate is true it will show a text field if the given file already exists
        // there is also a submit button to remove the text field value 
        
    function create_file_field($element$label ""$length 25$show_replace true$replace_label "Replace old file?"$file_path ""$file_name ""$show_alternate false$alt_length 30$alt_btn_label "Delete image") {
            
    $field = ($label != "") ? "<label>".$label."</label>\n" "";
            
    $file_field "<input type=\"file\" name=\"".$element."\" size=\"".$length."\" />\n";
            
    $file_field .= ($show_replace) ? "<span>".$replace_label."</span><input type=\"checkbox\" name=\"replace\" value=\"y\" />" "";
            if (
    $file_name != "" && $show_alternate) {
                
    $field .= "<input type=\"text\" name=\"".$element."\" size=\"".$alt_length."\" value=\"".$file_name."\" readonly=\"readonly\"";
                
    $field .= (!@file_exists($file_path.$file_name)) ? " title=\"".sprintf($this->error_text(17), $file_name)."\" />\n" " />\n";
                
    $field .= "<input type=\"checkbox\" name=\"del_img\" value=\"y\" /><span>".$alt_btn_label."</span>\n";
            } else {
                
    $field .= $file_field;
            } 
            return 
    $field;
        }
        
    // some error (HTTP)reporting, change the messages or remove options if you like.
        
    function error_text($err_num) {
            switch (
    $this->language) {
                case 
    "nl":
                
    $error[0] = "Het bestand is succesvol gekopieerd.";
                
    $error[1] = "Het bestand is te groot, controlleer de max. toegelaten bestandsgrootte.";
                
    $error[2] = "Het bestand is te groot, controlleer de max. toegelaten bestandsgrootte.";
                
    $error[3] = "Fout bij het uploaden, probeer het nog een keer.";
                
    $error[4] = "Fout bij het uploaden, probeer het nog een keer.";
                
    $error[10] = "Selecteer een bestand.";
                
    $error[11] = "Er zijn alleen bestanden van dit type toegestaan: <b>".$this->ext_string."</b>";
                
    $error[12] = "Sorry, de bestandsnaam bevat tekens die niet zijn toegestaan. Gebruik alleen nummer, letters en het underscore teken. <br>Een geldige naam eindigt met een punt en de extensie.";
                
    $error[13] = "De bestandsnaam is te lang, het maximum is: ".$this->max_length_filename." tekens.";
                
    $error[14] = "Sorry, de opgegeven directory bestaat niet!";
                
    $error[15] = "Uploading <b>".$this->the_file."...Fout!</b> Sorry, er is al een bestand met deze naam aanwezig.";
                
    $error[16] = "Het gekopieerde bestand is hernoemd naar <b>".$this->file_copy."</b>.";
                
    $error[17] = "Het bestand %s bestaat niet.";
                break;
                case 
    "de":
                
    $error[0] = "Die Datei: <b>".$this->the_file."</b> wurde hochgeladen!"
                
    $error[1] = "Die hochzuladende Datei ist größer als der Wert in der Server-Konfiguration!"
                
    $error[2] = "Die hochzuladende Datei ist größer als der Wert in der Klassen-Konfiguration!"
                
    $error[3] = "Die hochzuladende Datei wurde nur teilweise übertragen"
                
    $error[4] = "Es wurde keine Datei hochgeladen"
                
    $error[10] = "Wählen Sie eine Datei aus!."
                
    $error[11] = "Es sind nur Dateien mit folgenden Endungen erlaubt: <b>".$this->ext_string."</b>";
                
    $error[12] = "Der Dateiname enthält ungültige Zeichen. Benutzen Sie nur alphanumerische Zeichen für den Dateinamen mit Unterstrich. <br>Ein gültiger Dateiname endet mit einem Punkt, gefolgt von der Endung."
                
    $error[13] = "Der Dateiname überschreitet die maximale Anzahl von ".$this->max_length_filename." Zeichen."
                
    $error[14] = "Das Upload-Verzeichnis existiert nicht!"
                
    $error[15] = "Upload <b>".$this->the_file."...Fehler!</b> Eine Datei mit gleichem Dateinamen existiert bereits.";
                
    $error[16] = "Die hochgeladene Datei ist umbenannt in <b>".$this->file_copy."</b>.";
                
    $error[17] = "Die Datei %s existiert nicht.";
                break;
                
    //
                // place here the translations (if you need) from the directory "add_translations"
                //
                
    default:
                
    // start http errors
                
    $error[0] = "File: <b>".$this->the_file."</b> successfully uploaded!";
                
    $error[1] = "The uploaded file exceeds the max. upload filesize directive in the server configuration.";
                
    $error[2] = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form.";
                
    $error[3] = "The uploaded file was only partially uploaded";
                
    $error[4] = "No file was uploaded";
                
    // end  http errors
                
    $error[10] = "Please select a file for upload.";
                
    $error[11] = "Only files with the following extensions are allowed: <b>".$this->ext_string."</b>";
                
    $error[12] = "Sorry, the filename contains invalid characters. Use only alphanumerical chars and separate parts of the name (if needed) with an underscore. <br>A valid filename ends with one dot followed by the extension.";
                
    $error[13] = "The filename exceeds the maximum length of ".$this->max_length_filename." characters.";
                
    $error[14] = "Sorry, the upload directory doesn't exist!";
                
    $error[15] = "Uploading <b>".$this->the_file."...Error!</b> Sorry, a file with this name already exitst.";
                
    $error[16] = "The uploaded file is renamed to <b>".$this->file_copy."</b>.";
                
    $error[17] = "The file %s does not exist.";
            }
            return 
    $error[$err_num];
        }
    }
     
  6. angelwatt Moderator emeritus

    angelwatt

    Joined:
    Aug 16, 2005
    Location:
    USA
    #6
    Try,
    PHP:
    $name = ($new_name == "") ? $this->the_file.strtotime("now") : $new_name;
     
  7. citizenzen thread starter macrumors 65816

    Joined:
    Mar 22, 2010
    #7
    Sorry angelwatt, that didn't work either.

    Here's first part part of the form. Sorry... I should have included this earlier. :eek:

    PHP:
    include_once($_SERVER['DOCUMENT_ROOT']."/upload_class.php");
    require($_SERVER['DOCUMENT_ROOT']."/attach_mailer_class.php");
     
    $error = '';
     
    $error = '';
    if(isset($_POST['Submit'], $_FILES['upload'])) {
        $my_mail = new attach_mailer('myname', 'emailaddress', 'emailaddress', '', '', 'test mail');
        $my_mail->text_body = 'Hello World';
        $num_files = count($_FILES['upload']['name']);
        for ($i = 0; $i < $num_files; $i++) {
            if ($_FILES['upload']['name'][$i] != '') {
     
                $my_upload = new file_upload;
                $my_upload->upload_dir = "./upload/";
                $my_upload->extensions = array(".png", ".jpg", ".gif", ".pdf", ".ppt", ".pub", ".doc", ".zip", ".eps", ".tif", ".psd", ".indd");
                $my_upload->the_temp_file = $_FILES['upload']['tmp_name'][$i];
                $my_upload->the_file = $_FILES['upload']['name'][$i];
                $my_upload->http_error = $_FILES['upload']['error'][$i];
                $my_upload->replace = "n";
                if ($my_upload->upload()) {
                    $full_path = $my_upload->upload_dir.$my_upload->file_copy;
                    $my_mail->add_attach_file($full_path);
                    $error .= 'File "'.$my_upload->file_copy.'" uploaded';
                } else {
                    break;
                    $error = 'Error uploading file(s)';
                }
            }
        }
        if ($my_mail->process_mail()) {
            $error .= 'Mail send!';
        } else {
            $error .= 'Error sending mail';
        }
    }

    <form  action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post">
      <label for="upload[]">File 1:</label>
      <input type="file" name="upload[]" size="30"><br />
      <label for="upload[]">File 2:</label>
      <input type="file" name="upload[]" size="30"><br />
      <label for="upload[]">File 3:</label>
      <input type="file" name="upload[]" size="30"><br />
      <!-- Add here more file fields if you need. -->
      <input type="submit" name="Submit" value="Submit">
     
  8. citizenzen thread starter macrumors 65816

    Joined:
    Mar 22, 2010
    #8
    Please ignore my previous post. I think I found a solution, but need to investigate it further before sharing it with you.

    Thanks for all your help.
     

Share This Page