Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno [MYSQL] Vloženie súboru *.rar do BLOB

Dobry den.

Zaujimalo by ma, ci je mozne do MYSQL do pola typu BLOB, vlozit subory ako *.rar, *.exe, *.avi, *.mp3.

Moj skript bez problemov do BLOB-u uklada ale len dokumenty a obrazky.

Takze vie niekto o tom ci sa tam daju vlozit aj ine veci ako dokumenty a obrazky? Ak hej , tak ako ?

vopred dakujem.

Předmět Autor Datum
Řekl bych, že by to mohlo být tímto? If you want to insert binary data into a string column (such a…
host 27.09.2007 22:07
host
Mam tam funkciu addslashes($content) . To by malo stacit. Nie ?
mrazik 27.09.2007 22:11
mrazik
No, mělo... A tak co ti přesně nefunguje? article.php
host 27.09.2007 22:19
host
No hodim sem maly fragment kodu: $fp = fopen($tmpName, 'r'); $content = fread($fp, $fileSize); $con…
mrazik 27.09.2007 22:22
mrazik
Zkus takto: $fp = fopen($tmpName, 'rb'); $content = addslashes(fread($fp, filesize($tmpName))); fcl…
host 27.09.2007 22:28
host
Jaaaaj rb som zabudol. Vdaka. Subor uzatvaram hned po precitani, este pred sql dotazom. Len sprava…
mrazik 27.09.2007 23:00
mrazik
Jestli není nějaký problém s velikostí souboru - viz. typy blobu. A soubor bych raději uzavřel až po…
host 27.09.2007 23:09
host
s blobom nie je problem .... pole v DB mam nastavene na LONGBLOB , do ktoreho mozem upratat 4 GB sub…
mrazik 27.09.2007 23:12
mrazik
A nemůže být nějaký problém ještě s názvem souboru? Mezery, wildcards...?
host 27.09.2007 23:15
host
Tam je vlastne uplne jedno kde sa ten subor uzatvara pretoze on chybu vyhodi uz pri fread().
mrazik 27.09.2007 23:17
mrazik
Trosku som testoval execka a videa a prisiel som na taku vec. Ze vsetky exe subory a videa mensie ak…
mrazik 27.09.2007 23:51
mrazik
U MySQL nám zase překáží maximální velikost SQL dotazu, která je kolem 1 MB. To bys musel zkusit so…
host 28.09.2007 00:02
host
A neda sa ta velkost dotazu sql niekde nastavit ? Pozeral som php.ini ale tam nic nie je. Este mozno…
mrazik 28.09.2007 00:16
mrazik
tak predsa som v my.ini nasiel to nastavenie ... A uz to nehadze sql error .. ale tie warningy :-D
mrazik 28.09.2007 00:18
mrazik
Tak je asi nějaký problém s tím souborem - nelze přečíst, je špatně zadaná cesta, případně nějaký pr…
host 28.09.2007 00:34
host
S nazvami suborov to nema nic, pretoze dal som len jednoduchy nazov: subor.mp3 a aj tak to vyhodil…
mrazik 28.09.2007 14:21
mrazik
Takze dalsie novinky .... zistil som ze pri suboroch nad 1 MB to stale vypisuje aj tu SQL chybu (ale…
mrazik 28.09.2007 15:21
mrazik
Uz som sa pohol dalej ... ale ak uploadujem do DB subor vacsi ako 1 MB vyhodi mi to sql chybu: MySQ…
mrazik 29.09.2007 13:46
mrazik
Vie mi niekto poradit preco mozem uploadovat len subory do 16 MB ? V nastaveniach mysql som zvysil…
mrazik 30.09.2007 01:51
mrazik
Nejde to ani přes phpMySQLAdmina?
host 30.09.2007 08:50
host
You also get a lost connection if you are sending a packet 16MB or larger if your client is older th…
los 30.09.2007 11:01
los
Server mam 5.0.33 a klienta mam 3.23.49. Ale nie je mi teda uplne jasne co je to ten klient . . .
mrazik 30.09.2007 14:02
mrazik
Takze klienta som upgradoval tiez na verziu 5.0.33 a uz to konecne ide. Uz mam len problem ze mi to…
mrazik 30.09.2007 14:23
mrazik
Jaaaj boze .. ja puk .. vsak to je Apachovska chyba a nie MYSQL :-[ OK problem vyrieseny .... uz to…
mrazik 30.09.2007 14:28
mrazik
Pozri si memory_limit v php.ini. edit: zasa neskoro.
los 30.09.2007 14:28
los
:-) poslední
mrazik 30.09.2007 14:30
mrazik
Klientom je rozšírenie pre PHP, ktoré sa pripája na MySQL. Verziu klienta, ktorú používa PHP, zistíš…
los 30.09.2007 14:26
los
Nevadi ze neskoro ... ale s tou verziou klienta si ma naviedol spravnym smerom. Lebo mal som tam PHP…
mrazik 30.09.2007 14:30
mrazik

Řekl bych, že by to mohlo být tímto?

If you want to insert binary data into a string column (such as a BLOB column), the following characters must be represented by escape sequences:
NUL NUL byte (ASCII 0). Represent this character by ‘\0’ (a backslash followed by an ASCII ‘0’ character).
\ Backslash (ASCII 92). Represent this character by ‘\\’.
' Single quote (ASCII 39). Represent this character by ‘\'’.
" Double quote (ASCII 34). Represent this character by ‘\"’.

http://dev.mysql.com/doc/refman/5.0/en/string-synta x.html

No hodim sem maly fragment kodu:

$fp = fopen($tmpName, 'r');
$content = fread($fp, $fileSize);
$content = addslashes($content);
fclose($fp);

Pri uploadovani *.rar alebo *.exe atd ... to vyhodi dva warningy:

Warning: fread(): supplied argument is not a valid stream resource
Warning: fclose(): supplied argument is not a valid stream resource

Jaaaaj rb som zabudol. Vdaka.

Subor uzatvaram hned po precitani, este pred sql dotazom.

Len sprava sa to strasne divne. Niektore archivy a exe subory to uz uklada. Ale niektore stale nie.

Bud to vypise tie dva warningy, cize nemoze ho nacitat, alebo dokonca pri jednom exe-cku mi tam hodi chybu mysql: MySQL server has gone away.

Je to divneee ... ale pokrok je ze to uz aspon niektore kopiruje.

Trosku som testoval execka a videa a prisiel som na taku vec. Ze vsetky exe subory a videa mensie ako 1 MB kopirovat idu. Ale vacsie hodia chybu sql.

Aby som to upresnil:
Vacsie exe subory a videa wmv vracaju sql error.

A ostatne videa vracaju tie dva warningy, ze nemoze citat subor.

Ale v databaze mam LONGBLOB aj v php konfiguracii som si nastavil POST data na 1 GB aj UPLOAD na 1 GB. Tam problem nemoze byt.

U MySQL nám zase překáží maximální velikost SQL dotazu, která je kolem 1 MB.

To bys musel zkusit soubor "rozřezat".

$fp = fopen(_PATH_, "rb");
      while(!feof($fp))
      {
       $data .= fread($fp, filesize(_PATH_));
      }
      fclose($fp);
  
      $splits = strlen($data)/65536;
      $data = addslashes($data); 
      $data = addcslashes($data, "\0"); 
      for($i=0; $splits>$i; $i++){
          $lim = ($i==0)?(0):((65536*$i)-2);
          $cutdata = substr($data, $lim, 65536);
          $seq=$i+1;
      $SQL=" INSERT INTO "._DB_PREFIX_."file_storage SET ";
      $SQL.=" xref = '".$_COOKIE[userid]."', ";
      $SQL.=" file_xref = '$file_xref', ";
      $SQL.=" groupid = '0', ";
      $SQL.=" privs = 'Private', ";
      $SQL.=" mime = '$mime', ";
      $SQL.=" filename = '$file', ";
      $SQL.=" data = '$cutdata', ";
      $SQL.=" timestamp = '".time()."', ";
      $SQL.=" seq = '".$seq."' ";
      mysql_query($SQL);
      }  

S nazvami suborov to nema nic, pretoze dal som len jednoduchy nazov:

subor.mp3

a aj tak to vyhodilo warningy.

Zistil som este taku vec, ze aj tie warningy mi vypisuje len ked dam subor vacsi ako 1 MB.

Takze by to teoretciky mohlo byt este nieco v nastaveniach. Ale uz neviem co. Lebo som nastavoval upload_max_filesize, post_max_size aj execution time. V my.ini som nastavil max_allowed_packet.

Co ine by to este mohlo byt?

Takze dalsie novinky .... zistil som ze pri suboroch nad 1 MB to stale vypisuje aj tu SQL chybu (ale nie pri vsetkych).

Niekde to hodi warningy. Ale subor vacsi ako 1 MB tam nedostanem ... (ani obrazok).

Nasiel som na jednej stranke toto:

On systems running PHP which differentiate between binary and text files (such as Windows), you'll need to open the file in binary mode by including b along with any other modes that you may require. To read a file on a Windows system using binary mode you'd use rb instead of the r you'd use on a UNIX-compatible system. Also, if you have "magic quotes" enabled, fread() may not function as expected (especially when dealing with a null character). PHP will automatically convert the "null" character to its escaped version \0 in the resulting input. Toggling "magic quotes" can be done by using the set_magic_quotes_runtime() and get_magic_quotes_runtime() functions whose information is available in the PHP manual.

Ak som tomu spravne pochopil, tak pri zapnutych magic_quotes to nefunguje spravne ?

Pozn.: moj server bezi na Windows

Vie mi niekto poradit preco mozem uploadovat len subory do 16 MB ?

V nastaveniach mysql som zvysil max allowed packet na 256 MB. Skusal som aj ine premenne zvysovat.

Ale vie niekto o premennej ktoru treba navysit, aby som mohol uploadovat do DB subory vacsie ako 16 MB ?

vdaka

You also get a lost connection if you are sending a packet 16MB or larger if your client is older than 4.0.8 and your server is 4.0.8 and above, or the other way around.

Aká je verzia MySQL servera a klienta - sú rovnaké alebo sa upgradoval server a na klienta sa zabudlo?

Takze klienta som upgradoval tiez na verziu 5.0.33 a uz to konecne ide. Uz mam len problem ze mi to hodi takuto peknu chybu ked uploadujem vacsi subor:

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 215771665 bytes)

Ja som skusal zdvihnut niektore premenne ... ale nevie nahodou niekto ktora presne moze sposobovat tuto chybu?

Zpět do poradny Odpovědět na původní otázku Nahoru