Autor Zpráva
pepe
Profil *
Dobry den, mám skript na uploadovanie suborov všetko fungovalo až dovtedy ked som pridal viac suborov

    $velkost = "10000000"; // hodnota v bytoch

$validextensions = array("PNG", "jpg", "jpeg",  "mp3", "wav", "JPEG", "JPG", "bmp", "BMP", "png", "MP3");
    $temporary = explode(".", $_FILES["file"]["name"]);
    $file_extension = end($temporary);

    if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "audio/mp3") || ($_FILES["file"]["type"] == "audio/wav") || ($_FILES["file"]["type"] == "image/JPEG") || ($_FILES["file"]["type"] == "image/JPG") || ($_FILES["file"]["type"] == "image/bmp") || ($_FILES["file"]["type"] == "image/BMP") || ($_FILES["file"]["type"] == "image/PNG") || ($_FILES["file"]["type"] == "audio/MP3")) && ($_FILES["file"]["size"] < $velkost)// hodnota v bytoch Approx. 10mb files can be uploaded. (bytes)
     pokracovanie kodu....
     else {
        echo "<span>***Neplatná veľkosť súboru alebo typ***<span>";
    }
    
niekde je chyba a neviem kde lebo stale píše ***Neplatná veľkosť súboru alebo typ***
Taps
Profil
pepe:
Jaký typ souboru se snažíš uploadovat? Pro otestování je vhodné si vytisknout pole, které se vztahuje k $_FILES
<?
print_r($_FILES);
?>
pepe
Profil *
obrázky a zvuky
skúšam všetky aj tie ktore sa mi už nahrali a teraz nejdu... to je jpg, JPG ale aj mp3
Chro_
Profil *
Hodnota v $_FILES["file"]["type"] se dá podstrčit ze strany nahrávajícího soubor. Kontroluj, zda má soubor v názvu min. jednu tečku funkcí substr_count. Pokud ano, název exploduj podle tečky a vytáhni koncovku funkcí end. Tuto hodnotu prožeň funkcí strtolower (převede případně JPG na jpg). Koncovku porovnej funkcí in_array s hodnotami v poli povolených koncovek, které už v poli nemusí být duplicitní (mp3 vs MP3). Pokud je koncovka obsažena a velikost souboru je do limitu (ale také od limitu - nikdo nechce nulové a jednobajtové soubory), zkontroluj, pokud jde o soubory s příponou jpg, jpeg, bmp, gif, png funkcí getimagesize, zda jde opravdu o obrázek. Jestli ok, soubor ulož. Zvaž možnost uploadu obrazových souborů ve formátu webp od Googlu se stejnou koncovkou.
Taps
Profil
pepe:
co se týče zvuku, tak soubory mp3 mi vrací níže uvedené type
[type] => audio/mpeg. Zkus to přidat do podmínky.
mimochodec
Profil
"ked som pridal viac suborov"

kam jsi pridaval soubory?


muj tip: tomu file jsi pridal multiple, chces nahravat vic souboru najednou. To s tim ale musis pracovat jako s polem.
Chro_
Profil *
Zřejmě jen přidal více mime typů do podmínky if. Za ($_FILES["file"] ["size"] < $velkost) mu chybí ještě jedna uzavírací kulatá závorka, která by měla uzavírat všechny výrazy v if.
mimochodec
Profil
Taky by mi udelalo radost, kdyby toto nezafungovalo jako cislo: $velkost = "10000000" ; a nasledne porovnani.
To ale asi bohuzel funguje.
pepe
Profil *
podsielam celý kod..

if (isset($_POST['submit'])) {
    // nastavenia 
    $stranka = "http://nieco.sk";     
    $priecinok = "myfile/";
    $velkost = "10000000"; // hodnota v bytoch 
    $subor = $_FILES["file"]["name"]; 
    // nastavenia end 

            $page = "html obsah...{$stranka}{$priecinok}{$subor}";
    

    //page end 
    $validextensions = array("PNG", "jpg", "jpeg",  "mp3", "wav", "JPEG", "JPG", "bmp", "BMP", "png", "MP3");
    $temporary = explode(".", $_FILES["file"]["name"]);
    $file_extension = end($temporary);

    if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "audio/mp3") || ($_FILES["file"]["type"] == "audio/wav") || ($_FILES["file"]["type"] == "image/JPEG") || ($_FILES["file"]["type"] == "image/JPG") || ($_FILES["file"]["type"] == "image/bmp") || ($_FILES["file"]["type"] == "image/BMP") || ($_FILES["file"]["type"] == "image/PNG") || ($_FILES["file"]["type"] == "audio/MP3")) && ($_FILES["file"]["size"] < $velkost)// hodnota v bytoch Approx. 10mb files can be uploaded. (bytes)
            && in_array($file_extension, $validextensions)) {

        if ($_FILES["file"]["error"] > 0) {
            echo "Return Code: " . $_FILES["file"]["error"] . "<br/><br/>";
        } else {
            echo "<span style=\"color:#00da00;\">Váš súbor bol úspešne uložený!</span><a href=\"#tagy\">[Zobraziť tagy]</a><br/>"; 
                
            if (file_exists($priecinok . $_FILES["file"]["name"])) {
                echo "<b>Tento súbor už je uložený na našom servery</b><a href=\"#tagy\">[Zobraziť tagy]</a><br>";
                  echo $page;
            } else {
                move_uploaded_file($_FILES["file"]["tmp_name"], $priecinok. $_FILES["file"]["name"]);
                     echo $page;
            } 
        
        }
    } else {
          echo "<span>***Neplatná veľkosť súboru alebo typ***<span>";
    }
}
mimochodec
Profil
pepe:
podsielam celý kod..

A co s tím? Je to vyřešeno?
Taps
Profil
pepe:
jak vypadá formulář pro nahrávání souboru?
Davex
Profil
pepe:
Prohlížeč bude v MIME typu používat pouze malá písmena a řetězec za lomítkem nemusí odpovídat příponě souboru. Třeba Internet Explorer posílal JPEG obrázky s MIME typem image/pjpeg a PNG obrázky jako image/x-png. Tuším, že MP3 bude mít MIME typ audio/mpeg atd. Navíc lze tuto hodnotu podvrhout a po uložení už záleží jenom na příponě, takže MIME typ moc nemá smysl kontrolovat.

Mimochodem, kontrola poslední přípony ve jméně nahrávaného souboru je nedostatečná, protože některé webhostingy umožňují spouštět i PHP skripty s dvojitou příponou. Např. skript.php.jpg. Také by bylo dobré oříznout všechno před jménem souboru, aby nešel použít útok průniku do adresářů. Ideální by bylo vygenerovat nové bezpečné jméno.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: