Řešení pro hromadný upload obrázků jen s PHPčkem – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Řešení pro hromadný upload obrázků jen s PHPčkem – PHP – Fórum – Programujte.comŘešení pro hromadný upload obrázků jen s PHPčkem – PHP – Fórum – Programujte.com

 

shneck
~ Anonymní uživatel
12 příspěvků
20. 8. 2011   #1
-
0
-

 Mělo by to být hned funkční po vytvoření adresáře galerie a nastavení práv toho adresáře na 777. Je to ale vyzkoušeno jenom na mozille...Uvítám postřehy z jiných prohlížečů a popřípadě i řešení.

<style>
.uploaddiv img
{
max-height:100px;
}
</style>
<?
if ("$akce"=="uloz")
{
$poletextu=explode("<img",$raw);
$pocet=count($poletextu);
for ($i=1; $i<$pocet; $i++)
{
$raw=stripslashes($poletextu[$i]);


if (eregi('image/jpeg', $raw))
{
$pripona="jpg";
}
if (eregi('image/jpg', $raw))
{
$pripona="jpg";
}
if (eregi('image/gif', $raw))
{
$pripona="gif";
}
if (eregi('image/png', $raw))
{
$pripona="png";
}
$raw=str_replace('" alt="">',"",$raw);
$zacatek='<img';
$prostredek='base64,';
$poz_zac=strpos($raw, $zacatek);
$poz_pro=strpos($raw, $prostredek);
$poz_pro=($poz_pro+6);
$odstranit=substr($raw, $poz_zac, $poz_pro);
$raw=str_replace($odstranit,"",$raw);
$decode=base64_decode($raw);
$jmeno=time();
$soubor = fopen("galerie/".$jmeno."-".$i.".".$pripona."", "w+");
fwrite($soubor, "$decode");
fclose($soubor);
}
}
?>
<body onmousemove="show()">
<script>
function show()
{
document.formular.raw.value=tabulka.innerHTML;
}
</script>
<br><br><center>
<div id="tabulka" class="uploaddiv" style="background: #cccccc; width: 90%;
height: 90px;" contenteditable></div>
<form name="formular" method="post">
<input type="hidden" name="raw">
<input type="submit" id="button" name="akce" value="uloz">
</form>
Nahlásit jako SPAM
IP: 89.102.48.–
null_while
~ Moderátor
+6
Věrný člen
21. 8. 2011   #2
-
0
-

#1 shneck
Řešení ochrany povolených přípon mi přijde zbytečné, neefektivní. 

 Toto se mi zdá efektivnější a jednodušší na úpravu:

$name = $uploadovany_soubor['name']; 
$pripona = explode(".", $name);
$pripona = $pripona[count($pripona)-1]; 
if (!in_array($pripona, array("jpg", "jpeg", "gif", "png"))){ 
       
echo "nepovolený typ souboru <br />";
       
continue;
Nahlásit jako SPAM
IP: 84.16.103.–
WEBNIA.cz - tvorba webových stránek
shneck
~ Anonymní uživatel
12 příspěvků
22. 8. 2011   #3
-
0
-

#2 null_while
Díky za tip, ale problém bude v tom, že já zjišťuju příponu ještě před uploadem...A to tim, že když vložim obrázek do DIVu, tak se do zdrojového kódu vloží něco jako

<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAg...hodně dlouhej řetězec...vK0MyOgBZKk0FpAR1QBQB//Z" alt="">

A já potřebuju z tohoto textu zjisti o jakej typ obrázku se jedná, abych ho mohl při uploadu řádně uložit. Napřed jsem se na to vyprdl a všechno ukládal jako JPG (alespoň mozilla a IE to stejně zobrazí i kdyby originál byl PNG), ale pak s obrázkem nemůžu pomocí PHP pracovat (zmenšovat apod...).

Ale každopádně děkuju za reakci. Rád si přečtu i jiné zádrhele nebo lepší řešení...

Nahlásit jako SPAM
IP: 77.104.245.–
null_while
~ Moderátor
+6
Věrný člen
22. 8. 2011   #4
-
0
-
Nahlásit jako SPAM
IP: 84.16.103.–
WEBNIA.cz - tvorba webových stránek
shneck
~ Anonymní uživatel
12 příspěvků
24. 8. 2011   #5
-
0
-

#4 null_while
Možná to je špatně vysvětleno, ale principielně to pracuje asi tak, že si označíš hromadu obrázků, které si chceš nahrát na web(což klasický input nedovoluje, musel by si označovat jeden obrázek za druhy, což je hrozně zdlouhavé a nepohodlně), ty přetáhneš do DIVu, kterej má vlastnost, že jeho obsah můžeš upravovat CONTENTEDITABLE....no a vedlejší produkt, týhle vlastnosti je ten, že dokáže obrázky od tebe z PC převés na text (aby se ten přetáhlej obrázek mohl zobrazit v tom DIVu)....Ten text je podle "zakódovanej", tak já ho dekóduju a uložim s příslušnou příponou. Chápu, že se dá pracovat i s jinejma typama obrázků než jenom s JPGčkem, ale právě proto musim zjistit tu příponu obrázku ještě dřív než ho uploaduju, protože při uploadu ho ukládám na web a potřebuju vědět jeho název i s příponou. Ale jelikož nepracuju se souborem jako takovym, ale s řetězcem, tak nemůžu používat metody jako 

$name = $uploadovany_soubor['name']; 

Protože prostě ukládám jenom čistej text....A ten potřebuju uložit do souboru s příslušnou příponou, protože, když uložim PNGčko jako JPGčko, tak ho v PHP nemůžu třeba zmenšovat, protože přístup k JPG je jinej než k PNG.

Pokud bych z PC vložil třeba PIC23.PNG a uložil ho pod jméno PIC23.JPG, tak už ho nezmenším, protože bych jednoduše nevěděl jeho původní příponu a pro práci s obrázky využíváš mimo jiné následující kód....Kterej si zase ale neporadí s tím, že ten obrázek je vlastně jenom přejmenovaný PNGčko

$image = imagecreatefromjpeg($filename);

Snad už je ve funkci mojeho skriptu jasno. V žádném případě neříkám, že to je nejlepší řešení, ale je moje, umožňuje hormadný upload bez otravného klikání na jednotlivé fotky, bez formulářů, klasickým přetažením, bez flashe, bez nutnosti prokousávat se stovkama řádků jquery, javascriptových, php, html kódů a zjišťovat, kde se má co změnit aby se to přizpůsobylo mojemu webu (vzhled, složka pro nové obrázky apod...). Pro mě osobně je to výhra, protože sám jsem strávil dost času hledáním jednoduchého uceleného skriptu, který umožňuje výběr více obrázků najednou bez zbytečné omáčky, tak abych si to upravil pro svojí potřebu....Kdybych strávil více času vymejšlením lepších názvů proměnných, tak by ten kód byl podle mě ještě více pochopitelnější, ale na to jsem neměl čas, byl jsem zvědavej jestli to bude fungovat...Ale i tak si myslim, že toho kódu neni tolik aby se do toho člověk nezakoukal a ihned bude vědět o co se jedná....

Nahlásit jako SPAM
IP: 89.102.48.–
null_while
~ Moderátor
+6
Věrný člen
24. 8. 2011   #6
-
0
-

Huh, dalo mi to práci se přemluvit, abych to četl... No jak myslíš, už funkci chápu, i ten hash, ale stále se mi to zdá zbytečné, nepřehledné.

Nahlásit jako SPAM
IP: 84.16.103.–
WEBNIA.cz - tvorba webových stránek
shneck
~ Anonymní uživatel
12 příspěvků
25. 8. 2011   #7
-
0
-

Nepřehledný...Jak jsem psal, kdybych si dal více práce se smysluplnějším pojmenováváním proměnných, tak by ten kód dával smysl rychleji a nemuselo by se to luštit. Taky kdybych uměl pracovat s regulerníma výrazama, tak bych nemusel tak kostrbatě hladat pozice řetězců, kterých se chci zbavit, ale na druhou stranu....ukaž mi jinej zdroják, kterej umožňuje hromadný upload obrázků (a nevybírat jednu fotku po druhé), kterej bude zabírat míň nebo stejně. Ale pochopitelně, přehlednost nebo nepřehlednost je věc názoru. Nechci to nikomu nutit, jenom si ohajuju svoje dílo :D

Nahlásit jako SPAM
IP: 77.104.245.–
m->29+6
Super člen
25. 8. 2011   #8
-
0
-

No tak sa zapojím. Predtým ako si to vysvetlil, tak som si vravel WTF a nechcelo sa mi opravovať zdroják aby fungoval. Ale ako si to vysvetlil, tak mi to nedalo. Ale som celkom sklamaný, pretože mi to funguje len vo FF. Tebe to ide aj v iných prehliadačoch? V akých si to testoval?

Ako si vlastne prišiel na túto vlastnosť prvku s contenteditable? Niekde si o tom niečo našiel, alebo len skúšal? Je to štandardné správanie? A inak, môj zdroják vyzerá takto: 

<?php

if(isSet($_POST['raw']) && is_string($_POST['raw'])) {
  if(get_magic_quotes_gpc()) {
    $_POST['raw'] = stripSlashes($_POST['raw']);
  }

  // data in "data" URL scheme (http://tools.ietf.org/html/rfc2397)
  $images = array();
  preg_match_all(
    '#<img\s+src="data:image/(?P<extension>[^;]+);base64,(?P<data>[^"]+)"[^>]*>#i',
    $_POST['raw'],
    $images
  );

  $timestamp = time();
  foreach($images['extension'] as $order => $extension) {
    file_put_contents(
      "galerie/$timestamp#$order.$extension",
      base64_decode($images['data'][$order])
    );
  }
}

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>Multiupload</title>
  <style>
  #tabulka {
    background:#CCCCCC;
    width:100%; height:100px;
  }
  #tabulka img {
    max-height:100px;
  }
  </style>
  <script type="text/javascript">
  window.addEventListener("load", function(evt) {
    document.forms["formular"].addEventListener("submit", function(evt) {
      var form = evt.target,
          dataContainer = document.getElementById("tabulka");
      form.elements["raw"].value = dataContainer.innerHTML;
    }, false);
  }, false);
  </script>
  </head>


  <body>
    <div id="tabulka" contenteditable></div>

    <form name="formular" method="post">
      <input type="hidden" name="raw">
      <input type="submit" value="Uložiť">
    </form>
  </body>
</html>
Nahlásit jako SPAM
IP: 78.141.66.–
shneck
~ Anonymní uživatel
12 příspěvků
25. 8. 2011   #9
-
0
-
Nahlásit jako SPAM
IP: 77.104.245.–
m->29+6
Super člen
25. 8. 2011   #10
-
0
-

#9 shneck
No ja som myslel skôr nejaké veci v súvislosti s tým drag&drop obrázkov. O tom som toho moc zmysluplného nenašiel. A skúšal som to aj v Opere a Chrome a nejde to. Jediný FF to zvláda. No nič, ale pekný nápad. Som to chcel využiť ako alternatívu k JS pre staršie prehliadače :-(

Nahlásit jako SPAM
IP: 78.141.66.–
shneck
~ Anonymní uživatel
12 příspěvků
25. 8. 2011   #11
-
0
-

#10 m->29
Jo tak... No tak na tu metodu drag and drop jsem taky přišel náhodou...dělal jsem totiž něco podobného jako je tady na psaní této diskuze (jednoduchej textovej editor) a nějakou náhodou mi tam "upadl" obrázek . Taky se teď jdu poohlédnout po nějakejch chtrejch článcích o content editable abych zjistil, jak by to šlo upravit pro ostatní prohlížeče...

Nahlásit jako SPAM
IP: 77.104.245.–
shneck
~ Anonymní uživatel
12 příspěvků
16. 1. 2012   #12
-
0
-
Nahlásit jako SPAM
IP: 92.62.224.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Hromadný upload fotek — založil Paja2

Hromadný upload súborov... ? — založil Tocimanko

Upload obrázků — založil Vojcek

Upload obrázků — založil Václav Žitek

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý