suess0r Posted August 29, 2007 Share Posted August 29, 2007 Hello, This is a semi-thorough question so bare with me please... I have an upload page where a user selects the file from his/her computer and a text field to rename the file ex: "JoeSmith". Everything works fine, but on the next page where I post the data to I would like to know the new file name AND the extension that follows. The problem: Since I am renaming the filename it receives the same extension (.gif, .jpg, etc) as the original file type. The only problem is that I can post the filename but I can't figure out how to get the extension along with it. Here's my Code for the Upload page <?php include ($_SERVER['DOCUMENT_ROOT']."/2007/classes/upload/upload_class.php"); //classes is the map where the class file is stored (one above the root) $max_size = 1024*250; // the max. size for uploading $my_upload = new file_upload; $my_upload->upload_dir = $_SERVER['DOCUMENT_ROOT']."/files/new/"; // "files" is the folder for the uploaded files (you have to create this folder) $my_upload->extensions = array(".png", ".jpg", ".pdf", ".psd", ".gif"); // specify the allowed extensions here // $my_upload->extensions = "de"; // use this to switch the messages into an other language (translate first!!!) $my_upload->max_length_filename = 50; // change this value to fit your field length in your database (standard 100) $my_upload->rename_file = true; if(isset($_POST['Submit'])) { $my_upload->the_temp_file = $_FILES['upload']['tmp_name']; $my_upload->the_file = $_FILES['upload']['name']; $my_upload->http_error = $_FILES['upload']['error']; $my_upload->replace = (isset($_POST['replace'])) ? $_POST['replace'] : "n"; // because only a checked checkboxes is true $my_upload->do_filename_check = (isset($_POST['check'])) ? $_POST['check'] : "n"; // use this boolean to check for a valid filename $new_name = (isset($_POST['name'])) ? $_POST['name'] : ""; if ($my_upload->upload($new_name)) { // new name is an additional filename information, use this to rename the uploaded file $full_path = $my_upload->upload_dir.$my_upload->file_copy; $info = $my_upload->get_uploaded_file_info($full_path); // ... or do something like insert the filename to the database } } ?> Here is my Form that submits to itself and then once it's complete presents the next-step button where I post the $newname <form name="form1" enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['../PHP_SELF']; ?>"> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_size; ?>"> <table width="375" border="0"> <tr> <td width="18"> </td> <td bgcolor="#4583CB"><div align="center" class="style5">Choose Your Design File </div></td> </tr> <tr> <td height="45"> </td> <td><div align="center"><span class="style4"><input type="file" name="upload" size="30"></span></div></td> </tr> <tr> <td width="18"> </td> <td bgcolor="#4583CB"><div align="center" class="style5">Name your design - <span class="style15"><span class="style5">No Extensions!</span></span> (ex: JonDoe) </div></td> </tr> <tr> <td height="45"> </td> <td><div align="center"><span class="style4"><input type="text" name="name" size="30"></span></div></td> </tr> <tr> <td height="34" colspan="2"> <br clear="all"> <p><?php echo $my_upload->show_error_string(); ?></p> <?php if (!isset($info)) echo"<div align='center'><input style='margin-left:3px;' type='submit' name='Submit' value='Upload Your Document'></div>"; if (isset($info)) echo "<blockquote>".nl2br($info)."</blockquote>"; ?></td> </tr> </table> </form> </table> <span class="style4"><br /> </span> <?php $newname = $_POST['file_copy']; if (!isset($info)) echo ""; if (isset($info)) { echo '<br>'.$newname; echo "<form name='form2' enctype='multipart/form-data' method='post' action='../products/postcard3.php'>"; echo "<input type='hidden' name='name' value='".$newname."'>"; echo "<INPUT TYPE='IMAGE' SRC='../images/bottom-more-bg.gif' ALT='Submit' />"; echo "</form>"; //echo "<p class='more'><a href=''>Next Step - Preview Design! </a></p>"; } ?> And lastly the Upload_Class <?php 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 = false; $this->ext_string = ""; } function show_error_string() { $msg_string = ""; foreach ($this->message as $value) { $msg_string .= $value."<br />\n"; } 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($directory, 0777); 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 ($file, 0644); $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] = "Foto succesvol kopieert."; $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] = "Het 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." teken."; $error[14] = "Sorry, het 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]; } } ?> So... With this all said and done - I would like to POST the new file name + the extension so "JoeSmith.gif" is the URL i would like to post so I can display it on the next page. Sorry for the long post but it was necessary for me to explain it in full. Thank you!!! <3 me Quote Link to comment https://forums.phpfreaks.com/topic/67245-problem-getting-new-filename-extension/ Share on other sites More sharing options...
Daniel0 Posted August 29, 2007 Share Posted August 29, 2007 I didn't bother to read all your code, but you say that it will receive the same extension as the old filename. That means you must know the extension, so can't you just use something like $new_filename.$extension? Quote Link to comment https://forums.phpfreaks.com/topic/67245-problem-getting-new-filename-extension/#findComment-337301 Share on other sites More sharing options...
suess0r Posted August 29, 2007 Author Share Posted August 29, 2007 The actual full new file name is displayed in the Upload_class here: $str = "File name: ".basename($name)."\n"; I just don't know how to call that variable when i'm out of the class and i'm getting ready to post Quote Link to comment https://forums.phpfreaks.com/topic/67245-problem-getting-new-filename-extension/#findComment-337310 Share on other sites More sharing options...
Daniel0 Posted August 29, 2007 Share Posted August 29, 2007 echo $object->var or something like that. Quote Link to comment https://forums.phpfreaks.com/topic/67245-problem-getting-new-filename-extension/#findComment-337319 Share on other sites More sharing options...
suess0r Posted August 30, 2007 Author Share Posted August 30, 2007 I'm still confused - which variable is the $object and which is the var? Quote Link to comment https://forums.phpfreaks.com/topic/67245-problem-getting-new-filename-extension/#findComment-337583 Share on other sites More sharing options...
suess0r Posted August 30, 2007 Author Share Posted August 30, 2007 sorry, I posted this when all the madness was happening on the site. can anyone shed some light on this?? Quote Link to comment https://forums.phpfreaks.com/topic/67245-problem-getting-new-filename-extension/#findComment-337865 Share on other sites More sharing options...
Daniel0 Posted August 30, 2007 Share Posted August 30, 2007 I don't really get your problem and I don't want to read all that code to find out what might be the problem. You'll have to be more precise. Quote Link to comment https://forums.phpfreaks.com/topic/67245-problem-getting-new-filename-extension/#findComment-337955 Share on other sites More sharing options...
suess0r Posted August 30, 2007 Author Share Posted August 30, 2007 I understand - sorry for so much code... Here's the cliff notes version ;x Upload_Class puts all the fields in a string to echo out "success, or fail, error testing, etc" when the user tries to upload.. -During Success, In that string it echo's out the new file name: $str = "File name: ".basename($name)."\n"; -example: File name: Joe_Shmo.jpg <- it displays the new file name AND the extension I want to save that new (filename and the extension) as a seperate variable that I can post to my final page.. In my upload.php how can I access the .basename($name) that's in the $str in the Upload_Class? Right now I do $newname = $_POST['file_copy']; - And I get the new filename WITHOUT the extension. I'm not that familiar with using classes so that's what I'm having difficulties with right now.. Let me know if I can elaborate more.. Quote Link to comment https://forums.phpfreaks.com/topic/67245-problem-getting-new-filename-extension/#findComment-337995 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.