Diskuze: Upload obrázků/souborů -> složka tmp
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Vytvořil jsem z toho nudli a funguje to. Za jak dlouho se smaže soubor ze složky tmp? Já jen že po nahrátí souboru tam stejně nic není a ani v době nahrávání jsem nic nedokázal zpozorovat.
Zase nějaký šašek co umí jen dávat mínusy? Tak hlavně že vím proč, předpokládám že to neví ani sám dotyčný a nebo se bojí že jeho odpověď by byla možná ještě větší blbost. Tak hodně štěstí ! Zřejmě nějaký kid.
Zřejmě si ho dostal, protože neumíš položit otázku a potom dáváš otázky na který ti nikdo krom tebe odpovědět nedokáže.
Pakliže to tak je, tak bez komentáře to nezjistím. Na víc si myslím že popis obsahuje vše co je třeba pro toho kdo ví o co se jedná. To že někdo otázce nerozumí neznamená hned, že je špatně položená A nevím co bych na popisu měl upravit, což bych klidně rád.
Možná by mi stačilo jen poradit, jak přesunu input typu "file" do dalšího formuláře.
Snažím se používat MVC Architekturu.
Mám 3 formuláře, ale stačí se bavit o 2 posledních.
(Jsou to jen pohledy pro malou představu)
1. (zadání inzerce)
http://pastebin.com/WSeFd7Mz
2. (údaje k editaci)
http://pastebin.com/5H5Nivf8
Poslední formulář tlačítkem "Dokončit" Vše nahraje tam kam má. Všechno včetně kontroly atp funguje perfektně. Jenže já potřebuji vložit obrázek ve formuláří "1. (zadání inzerce)" ale uložit fotografie až v Dokončení.
Soubor v proměnné $_FILES je pouze pole, tudíž pokud si ho uložíš do COOKIES (popřípadě SESSION), můžeš proměnnou použít v dalších souborech.
Ano, do SESSION jsem to uložil, ale jakmile se snažím vyvolat movie_uploaded_file() nebo copy() tak to již tmp_name nedokáže přesunout, protože neexistuje.
Po odeslání formuláře udělám toto:
$_SESSION['obrazky'] = $_FILES['obrazky'];
Pakliže z toho vytvořím pole, mohu to pak volat např. i takto:
$_SESSION['obrazky'] ['tmp_name']['0'] ...
$_SESSION['obrazky'] ['name']['0'] ...
$_SESSION['obrazky'] ['size']['0'] ..
Každopádně když si to vypíšu vše je v pohodě...tmp_name i name i size to vypíše, ale při zpracování to již nemůže v druhém formuláři najít soubor i když jméno znám.
Inspiroval jsem se:
http://tutorialy.vytvorweb.cz/…souboru.html
1. Po zpracování formmuláře udělám tedy toto:
$_SESSION['obrazky'] = $_FILES['obrazky'];
2. Teoreticky by mělo stačit dle uvedeného "návodu" upravit jenom
$soubor = ($_FILES["soubor"]["tmp_name"]);
$soubor_name = ($_FILES["soubor"]["name"]);
$soubor_size = ($_FILES["soubor"]["size"]/1024)/1024;
Na místo toho napsat už toto: (aktuálně vkládám jen 1 fotku)
$soubor = ($_SESSION["obrazky"]["tmp_name"]);
$soubor_name = ($_SESSION["obrazky"]["name"]);
$soubor_size = ($_SESSION["obrazky"]["size"]/1024)/1024;
Jenže $soubor ... neboli $_SESSION["obrazky"]["tmp_name"] již nemůže nalézt soubor s daným názvem.
Nenašel jsem řešení, které by bylo nějak elegantní (ledaže bys celý formulář dal na jedinou stránku rozdělenou jQuery), ale mohl by sis vytvořit vlastní dočasný soubor. Místo automaticky vytvořeného pak budeš jen přesouvat (a přejmenovávat) dočasný soubor, nebo ho smažeš. Raději si ale počkej na jiné odpovědi, nejsem si jistý, jak bys na tom byl s rychlostí.
Jako jediné řešení uložit dočasně soubor/soubory jinam a pak přesunout mě napadlo taktéž, ale pro výsledek je to spíše nereálné. Když dotyčný nedokončí inzerci, tak soubor bude vyset a nedokážu si představit jak bych to promazával, tak abych náhodou neovlivnil někoho kdo tam zrovna taky něco vkládá a bez dokončení nemám prakticky identifikaci o dotyčném a nedokážu pak řádně s daty manipulovat.
Veškerá data se po celou dobu ukládají do SESSION a pak se zpracují.Rozdělené to mám hlavně kvůli přehlednosti pro uživatele.
Napadlo mě při psaní:
Leda že bych na místo SESSION updatoval MySQL po každé části formuláře.
Tím pádem bych věděl ihned o koho se jedná, dokázal zapsat soubory k
danému uživateli a když to nedokončí, tak by se to automaticky po nějakém
čase smazalo. (To zní docela dobře)
Každopádně děkuji za snahu
Třeba je nějaké jiné řešení bez toho, aniž bych celou inzerci
musel předělávat.
http://stackoverflow.com/…-php-session
The $_FILES array only holds information about the file that has been uploaded in this request. If you do not save that file elsewhere within the same request, it will be removed by PHP at the end of the request.
Jednoduse receno, zpusob, kterym se snazis vec vyresit, nefunguje a fungovat nebude.
Proč výpis?
Potřebuji přenést $_FILES['obrazky'] z jednoho formuláře na druhý a jakmile se formulář zpracuje, tak $_FILES['obrazky'] je již prázdný, takže jediné řešení je to někam uložit. Aktuálně uložím informace o souboru do SESSION, ale nikoliv samotný soubor a to je ten problém. Potřebuji soubory uložit až po dokončení celého procesu. V opačném případě by se mohlo stát, že 10x uživatel zopakuje zápis formuláře, protože u toho třeba vařil, nebo dělal něco jiného a tak by se nahrávali fotografie, které by nikam nepatřili. Proto to chci hezky uložit až po úplném dokončení spolu se zápisem do MySQL.
Možná ale vidím řešení v tom to ukládat po celou dobu do MySQL jen mezi pamět do SESSION,.
I to je možné, že způsob je neřešitelný a musím jinak. Jestli to tak je což asi je, tak máš řešení
Řešení je tedy, že řešení tímto způsobem není.
Děkuji všem za snahu i těm blbcům co se neumí vyjádřit a jen dislajkujou, ať se jim hlavně spokojeně spí
Zobrazeno 14 zpráv z 14.