Avatar billede rotco Juniormester
31. januar 2009 - 15:05 Der er 34 kommentarer og
1 løsning

.swf kan ikke uploades

YooOooOo

Så kommer jeg med endnu et spørgsmål, hvilket er p*sse U%¤&#%#%!

Jeg kan ikke uploade .swf filer men alle andre filer kan jeg godt uploade!

Koden er nøjagtigt den samme som denne:
http://www.w3schools.com/PHP/php_file_upload.asp

og for lige at gøre det klart for alle, så har jeg naturligvis gjort at jeg kan uploade filer så store som 200 mb, samt at jeg ikke har gjort sådan at det kun er visse typer man kan uploade! Jeg kan uploade alle filer... Bortset lige fra .swf

Nogen der kan hjælpe? :)
Avatar billede psychopixi Nybegynder
31. januar 2009 - 15:17 #1
Prøv at køre
<?php
phpinfo();
?>
og led efter linien "upload_max_filesize" og find ud af hvad denne variabel siger.
Avatar billede rotco Juniormester
31. januar 2009 - 15:27 #2
Gjort..

Den står til 12 MB, men filen jeg vil uploade er alligevel kun på 2,5 MB :)
Avatar billede psychopixi Nybegynder
31. januar 2009 - 15:34 #3
Prøv at erstatte linierne:
move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);

med disse og se om du ikke får noget debug kode:

if (move_uploaded_file($_FILES['userfile']['tmp_name'], "upload/" . $_FILES["file"]["name"])) {}
else {
    echo '<pre>';
    echo "Der er sket en fejl.\n";
    echo 'Her er noget debug info:';
    print_r($_FILES);
    print "</pre>";
}
Avatar billede rotco Juniormester
31. januar 2009 - 15:38 #4
Jeg får intet, underligt nok... Der står bare "invalid file"
Avatar billede psychopixi Nybegynder
31. januar 2009 - 15:50 #5
Jeg har kodet et ligende upload system en gang - og har lige forsøgt at oploade en swf-fil uden problemer.

Det lader til at den eneste distingte forskel mellem mit system og det på http://www.w3schools.com/PHP/php_file_upload.asp er at jeg ikke tjekker efter filtyper. Men du skriver godt nok at du har fjernet dette tjek?
Avatar billede psychopixi Nybegynder
31. januar 2009 - 15:52 #6
Hvis ikke det er problemet må jeg bede dig om at ligge din kode op så jeg kan se på den.
Avatar billede rotco Juniormester
31. januar 2009 - 15:53 #7
Jeps jeg har fjernet det... For jeg kan sagtens oploade .wmv, .jpg, zip, rar, mov, avi etc. men swf kan jeg sgu ikke :S
Avatar billede rotco Juniormester
31. januar 2009 - 15:55 #8
Jeps, den kommer her... Det skal lige siges at den chekker dog 1 af filerne, men det er kun billedet hvilket du nok kan læse dig frem til, den anden burde jo bare kører derudaf..

<?php

echo "<form method=\"post\" name=\"formone\" action=\"\" enctype=\"multipart/form-data\">
<table width=\"100%\">
<tr>
<td><b>Title:</b></td>
<td><input type=\"text\" name=\"title\"></td>
</tr>
<tr>
<td><b>Description:</b></td>
<td><input type=\"text\" name=\"description\"></td>
</tr>
<tr>
<td><b>Movie:</b></td>
<td><input type=\"file\" name=\"file1\" id=\"file1\" /></td>
</tr>
<tr>
<td><b>Picture:</b></td>
<td><input type=\"file\" name=\"file\" id=\"file\" /></td>
</tr>
<tr>
<td><input type=\"submit\" name=\"add_movie\" value=\"Add Movie\" /></td>
</tr>
</table>
</form>

</td>
</tr>
</table>
</div>
<br>
";
}

if($_POST[add_movie]){
include "connect.php";

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 200000000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Upload2: " . $_FILES["file1"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Type2: " . $_FILES["file1"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Size2: " . ($_FILES["file1"]["size"] / 1024) . " Kb<br />";
mysql_query("INSERT INTO movies (title, description, picture, code) VALUES ('$_POST[title]', '$_POST[description]', 'video_images/" . $_FILES["file"]["name"] . "', 'videos/" . $_FILES["file1"]["name"] . "')");

    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";    if (file_exists("video_images/" . $_FILES["file"]["name"]))
     
{
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "video_images/" . $_FILES["file"]["name"]);

      move_uploaded_file($_FILES["file1"]["tmp_name"],
      "videos/" . $_FILES["file1"]["name"]);


      echo "Stored in: " . "video_images/" . $_FILES["file"]["name"];
      echo "Stored in: " . "videos/" . $_FILES["file1"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }


}
?>
Avatar billede psychopixi Nybegynder
31. januar 2009 - 15:57 #9
Altså ifølge den kode du har der uploader scriptet kun hvis der er tale om gif, jpeg eller pjpeg - ellers skriver den "invalid file".
Avatar billede rotco Juniormester
31. januar 2009 - 16:01 #10
Nej, den uploader jo pt. 2 filer... Den ene er begrændset til de 3 billedtyper, og den sidste er ubegrænset... :)
Avatar billede psychopixi Nybegynder
31. januar 2009 - 16:18 #11
Ikke i den kode du lige har lagt op.
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 200000000))
  {
// en masse kode
}
else{
echo "Invalid file";
}

Jeg ved ikke helt hvor du vil hen? Den kode kommer ikke videre hvis det ikke er en af de 3 billedtyper...
Avatar billede rotco Juniormester
31. januar 2009 - 16:25 #12
Jo det gør den :)

Det script det oploader 1 billede via <input type=\"file\" name=\"file\" id=\"file\" />

type, name & id er = file

og file kører igennem

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 200000000))
{

som du kan se...

Så oploader jeg så en anden fil.. file1 som bliver kørt op via:
<input type=\"file\" name=\"file1\" id=\"file1\" /> hvor både navn og id er file1 og file1 bliver ikke kørt igennem

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 200000000))
{

Det eneste den sikre sig der, er at file er et billede, hvor file1 bare bliver kørt op på serveren.

Som jeg sagde så virker det også ganske fint da jeg kan oploade stortset ALT ud over .swf :)
Avatar billede olebole Juniormester
31. januar 2009 - 17:34 #13
<ole>

Dit script frasorterer alle andre filer, end de tre typer billeder. Hvis du vil have os til at forholde sig til, hvad der sker i en evt. anden kode, må du vise den  =)

Under alle omstændigheder er den kode, du viser, ikke den kode, du bruger. Hvor kommer f.eks. denne Tuborg fra:

</table>
</div>
<br>
";
}  // <-- Den dér

Den ville udløse en fejl, hvis det faktisk var dén kode, du testede med  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
31. januar 2009 - 17:41 #14
Din kode ser sådan ud i pseudokode:

hvis (betingelse) {
    Upload filen
}
ellers {
    Skriv 'Invalid file'
}

- og betingelsen lyder:

1) Filens type er enten 'image/gif', 'image/jpeg' eller 'image/pjpeg'
2) Filens størrelse er mindre 200.000.000 bytes

- hvor både 1 og 2 skal være opfyldt.
Avatar billede olebole Juniormester
31. januar 2009 - 17:43 #15
At dette ikke fungerer:
    <input type=\"file\" name=\"file1\" id=\"file1\" />

- er til gengæld ikke så mærkeligt, da du jo i scriptet bruger et felt, der hedder 'file' og ikke 'file1'
Avatar billede rotco Juniormester
31. januar 2009 - 18:12 #16
Det er den kode jeg bruger.. bortset fra at der er en if(){ mere og den er kun til at kunne se den side så skal man være logget ind som admin mm.

Derudover så virker
<input type=\"file\" name=\"file1\" id=\"file1\" />
ganske fint, hvorfor tror i den ikke virker?
Avatar billede olebole Juniormester
31. januar 2009 - 18:39 #17
Nej, det _kan_ ikke virke! Så kan du også få ting til at falde opad  ;o)

$_FILES["file"] henviser til en fil, der er uploaded fra et felt med name="file". Skulle det virke med feltet, du viser, skulle du bruge $_FILES["file1"] overalt i din kode.

Du bliver nødt til at være ærlig. Ellers har vi ikke kinamands chance for at hjælpe dig - og dine forklaringer hænger overhovedet ikke sammen ... uanset, om du selv kan overskue det eller ej.
Avatar billede rotco Juniormester
31. januar 2009 - 19:22 #18
olebole - selvom jeg ofte plejer at symes du svarer fedt på spørgsmål, men nu er det simpelt og jeg har SELV løst det uden nogen form for ændring.. og det VIRKER...

Den oploader 2 filer og jeg ér skam ærlig, men hvis ikke engang du kan læse den kode der og forstå den oploader 2 filer men kun chekker 1, så er der noget galt :)

Problemet er simpelt:

jeg udfylder formen med titel, beskrivelse, GENNEMSE FILM, GENNEMSE BILLEDER -

problemet var at mappen jeg oploadede til var der underligt nok allerede en film med samme navn der allerede eksisterde hvilket udløste "invalid file"

Men tak for hjælpen.. Og fordi jeg bustede jeres påstande :)
Avatar billede rotco Juniormester
31. januar 2009 - 19:22 #19
glemte et svar :)
Avatar billede rotco Juniormester
31. januar 2009 - 19:22 #20
glemte jeg så igen
Avatar billede olebole Juniormester
31. januar 2009 - 19:26 #21
Nej, du vrøvler! Det script, du har vist her, _kan_ ganske enkelt ikke virke. Jeg vil ikke ligefrem beskylde dig for bevidst at fylde os med løgn, men det, du skriver, passer ikke. Hvis det skulle passe, behøvede du slet ikke noget PHP-dokument for at uploade.

Nej, du har absolut ikke 'busted' nogens 'påstande'. Du har vrøvlet en hel tråd igennem  =)
Avatar billede psychopixi Nybegynder
31. januar 2009 - 19:27 #22
Hvis du har løst dit problem bedes du lukke spørgsmålet, evt. ved at give dig selv point.
Avatar billede olebole Juniormester
31. januar 2009 - 19:37 #23
*) Du har to file-inputs.

*) Hvis du med første input vælger en fil, der er over 200.000.000 bytes - eller en fil, der ikke er af en af de tre billedtyper - kan intet slippe igennem fra det andet file-input.

*) Hvis du med første input vælger en fil, der er under 200.000.000 bytes - og er en af de tre billedtyper - slipper alt helt ukritisk igennem fra det andet input (uanset, hvor farligt, det end måtte være).

Det er der da vel ingen ved sine fulde fem, der kan mene, skal være sådan!
Avatar billede rotco Juniormester
31. januar 2009 - 19:38 #24
olebole - du er for fatsvag!!

KIG NU DET SCRIPT IGENNEM!!!!! DIN LILLE ¤/¤#&/¤&#%#"%&¤%

DU ER FOR DUM!!! GIV MIG DEN MSN SÅ SKAL JEG GIVE DIG ADGANG TIL DET SCRIPT FOR FANDEN DA!!! DET VAR DA UTROLIGT!
Avatar billede rotco Juniormester
31. januar 2009 - 19:40 #25
Jeg så ikke lige indlægget før jeg selv postede - og endelig fattede du det!

Billede skal være den rigtige fil, hvilket er eneste krav samt størrelse..

Godt du forstod det :)
Avatar billede olebole Juniormester
31. januar 2009 - 19:40 #26
Få dog lige armene ind til kroppen og opfør dig, somom du var over fire år gammel. Kan du ikke finde ud af at skrive nogenlunde civilliseret, burde du holde dig fra offentlige fora! Du virker ikke spor mere seriøs, når du begynder at råbe bandeord af folk, der prøver at hjælpe dig og påviser dine fejl ... tværtimod!
Avatar billede rotco Juniormester
31. januar 2009 - 19:40 #27
Jeg undskylder for øvrigt for overstående indlæg da det løb af med mig, jeg hader bare at blive kaldt en løgner..
Avatar billede rotco Juniormester
31. januar 2009 - 19:41 #28
Det jeg prøvede optil flere gange at fortælle dig var at du ikke påviste noget, tværtimod...
Avatar billede olebole Juniormester
31. januar 2009 - 19:45 #29
Du blev netop _ikke_ kaldt 'løgner'. Når du ikke magter at fatte, jeg ekplicit gjorde klart, at jeg netop _ikke_ kaldte dig 'løgner', så er der vel ikke så meget at sige til, du heller ikke forstår resten.
Avatar billede rotco Juniormester
31. januar 2009 - 19:52 #30
Du provokere bevidst, men det præller af på mig ole.

Du vil ikke ligefrem beskylde mig for at lyve bevidst, men jeg løj ubevidst så? Hvilket jo stortset er det samme, som om at jeg intet fatter af php.

Som udgangspunkt i scriptet er det vigtigste at billedet er som det skal være, og så kan jeg så selv vælge et andet billede eller en fil eller noget andet som skal uploades sammen med.

Kan du stadig ikke se scriptet virker, selvom jeg udpeger følgende:

      move_uploaded_file($_FILES["file1"]["tmp_name"],
      "videos/" . $_FILES["file1"]["name"]);

hvor den jo så gemmer file1 som bliver kaldt via
<input type=\"file\" name=\"file1\" id=\"file1\" />

er vi evt. enige *GG*

Det skal jo lige siges at jeg ganske rigtigt ikke er en "php-guru", men jeg er heller ikke en newbie, men derimod nok mere midt imellem..
Avatar billede rotco Juniormester
31. januar 2009 - 19:54 #31
og som sagt undskylder jeg for mit sprog.. Jeg er stadig igang med at træne mig selv til ikke at blive for overilet, hvilket jeg har meget mani med, men som jeg prøver at komme af med.
Avatar billede olebole Juniormester
31. januar 2009 - 20:06 #32
Nej, jeg provokerer ikke. Men jeg tænker heller ikke så primitivt, at jeg ikke kan se forskel på at lyve bevidst og at fortælle noget, man tror er sandt, men som ikke er det. Der er en verden til forskel!

Dit script - som du viser det - er det rene selvmord. Hvis blot jeg uploader et billede af en bar mås, som er af én af de tre typer, kan jeg f.eks. uploade en 'sjov' php-fil som 'Movie'. Den kan jeg så efterfølgende kalde med hvad somhelst til følge  =8-O
Avatar billede rotco Juniormester
31. januar 2009 - 20:09 #33
Så du synes jeg skal limitere den til f.eks wmv, flv, swf, mov etc. som en slags sikkerhed?

Det er jo naturligvis ikke et script tilgængelig for alle, men det er rigtigt at alle login kan hackes og derfor er min side naturligvis også et mål, hvad foreslår du?
Avatar billede olebole Juniormester
31. januar 2009 - 21:08 #34
Ja, naturligvis - og det var da også det, jeg forventede, du i egen forståelse var ude i  =)

Det her kunne være et bud:

$allowedImages = array(
    "gif" => 1,
    "jpeg" => 1,
    "jpg" => 1
);
$allowedOtherFiles = array(
    "swf" => 1,
    "mov" => 1,
    "wma" => 1
);

if(isset($_POST["add_movie"]) && $_POST["add_movie"]=="Add Movie"){
    if (is_uploaded_file($_FILES["file"]["tmp_name"]) && is_uploaded_file($_FILES["file1"]["tmp_name"])) {
        $image = $_FILES["file"];
        $a = explode(".", $image["name"]);
        $imageExt = array_pop($a);
        if ($allowedImages[ strtolower($imageExt) ]) { // Valid image
            echo "Upload: " . $image["name"] . "<br />";
            echo "Type: " . $image["type"] . "<br />";
            echo "Size: " . ($image["size"] / 1024) . " Kb<br />";
        }
        else die("Invalid file: ".$image["name"]);
       
        $file = $_FILES["file1"];
        $a = explode(".", $file["name"]);
        $fileExt = array_pop($a);
        if ($allowedOtherFiles[ strtolower($fileExt) ]) { // Valid 'other file'
            echo "Upload2: " . $file["name"] . "<br />";
            echo "Type2: " . $file["type"] . "<br />";
            echo "Size2: " . ($file["size"] / 1024) . " Kb<br />";
        }
        else die("Invalid file: ".$file["name"]);
       
        if ( file_exists("video_images/" . $image["name"]) ) {
            echo $image["name"] . " already exists.<br />";
        } else {
            move_uploaded_file($image["tmp_name"], "video_images/" . $image["name"]);
            move_uploaded_file($file["tmp_name"], "videos/" . $file["name"]);
           
            //include "connect.php";
            // Insert into database
           
            echo "Stored in: " . "video_images/" . $image["name"] . "<br />";
            echo "Stored in: " . "videos/" . $file["name"] . "<br />";
        }
    }
}
Avatar billede olebole Juniormester
31. januar 2009 - 21:16 #35
Inden du indsætter i databasen, skal du naturligvis sikre dig, at alle variabler indeholder det forventede og er sikre at indsætte. For at sikre dig med sql-injections bør du bruge mysqli, hvis din server understøtter det:
    http://dk2.php.net/manual/en/book.mysqli.php

Begynd evt. med eksemplerne her:
    http://dk2.php.net/manual/en/mysqli-stmt.prepare.php
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