Jump to content

Problem getting new filename extension!?!


suess0r

Recommended Posts

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

Link to comment
https://forums.phpfreaks.com/topic/67245-problem-getting-new-filename-extension/
Share on other sites

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..

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.