'image/bmp', '.gif'=>'image/gif', '.jpg'=>'image/jpeg', '.jpeg'=>'image/jpeg', '.pdf'=>'application/pdf', '.png'=>'image/png', '.zip'=>'application/zip'); // new in 2.33 (search google for a complete list)
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;
/*
ver. 2.32
Added vars for file and directory permissions, check also the methods move_upload() and check_dir().
*/
var $fileperm = 0644;
var $dirperm = 0755;
function file_upload() {
$this->language = 'en'; // choice of en, nl, es
$this->rename_file = false;
$this->ext_string = '';
}
function show_error_string($br = ' ') {
$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;
}
/* New in version 2.33 */
function validateMimeType() {
$ext = $this->get_extension($this->the_file);
if ($this->the_mime_type == $this->valid_mime_types[$ext]) {
return true;
} else {
$this->message[] = $this->error_text(18);
return false;
}
}
/* Added here the mime check in ver. 2.33 */
function validateExtension() {
$extension = $this->get_extension($this->the_file);
$ext_array = $this->extensions;
if (in_array($extension, $ext_array)) {
if (!empty($this->the_mime_type)) {
if ($this->validateMimeType()) {
return true;
} else {
return false;
}
} else {
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 , $this->fileperm);
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, $this->dirperm);
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;
}
}
}
/*
ver. 2.32
Method get_uploaded_file_info(): Replaced old \n line-ends with the PHP constant variable PHP_EOL
*/
function get_uploaded_file_info($name) {
$str = 'File name: '.basename($name).PHP_EOL;
$str .= 'File size: '.filesize($name).' bytes'.PHP_EOL;
if (function_exists('mime_content_type')) {
$str .= 'Mime type: '.mime_content_type($name).PHP_EOL;
}
if ($img_dim = getimagesize($name)) {
$str .= 'Image dimensions: x = '.$img_dim[0].'px, y = '.$img_dim[1].'px'.PHP_EOL;
}
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
/*
ver. 2.32
Method create_file_field(): Minor code clean up (better code formatting and replaced double with single quotes)
*/
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 = '';
if ($label != '') $field = '
';
$field = '
';
if ($show_replace) $field .= '
'.$replace_label.'
';
if ($file_name != '' && $show_alternate) {
$field .= '
' : ' />';
$field .= '
'.$alt_btn_label.'';
}
return $field;
}
// some error (HTTP)reporting, change the messages or remove options if you like.
/* ver 2.32
Method error_text(): Older Dutch language messages are re-written, thanks Julian A. de Marchi. Added HTTP error messages (error 6-7 introduced with newer PHP versions, error no. 5 doesn't exists)
*/
function error_text($err_num) {
switch ($this->language) {
case 'nl':
$error[0] = 'Bestand '.$this->the_file.' staat nu op de server.';
$error[1] = 'Dit bestand is groter dan de toegestaane upload bestandgrootte in de server configuratie.';
$error[2] = 'Dit bestand is groter dan de MAX_FILE_SIZE parameter welke in de html formulier werdt gespecificiëerd.';
$error[3] = 'De upload is helaas mislukt. Slechts een deel van het bestand is bij de server aangekomen. Probeer het opnieuw.';
$error[4] = 'De upload is helaas mislukt. Geen betrouwbare verbinding met de server kwam tot stand. Probeer het opnieuw.';
$error[6] = 'De map voor tijdelijke opslag ontbreekt. ';
$error[7] = 'Het schrijven op de server is mislukt. ';
$error[8] = 'Een PHP extensie is gestopt tijdens het uploaden. ';
// end http errors
$error[10] = 'Selecteer een bestand om te uploaden.';
$error[11] = 'Uitsluitend bestanden van de volgende types zijn toegestaan: '.$this->ext_string.'';
$error[12] = 'Helaas heeft het gekozen bestand karakters die niet zijn toegestaan. Gebruik uitsluitend cijfers, letters, en onderstrepen. Een geldige naam eindigt met een punt met daarop volgend het extensietype.';
$error[13] = 'De bestandsnaam is echter te lang, en mag een maximum van '.$this->max_length_filename.' tekens bevatten.';
$error[14] = 'De gekozen map werdt niet gevonden.';
$error[15] = 'Een bestand met dezelfde naam ('.$this->the_file.') bestaat al op de server. Probeer opnieuw met een andere naam.';
$error[16] = 'Op de server werdt het bestand hernoemd tot '.$this->file_copy.'.';
$error[17] = 'Het bestand %s bestaat niet.';
$error[18] = 'De soort bestand (mime type) is niet toegestaan.'; // new ver. 2.33
break;
case 'de':
$error[0] = 'Die Datei: '.$this->the_file.' 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[6] = 'Der temporäre Dateiordner fehlt';
$error[7] = 'Das Schreiben der Datei auf der Festplatte war nicht möglich.';
$error[8] = 'Eine PHP Erweiterung hat während dem hochladen aufgehört zu arbeiten. ';
$error[10] = 'Wählen Sie eine Datei aus!.';
$error[11] = 'Es sind nur Dateien mit folgenden Endungen erlaubt: '.$this->ext_string.'';
$error[12] = 'Der Dateiname enthält ungültige Zeichen. Benutzen Sie nur alphanumerische Zeichen für den Dateinamen mit Unterstrich. 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 '.$this->the_file.'...Fehler! Eine Datei mit gleichem Dateinamen existiert bereits.';
$error[16] = 'Die hochgeladene Datei ist umbenannt in '.$this->file_copy.'.';
$error[17] = 'Die Datei %s existiert nicht.';
$error[18] = 'Der Datei Typ (mime type) ist nicht erlaubt.'; // new ver. 2.33
break;
//
// place here the translations (if you need) from the directory 'add_translations'
//
default:
// start http errors
$error[0] = 'File: '.$this->the_file.' 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';
$error[6] = 'Missing a temporary folder. ';
$error[7] = 'Failed to write file to disk. ';
$error[8] = 'A PHP extension stopped the file upload. ';
// end http errors
$error[10] = 'Please select a file for upload.';
$error[11] = 'Only files with the following extensions are allowed: '.$this->ext_string.'';
$error[12] = 'Sorry, the filename contains invalid characters. Use only alphanumerical chars and separate parts of the name (if needed) with an underscore. 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 does not exist!';
$error[15] = 'Uploading '.$this->the_file.'...Error! Sorry, a file with this name already exitst.';
$error[16] = 'The uploaded file is renamed to '.$this->file_copy.'.';
$error[17] = 'The file %s does not exist.';
$error[18] = 'The file type (mime type) is not valid.'; // new ver. 2.33
}
return $error[$err_num];
}
}
?>