TobiasG Skrevet 11. november 2009 Del Skrevet 11. november 2009 Har litt problemer med å få lastet opp filer som inneholder symbol ' Hvis filen heter I'm super vil den hete "m super" etter upload. Prøvd alle måter replacement men tror det ligger i at filen allerede har navnet "m super" før replacement funksjonen kommer inn. Kan noen se hvordan jeg kan gjøre dette? <?php $target = "upload/"; $target = $target . basename( $_FILES['uploaded']['name']); if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) { echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded"; } else { echo "Sorry, there was a problem uploading your file."; } } fra HTML fila; <form enctype="multipart/form-data" action="upload.php" method="POST"> Please choose a file: <input name="uploaded" type="file" /><br /> <input type="submit" value="Upload" /> </form> Lenke til kommentar
AlecTBM Skrevet 11. november 2009 Del Skrevet 11. november 2009 Hva med å kjøre en str_replace på filnavnet? http://no.php.net/manual/en/function.str-replace.php Lenke til kommentar
footnote Skrevet 11. november 2009 Del Skrevet 11. november 2009 (endret) La meg tippe at du kjører på windows? sannsynligvis står magic_quotes_gpc på, og filnavnet ditt blir da endret til: "I\'m super" av PHP. basename i windows tolker både / og \ som katalog skiller, og derfor får du ut 'm super fra basename funksjonen. du får se litt på stripslashes og get_magic_quotes_gpc. Poenget med magic_quotes er å beskytte skriptet ditt mot data fra brukeren, så ', ", \ og NUL blir escapet med en \ forran. Edit: Et tips er å faktisk sjekke hvilke verdier du faktisk får inn, før du bruker noen funksjonskall på dem. printf("<pre>%s</pre>\n", htmlspecialchars(print_r($_FILES, true))); Endret 11. november 2009 av footnote Lenke til kommentar
AlecTBM Skrevet 11. november 2009 Del Skrevet 11. november 2009 Skal vel også sies at å bruke annet enn a-zA-Z0-9 i filnavn på nettet er fyfy (punktum er selvfølgelig lov) Lenke til kommentar
TobiasG Skrevet 11. november 2009 Forfatter Del Skrevet 11. november 2009 Skal vel også sies at å bruke annet enn a-zA-Z0-9 i filnavn på nettet er fyfy (punktum er selvfølgelig lov) Har prøvd str replace og div annet, får bare ikke med meg noe av det som er før ' om det skulle være i filnavnet. Har prøvd et script som bare lar meg bruke a-z og 1-9 også. Men har dere evt noen scripts på det ? Lenke til kommentar
AlecTBM Skrevet 11. november 2009 Del Skrevet 11. november 2009 Mener du å si at str_replace ikke funker? Fungerte fint hos meg i allefall $str="test'd'"; echo $str."\n"; echo str_replace("'",'',$str)."\n"; Lenke til kommentar
TobiasG Skrevet 11. november 2009 Forfatter Del Skrevet 11. november 2009 Mener du å si at str_replace ikke funker?Fungerte fint hos meg i allefall $str="test'd'"; echo $str."\n"; echo str_replace("'",'',$str)."\n"; Ikke her =/ hvor i scriptet er det du la den? Lenke til kommentar
AlecTBM Skrevet 11. november 2009 Del Skrevet 11. november 2009 ingen plasser, jeg testa bare str_replace i din kode: <?php $target = "upload/"; $target = $target . basename( str_replace("'",'',$_FILES['uploaded']['name'])); if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) { echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded"; } else { echo "Sorry, there was a problem uploading your file."; } } ?> Lenke til kommentar
TobiasG Skrevet 11. november 2009 Forfatter Del Skrevet 11. november 2009 ingen plasser, jeg testa bare str_replacei din kode: <?php $target = "upload/"; $target = $target . basename( str_replace("'",'',$_FILES['uploaded']['name'])); if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) { echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded"; } else { echo "Sorry, there was a problem uploading your file."; } } ?> Det der funka dårlig =/ akkurat samme resultat.. =( Men, er det noen måte jeg kan begrense det til at man bare kan bruke a-z, 1,9 -, _, (, ) og & eller noe Lenke til kommentar
AlecTBM Skrevet 11. november 2009 Del Skrevet 11. november 2009 hva spyr den ut egentlig? Noen feilmeldinger? Lenke til kommentar
TobiasG Skrevet 11. november 2009 Forfatter Del Skrevet 11. november 2009 hva spyr den ut egentlig?Noen feilmeldinger? Nei, den klarer bare ikke ikke å replace, så i og med at ' er en hva skal man si start-end/close tag så vil det bli litt fucked. Heter filen I'm good, blir den lastet opp som m good Lenke til kommentar
Jonas Skrevet 11. november 2009 Del Skrevet 11. november 2009 (endret) Gi faen i str_replace og se mer nøye på hva Footnote prøver å fortelle deg. Deretter var_dump-er du et par variabler for debug purposes og viser oss hva som skjer. Edit: For å være litt mer konkret: Jeg setter en tier på magic_quotes_gpc er på og at å stripslashe input vil fikse alt. <?php if ( get_magic_quotes_gpc () ) { function stripslashes_deep ( $value ) { return is_array ( $value ) ? array_map ( 'stripslashes_deep', $value ) : stripslashes ( $value ); } $_GET = array_map ( 'stripslashes_deep', $_GET ); $_POST = array_map ( 'stripslashes_deep', $_POST ); $_COOKIE = array_map ( 'stripslashes_deep', $_COOKIE ); } ?> Endret 11. november 2009 av Jonas Lenke til kommentar
TobiasG Skrevet 11. november 2009 Forfatter Del Skrevet 11. november 2009 Gi faen i str_replace og se mer nøye på hva Footnote prøver å fortelle deg. Deretter var_dump-er du et par variabler for debug purposes og viser oss hva som skjer. Edit: For å være litt mer konkret: Jeg setter en tier på magic_quotes_gpc er på og at å stripslashe input vil fikse alt. <?php if ( get_magic_quotes_gpc () ) { function stripslashes_deep ( $value ) { return is_array ( $value ) ? array_map ( 'stripslashes_deep', $value ) : stripslashes ( $value ); } $_GET = array_map ( 'stripslashes_deep', $_GET ); $_POST = array_map ( 'stripslashes_deep', $_POST ); $_COOKIE = array_map ( 'stripslashes_deep', $_COOKIE ); } ?> Av en eller annen grunn jonas sa ikke det scriptet ditt meg så mye men prøvde å bruke dette; if (!get_magic_quotes_gpc()){ $_GET = array_map('addslashes', $_GET); $_POST = array_map('addslashes', $_POST); $_COOKIE = array_map('addslashes', $_COOKIE); $_REQUEST = array_map('addslashes', $_REQUEST); } fortsatt samme, hvis dere ser her, brukte dette i scriptet "printf("<pre>%s</pre>\n", htmlspecialchars(print_r($_FILES, true)));" og fikk tilbake Array( [uploaded] => Array ( [name] => ve got the power.mp3 [type] => audio/mpeg [tmp_name] => C:\xampp\tmp\php8587.tmp [error] => 0 => 4996473 ) ) Prøvde å laste opp en fil med navnet "01 I've got the power.mp3" som test Lenke til kommentar
TobiasG Skrevet 11. november 2009 Forfatter Del Skrevet 11. november 2009 (endret) Dere har hjulpet meg godt i riktig retning takk for det, enda ikke funnet noen løsning, men byttet om til GET method i uplastning greia bare for å se, da kommer følgene i get; ....php?uploaded=01+I've+got+the+power.mp3&submit=Last+opp Når jeg poster den fra get igjen får jeg; 01 I\'ve got the power.mp3 så er absolutt method='POST' som gjør at problemet oppstår, men er det noen vei jeg kan gå rundt, evt skru av get_magic_quotes_gpc la den være på get, og hente navnet til filen via get istedet for post e.l? Edit: Prøvd litt forskjellig nå, på en måte fått det til, men ser ut til at det å til og med få det til, skaper litt problemer andre stedet også. Har dere noe script som bare tillater a-z, 1-9 =)? Endret 11. november 2009 av TobiasG Lenke til kommentar
Jonas Skrevet 11. november 2009 Del Skrevet 11. november 2009 (endret) Gjorde litt research, og det viser seg at dette er en liten bug i PHP @ Windows. Windows ser på backslash som en directory seperator, og dermed blir naturligvis bare siste delen av filnavnet tatt med. http://bugs.php.net/bug.php?id=38245 http://bugs.php.net/bug.php?id=31398 Er du riktig heldig, så er dette fikset i en nyere versjon. Hvis ikke, så skru av magic_quotes_gpc i PHP.ini. Edit: Uff, ser nå at en av utviklerne ser på dette som intensjonell oppførsel... Endret 11. november 2009 av Jonas Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå