Avatar billede telac2 Nybegynder
23. januar 2003 - 20:21 Der er 22 kommentarer og
1 løsning

Upload af filer, mellemrum og æøå

Hej,

Jeg har fået masser af scripts til at behandle ÆØÅ og mellemrum, men problemet er at det når jeg aldrig til.

Jeg har følgende fil:

upload.php
==========
<form enctype=multipart/form-data action=insertdata.php method=post>
<input name=file1 type=file><br>
<input name=file2 type=file><br>
...
<input type=submit>

insertdata.php
==============
$replArr = array(
        chr(230) => "ae",
        chr(248) => "oe",
        chr(229) => "aa",
        chr(198) => "ae",
        chr(216) => "oe",
        chr(197) => "aa",
        chr(32) => "_"
);
if ($file1) {
$filename = strtolower($file1_name);
$filename = strtr($filename, $replArr);
echo "Type: $file1 kaldes $file1_name moves til $filename";
rename ($file1, "/www-data/juncher/$kundeid/$id/$filename");
}

echo sætningen er en debug og den giver ved almindelige filer som ikke indeholder æøå og mellemrum at $file1 er en pointer til filen, og så virker scriptet.

Når jeg uploader en fil med mellemrum eller æøå vil den pointer være "none" .. og selvom jeg har en rename osv på filnavnet som omgår det, så er pointeren "none" og derfor kan den ikke flytte filen.

Nogen der kan hjælpe?
Avatar billede alrua Nybegynder
23. januar 2003 - 20:25 #1
skal du ikke bruge move_uploaded_file() i stedet for rename?
Og hvad med dit $_FILES array? det har du vel et sted? :D

-Alrua
Avatar billede telac2 Nybegynder
23. januar 2003 - 20:29 #2
rename fungerer fint ved filer uden ÆØÅ
Jeg har 6 filer, så jeg har en kopi af
if ($file1) { ... for hver af dem.
Avatar billede telac2 Nybegynder
23. januar 2003 - 20:33 #3
Fejlen kommer allede inden jeg når til koden i insertdata.php - hvis første linie er echo "$file1" viser den også "none"

Men jeg ved ikke hvordan man får det form script til at klare mellemrum etc?
Avatar billede alrua Nybegynder
23. januar 2003 - 20:37 #4
har du prøvet at sætte citationstegn rundt om "multipart/form-data"? :)
Avatar billede telac2 Nybegynder
23. januar 2003 - 20:40 #5
Det har jeg nu, samme problem.
Avatar billede telac2 Nybegynder
23. januar 2003 - 20:41 #6
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
og den her doctype .. bare for at få det ud ;)
Avatar billede alrua Nybegynder
23. januar 2003 - 20:41 #7
skod...kan du ikke uploade nogle .phps filer så jeg kan se hele koden? :)
Avatar billede telac2 Nybegynder
23. januar 2003 - 20:45 #8
eh, det er for en kunde så det er nok ikke så godt, men det relevante kode er med i dette indlæg.
Avatar billede alrua Nybegynder
23. januar 2003 - 20:49 #9
så kan jeg nok ikke hjælpe hvis jeg ikke må se koden :(
sry, men der mangler nogle væsentlige ting (hvor definerer du fx $file1_name?)
Avatar billede tipsen Nybegynder
23. januar 2003 - 20:50 #10
telac: Du har fået "masser af scripts" som du selv skriver, men du har også efterhånden fået at vide mange gange at du skulle bruge is_uploaded_file() og move_uploaded_file() - hvorfor gør du det ikke!?

Og lad være med at skrive at "det fungerer med de almindelige filer" - det er jo ikke dem som er problemet!
Avatar billede telac2 Nybegynder
23. januar 2003 - 20:56 #11
fordi når vi når til insertdata.php som behandler filerne (og hvor is_uploaded_file() skal indsættes) er filepointeren "none" .. så fejlen er ikke i scriptet der behandler filerne.

hvis insertdata.php indeholdt udelukkende følgende linie: echo "$file1"; ville den skrive: "none" og ellers: "/tmp/AgDtWtwf (randomized)"

Så problemet ligger i selve formen... vil jeg da mene.
Avatar billede alrua Nybegynder
23. januar 2003 - 20:58 #12
erm...prøv at bruge de rigtige variabler?

Prøv fx at skrive
echo $_FILES['file1']['tmp_name']
Avatar billede olebole Juniormester
23. januar 2003 - 20:59 #13
<ole>

Du bliver nødt til at vise noget kode, hvis ikke der skal gå totalt Bent Burg i den:
  "... og kategorien er igen ... 'Upload i PHP'"  ;o)

Hvad med din meta for karaktersæt? Og få nu de ting på plads, tipsen _igen_ anfører. Vi kan ikke blive ved i samme rille, hvis ikke du tager de ting, vi skriver alvorligt.

/mvh
</bole>
Avatar billede telac2 Nybegynder
23. januar 2003 - 21:01 #14
Jeg beklager hvis jeg har antydet jeg ikke tager jer alvorligt, problemet skal løses, og jeg kan ikke klare det selv, så jeg må jo gøre hvad I foreslår.

Jeg kan bare ikke uppe scriptet da det er et 780 liniers script.

Jeg sætter linie 1 i insertdata.php til echo $_FILES['file1']['tmp_name']
 
og uploader 2 filer, en med og en uden mellemrum, og lad os så se hvad vi får...
Avatar billede telac2 Nybegynder
23. januar 2003 - 21:02 #15
Jeg får:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or 'T_NUM_STRING'
Avatar billede telac2 Nybegynder
23. januar 2003 - 21:05 #16
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
...
Avatar billede alrua Nybegynder
23. januar 2003 - 21:16 #17
du må sqda kunne uploade en .phps fil?!
Avatar billede olebole Juniormester
23. januar 2003 - 21:34 #18
Hvem taler om at se 780 linier? Hvis du af hensyn til din kunde ikke kan oploade en phps af et nedkog af det, der giver dig problemer, må du jo hive penge ud af ham til en konsulent, der kan løse dit/hans problem.
I'm out!
Avatar billede telac2 Nybegynder
23. januar 2003 - 21:37 #19
Well, glem hvad der står i insertdata.php filen, problemet ligger i at $file1 (filpointeren) er "none" når det er filer med mellemrum i, og ellers virker når det ikke er.

Det er form siden der er gal, og der kan ikke være meget mere data der er relevant end det der allerede er vist?
Avatar billede tipsen Nybegynder
23. januar 2003 - 21:42 #20
OK - sad lige og legede med det og nu får du et komplet script, hvilket dog er en dårlig vane...

Gem det i en fil og test det - det burde tale for sig selv:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Test af filupload med sjove filnavne</title>
</head>
<body>
<?php
    echo 'Request Method: ' . $_SERVER['REQUEST_METHOD'] . '<br>';
    //er siden requestet med post - så er det jo nok fordi formen er blevet submittet!
    if($_SERVER['REQUEST_METHOD'] == 'POST') {
        //er filen rent faktisk oploaded vha. php?
        if(is_uploaded_file($_FILES['uploadfil']['tmp_name'])) {
            $tmpin = '';
            //opbygger nyt filnavn hvor kun karaktererne a-z 0-9 . og _ er tilladt!
            $tmpout = strtolower($_FILES['uploadfil']['name']);
            for($i=0;$i<strlen($tmpout);$i++) {
                $asciival = ord($tmpout{$i});
                //a-z ~ 97-122, 0-9 ~ 48-57, . ~ 46, _ ~ 95
                if (($asciival >= 48 && $asciival <= 57) ||
                    ($asciival >= 97 && $asciival <= 122) ||
                    $asciival == 46 || $asciival == 95) {
                    $tmpin .= $tmpout{$i};
                }
            }
            //kontroller det nye filnavn - her bør egentlig være et mere omfattende check!
            if (strlen($tmpin) > 0) {
                echo 'Oprindeligt filnavn: ' . $_FILES['uploadfil']['name'] . '<br>';
                echo 'Nyt filnavn: ' . $tmpin . '<br>';
                //lav absolut destination
                $dest = 'c:\\upload\\' . $tmpin;
                //hvor kommer filen fra
                $source = $_FILES['uploadfil']['tmp_name'];
                //eksisterer der i forvejen en fil - så skal den jo ikke overskrives!
                if (!file_exists($dest)) {
                    //kunne filen flyttes?
                    if(!move_uploaded_file($source, $dest)) {
                        echo 'Problemer med at flytte filen!<br>';
                    } else {
                        echo 'Succes - filen er flyttet!<br>';
                    }
                } else {
                    echo 'Filen findes i forvejen!<br>';
                }
            } else {
                echo "Problemer med det genererede filnavn!";
            }
        } else {
            echo 'Problemer - filen var ikke en uploadet én!<br>';
        }
    }
?>
<HR>
<FORM enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Fil: <INPUT type="file" name="uploadfil"><BR>
  <INPUT type="submit" value="Send">
</FORM>
</body>
</html>
Avatar billede telac2 Nybegynder
23. januar 2003 - 22:29 #21
Jeg har fundet fejlen .. der var sneget sig et underligt tegn ind foran doctype sætningen så den ikke virkede, da jeg skrev sætningen om virkede det.

Sådan går det når man bruger windows til unix *suk*

Point til tipsen, og tak til alle for deres tålmodighed :)
Avatar billede alrua Nybegynder
23. januar 2003 - 22:50 #22
jeg får aldrig noget :(
Avatar billede tipsen Nybegynder
23. januar 2003 - 23:23 #23
telac: Jeg håber du lærer noget fra mit svar - specielt, hvis dit script er til seriøst brug! (Ellers er det vel bare stakkels kunde, når webhotellet opdaterer php og det ikke fungerer længere...)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester