Gå til innhold

funksjon som rydder opp i filnavn


Anbefalte innlegg

Hei.

Har en funksjon som sjekker om filnavnet (post variabel) har endelse .gpx:

 

function track_validate_file(&$node) {
 // Check for a new file upload.
 if ($file = file_check_upload('file')) {
$ext = strtolower(ereg_replace("^.+\\.([^.]+)$", "\\1", $file->filename));
if ($ext != "gpx") {
form_set_error('file', t('Feil <b>GPX</b> format. Filnavn må ha .gpx etternavn'));
}
else
{
 $node->file = file_save_upload($file, file_directory_path(), false);
 $node->current_file = $node->file->filepath;
}
 }
 else
 {
  $current_file = isset($_POST['edit']['current_file']) ? $_POST['edit']['current_file'] : '';
  if (file_exists($current_file)) {
 $node->file = file_check_local($current_file);
 $node->current_file = $node->file->filepath;
  }
 }
 return $file;
}

 

Denne feiler med IE fordi IE sender filen med endelse .txt (filnavn.gpx.txt).

Videre prosessering av gpx filen tryner også hvis filnavnet er veldig langt, og/eller har øæåäö_- i seg.

 

Noen som kan hjelpe meg med å få til en funksjon som rydder opp i filnavnet?

Lenke til kommentar
Videoannonse
Annonse
$ext = strtolower(ereg_replace("^.+\\.([^.]+)$", "\\1", $file->filename));

 

det er denne du må forandre på. Her kjøres et regulært utrykk..

Det som skjer her er den leter etter en streng som oppfyller disse reglene i en streng

"^.+\\.([^.]+)$"

 

^ er et anker og sier at den skal søke i fra begynnelsen av filnavnet.

. sier at alle tegn er gyldige

+ sier at den skal være et eller flere tegn av utrykket ovenfor

\\. sier at det skal komme et punktum

([^.]+) er en submatch og sier her at alle tegn etter punktumet er extension.

$ er nok et anker som sier at utrykket skal kjøres til slutten av filnavnet.

 

 "\\1"

argumentet er en backreference som sier at den skal bytte hele strengen med exenesionen den fant. Med andre ord vil funksjonen returnere extensionen på fila.

 

om du ikke skjønner regulære utrykk, foreslår jeg at du bruker php sine mange string funksjoner for å oppnå hva som gjøres her.

 

Akuratt hva vil du skal gjøres med filnavnet?

Lenke til kommentar

Takk ble litt klokere nå.

Det viktigste er problemet med Internet Explorer og at den legger til .txt til filename.gpx slik at det blir filename.gpx.txt

Firefox, Opera osv gjør ikke dette.

 

Er det slik at denne funksjonen kan brukes for å løse dette?

function pathinfo_filename($file) { //file.name.ext, returns file.name
if (defined('PATHINFO_FILENAME')) return pathinfo($file,PATHINFO_FILENAME);
if (strstr($file, '.')) return substr($file,0,strrpos($file,'.'));
}

 

Ellers virker det som resten av scriptet tryner hvis filnavnet inneholder mellomrom, underscore eller bindestrek. Skulle gjerne ha strippet bort dette fra filnavnet.

Lenke til kommentar

Nå pleier ikke jeg å bruke IE (eller windows) men finner det *veldig* underlig at IE plutselig skal begynne å legge på «.txt»-filtyper på .gpx-filer (heller .xml i så fall).

 

Er du sikker på at filen ikke faktisk heter «<filnavn>.gpx.txt»? Windows Xp/Vista skjuler filnavn for kjente filtyper, f.eks txt. Derfor vil i f.eks åpnedialoger se ut som om du laster opp en «.gpx»-fil.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...