Brug af AI afslører de svagheder, virksomheder allerede har opbygget gennem års cloud-transformation, nye SaaS-løsninger og fragmenterede sikkerhedssystemer.
if(!in_array($filtype, $filtyper_tilladt)) { echo "<p>Filtypen '$filtype' er ikke tilladt. De tilladte filtyper er '" . implode("', '", $filtyper_tilladt) . "'. Filen $filnavn kunne derfor ikke uploades!</p>"; $fejl = "1"; } if ($fil_stoerrelse > $max_stoerrelse) { echo "<p>Filen '$filnavn' er for stor og kan ikke uploades. Den fylder " . ceil($fil_stoerrelse) . " kb og der kan maximalt uploades $max_stoerrelse kb!</p>"; $fejl = "1"; } if ($fejl == "0") { if (move_uploaded_file($fra, $til)) { echo "<p>Filen '$filnavn' er uploadet!</p>"; return $fil_sti; } else { echo "<p>Desværre, filen '$filnavn' kunne ikke uploades!</p>"; } } } else { echo "<p>Der er ikke vedhæftet nogen fil!</p>"; } }
function doUpload($fileLink){ // skal være $_FILES['upload_felt'] den skal foders med // array med godkendte filtyper $accept[] = "jpg"; $accept[] = "jpeg"; // max størrelse i bytes $max_size = 1024; // 1kb
$startpos = strrpos($fileLink['name'], "."); // finder pos af sidste . i navn
$slutpos = strlen($fileLink['name']) - $startpos; // finder længden af filnavn // længden af hele navnet minus antal af bogstavver før sidste .
$filtype = addslashes(substr($fileLink['name'], $startpos+1, $slutpos)); // finder filtype ved at tage et udsnit af strengen, se php.net/substr $filnavn = addslashes(substr($fileLink['name'], 0, $startpos)); // finder filnavn ved at tage et udsnit af strengen
if(in_array($filtype, $accept) && filsize($fileLink['tmp_name']) < $max_size){ // tjekker om filtype er acceptabel og størrelsen er lille nok
if(file_exists("./" . $dir . "/" . $filnavn . "." . $filtype)){ // ser om filen findes $i=2; while(file_exists("./" . $dir . "/" . $filnavn . "_" . $i . "." . $filtype)){ // en løkke for at finde et alternativt navn $i++; } $final_name = $filnavn . "_" . $i . "." . $filtype; } else{ $final_name = $filnavn . "." . $filtype; } if(copy($fileLink['tmp_name'], "./" . $dir . "/" . $final_name)){ // kopierer filen hen til sit endelige sted $arr['size'] = filesize($short_name); $arr['name'] = $final_name; return $arr; // returnere filnavn er størrelse som et array } } else{ return false; } }
Sådan, nu med strrpos. Det kan være dea_pg vil tjekke ;) Men den kan i hvert fald godt håndtere "fil.navn.png" nu. Ved ikke helt mht. filtype, men det skulle være nemt at lave om:
Kunne da egentlig godt tænke mig at høre andre, om det generelt er bedst at tjekke filtypen ved at tjekke endelsen (.jpg), eller ved at tjekke $_FILES["name"]["type"] ?
googolplex > Jeg er _stadig_ i tvivl, om der skal være 2 filer, eller kun EN fil. I Action på formen er der noget der hedder PHP_Self, hvilket får mig til at tro at der kun skal være EN fil. Men sådan forståd jeg det ikke i dit indlæg.
Jeg får fejl på linie 9 : Fatal error: Call to undefined function: upload_fil() in /usr/home/whitehat_dk/users/jemt/uploads.php on line 9
Jeg har smidt filerne i roden på mit hotel, og oprette mappen upload, med endnu en undermappe ved navn diverse.
Så vidt jeg kan se, så kan man sætte max-str. på filer 3-5 steder. Hvor skal det indstilles ?
Kunne du være så venlig at skrive, HVAD mine filer skal hedde, og HVAD mine filer skal indeholde af den kode, du netop pastede til mig ? Jeg får grå hår i hovedet af det her :-)
Yderligere vil jeg godt vide, om jeg kan få printet filnavnet ud et sted, når upload er færdigt ? Eller rettere - få filnavnet lagt i en variabel (og det skal self. være navnet på filen, som ligger på serveren - i tilfælde af at den er blevet omdøbt). Navnet som så ligger i variablen sender jeg videre via :
Du behøver kun have en fil og brug 'action="<?php echo $_SERVER["PHP_SELF"]; ?>"' i din form, så kalder siden sig selv. Så sætter du siden op, som jeg skrev tidligere, men en betingelse på om brugen har trykket på upload knappen (kan udbygges naturligvis).
Jeg lægger alle mine funktioner i et funktionsbibliotek og inkludere det derefter i toppen af alle mine sider med:
Filtypen (mine type) gemmen i variablen $_FILES["navn"]["type"], men det er muligt dea_pg har ret i, at den ikke altid sendes med. Har dog ikke været ude for andet.
max_stoerrelse angiver du bare nå du kalder funktionen:
ok, nu er jeg lidt mere forvirret. Vil de sige, at der er flere funktioner som nu skal includes ? Kunne jeg ikke bare lokke dig til at sende mig source'n pr. mail eller uploade den ?
Du laver bare en fil du kalder 'funktionsbibliotek.php'. Heri lægger du alle dine funktioener (i dit tilfælde kun denne ene). Hvis du senere bygger flere funktioner så lægger du dem samme sted.
Så inkludere du dit funktionsbibliotek på alle sider, og kan derefter altid kalde alle dine funktioner. Det er kun for at adskille tingene og gøre dem mere overskuelige, du kan også bare taste funktioen direkte ind på siden hvor du skal bruge den.
Ok, men kan jeg få dig til at sende mig source'n ? Jeg er træt af at rode i den kode. Jeg får hele tiden fejl. - og så er det lige problemet med at sammensætte al koden ned gennem spørgsmålet. Jeg er en smule i tivl om, hvad der skal bruges, og hvad der ikke skal. Nu vil jeg bare gerne videre med mit projekt :)
Min mail er jimmyth@tdcadsl.dk, hvis du vil være så venlig at sende det :-)
Warning: open_basedir restriction in effect. File is in wrong directory in /usr/home/whitehat_dk/users/jemt/uploadside.php on line 17
Warning: Unable to access /home/whitehat_dk/public_html//upload/diverse/test.bmp in /usr/home/whitehat_dk/users/jemt/uploadside.php on line 46
Desværre, filen 'test.bmp' kunne ikke uploades!
Jeg kan regne ud, at det er noget med stien. Der er også en fejl med 2 skråstreger, så vidt jeg kan se. Jeg har uploadside.php liggende i roden af mit bibliotek, og her har jeg også mappen upload, som igen har en undermappe ved navn diverse. Kan du se fejlen ?
Systemet giver problemer på stort set alle webhoteller. Jeg håber du kan få det til at virke på alle systemer. Det duer ikke, at jeg skal lave et helt system om, hvis jeg flytter hotel :o/
if(!in_array($filtype, $filtyper_tilladt)) { echo "<p>Filtypen '$filtype' er ikke tilladt. De tilladte filtyper er '" . implode("', '", $filtyper_tilladt) . "'. Filen $filnavn kan derfor ikke uploades!</p>"; $fejl = "1"; } if ($fil_stoerrelse > $max_stoerrelse) { echo "<p>Filen '$filnavn' er for stor og kan ikke uploades. Den fylder " . ceil($fil_stoerrelse) . " kb og der kan maximalt uploades $max_stoerrelse kb!</p>"; $fejl = "1"; } if ($fejl == "0") { if (file_exists(getcwd() . $fil_sti)) {
Googolplex > Jeg skal lige ud et par timer. Men jeg håber du er færdig til jeg komemr tilbage.
Jeg regner i øvrigt med, at sætte en server op der skal køre med systemet.. Så hvis det er et spørgsmål om opsætning, så må vi lige se hvordan det kan løses.. Skriv endelig, hvis du mener det er noget der kan løses på serveren.
Hey, have ikke set dit sidste indlæg. Jeg kigger på det når jeg kommer tilbage. Jeg har testet på h4f.dk as well, og der får jeg endnu flere fejl. Mit eget hotel (som er hostet af webdomain.dk) er endnu engang nede. FTP-adgangen er lukket.
$startpos = strrpos($fileLink['name'], "."); // finder pos af sidste . i navn
$slutpos = strlen($fileLink['name']) - $startpos; // finder længden af filnavn // længden af hele navnet minus antal af bogstavver før sidste .
$filtype = addslashes(substr($fileLink['name'], $startpos+1, $slutpos)); // finder filtype ved at tage et udsnit af strengen, se php.net/substr $filnavn = addslashes(substr($fileLink['name'], 0, $startpos)); // finder filnavn ved at tage et udsnit af strengen
if(in_array($filtype, $accept) && filesize($fileLink['tmp_name']) < $max_size){ // tjekker om filtype er acceptabel og størrelsen er lille nok
if(file_exists("./" . $dir . "/" . $filnavn . "." . $filtype)){ // ser om filen findes $i=2; while(file_exists("./" . $dir . "/" . $filnavn . "_" . $i . "." . $filtype)){ // en løkke for at finde et alternativt navn $i++; } $final_name = $filnavn . "_" . $i . "." . $filtype; } else{ $final_name = $filnavn . "." . $filtype; } if(copy($fileLink['tmp_name'], "./" . $dir . "/" . $final_name)){ // kopierer filen hen til sit endelige sted $arr['size'] = filesize($final_name); $arr['name'] = $final_name; return $arr; // returnere filnavn er størrelse som et array } } else{ return false; } }
if(isset($_POST['hidden'])){ $returnArr = doUpload($_FILES['upfil'],204800, ""); // max størrelse 2kb, dir er ./upload/ if($returnArr !== false){ echo "Weee... det lykkedes:<br><br>"; print_r($returnArr); } else echo "Ehhh... lykkedes ik'..."; } ?> <form action="<?php echo basename($_SERVER['PHP_SELF']); ?>" method="post" enctype="multipart/form-data"> <b>Fil til upload:</b> <input type="file" name="upfil" /> <input type="hidden" name="hidden" value="check" /> <input type="submit" value="upload" /> </form> ---
Ja, virker fint. Det kan meget vel tænkes, at jeg godt vil bruge dit i stedet.. Og hvis det er tilfældet, så åbner jeg _naturligvis_ et spørgsmål med points til dig :-)
Men hvorfor skriver den dette, når filen er uploaded korrekt : Array ( [size] => 2584 [name] => advuploader.zip )
if($returnArr !== false){ echo "Weee... det lykkedes:<br><br>Filen er " . $returnArr['size'] . " bytes stor<br>og den kom til at hedde: " . $returnArr['name']; }
Fatter det stadig ikke, jeg kan heller ikke så dea_pg's til at virke på whitehat, får de samme fejl som med mit eget :( Har du fået det til at virke på Whitehat ?
Men de virker fint på de tre webhoteller jeg ellers har tjekket det på.
Nå pyt, det vigtigste er, at du fik løst dit problem :-)
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.