Autor Zpráva
Ben
Profil *
Ahoj,
mám script na nahrávání flv souborů přes webform a zasekl jsem se na ověřování, zda se jedná skutečně o flv soubor.
Mám tento script:
<?php

//pripojeni k mysql
require_once("../config.php");

//nastaveni promenych
$nadpis = mysql_real_escape_string($_POST["nadpis"]);
$soubor = $_POST["rok"]."-".date("Y-m-d_H-i-s")."-".$_FILES["video"]["name"];
$soubor = trim($soubor);
$soubor = mysql_real_escape_string($soubor);
$popis = mysql_real_escape_string($_POST["popis"]);
$rok = mysql_real_escape_string($_POST["rok"]);
$sql = 'INSERT INTO videa (
        `id`, `rok`, `nadpis`, `odkaz`, `popis`)
       VALUES (
        NULL, \''.$rok.'\', \''.$nadpis.'\', \''.$soubor.'\', \''.$popis.'\');
       ';

//zpracovani po odeslani
set_time_limit(7200);

if($_POST["ok"]){
  if($_POST["nadpis"] && $_FILES["video"] && $_POST["popis"] && $_POST["rok"]){
    if($_FILES["video"]["type"] == "video/x-flv"){
      $chyba = "";
      if (!$_FILES || $_FILES["video"]["error"] == UPLOAD_ERR_INI_SIZE) {
        $chyba = "<p class=\"error\">Soubor je příliš velký, maximální velikost je " . ini_get('upload_max_filesize') . ".</p>\n";
      }
      elseif ($_FILES["video"]["error"] == UPLOAD_ERR_NO_FILE) {
        $chyba = "<p class=\"error\">Nevybrali jste soubor, který chcete nahrát.</p>\n";
      } 
      elseif ($_FILES["video"]["error"]) {
        $chyba = "<p class=\"error\">Soubor se nepodařilo nahrát!</p>\n";
      }
      else{
        //ulozit na server
        if(move_uploaded_file($_FILES["video"]["tmp_name"], "../video/$soubor")){
          echo"<p>Video bylo úspěšně uloženo</p>";
          $send = true;
                  //ulozit data do MySQL
          if(mysql_query($sql)){
            echo"<p>Data byla úspěšně uložena!</p>";
            echo"<p><a href=\"insert_to_videos.php\">Nahrát další video do Galerie</a>";
            $send = true;
          }
          else{
            echo "<p class=\"error\"><strong>Uložení dat do databáze selhalo!</strong>Zkus to znovu.</p>";
          }
        }
        else{
          echo "<p class=\"error\"><strong>Uložení videa selhalo!</strong>Zkus to znovu.</p>";
        }

      }
    }  
    else{
      echo"<p class=\"error\"><strong>Vybraný soubor není ve formátu *.flv</strong></p>";
      echo "Tip videa je: " . $_FILES["video"]["type"] . "<br />";
    }
  }
  else{
    echo "<p class=\"error\"><strong>Nejsou vyplněna všechna povinná pole!</strong></p>";
  }
}
//zobrazeni formulare
else{//zobrazeni formulare
}
?>


A pokaždé, když chci nahrát flv soubor, tak mi script zkončí na chybové hlášce: Vybraný soubor není ve formátu *.flv
Tip videa je: application/octet-stream
. A nechápu, proč mi to háže, že tip souboru je octet-stream. U jiných tipů souborů mi to vypisuje správný tip.

Máte někdo nějaké nápady?

Moderátor Alphard: Tipujeme výsledky zápasu, ale u souborů ověřujeme typy.
Louka
Profil
Být tebou ověřuju spíš příponu, nebo to se pro tvé účely nehodí?
Pozn: jak přípona, tak hlavička jdou snadno přepsat, takže je to v podstatě jedno.
Ben
Profil *
Zkusím ještě přidat to ověřování přípony. Díky za radu! :)
Keeehi
Profil
Ben:
Co je v $_FILES["video"]["type"] záleží na prohlížeči. Tento údaj "vyplňuje" prohlížeč. (takže se to mimo jiné dá velmi lehce podvrhnout)
__construct
Profil
Ben:
Cez PHP to môžeš kontrolovať funkciou finfo_file() / metódou finfo::file - pokiaľ máš PHP 5.3 a PECL. Ak máš staršiu verziu PHP tak použi funkciu mime_content_type

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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