Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: ZAJDAN 06. 10. 2016, 14:28:50

Název: PHP - k čemu je funkce tempnam
Přispěvatel: ZAJDAN 06. 10. 2016, 14:28:50
Ahoj,
jednou z barier, kterou pocituji pri snaze pochopeni programovani ruznych jazyku je nevhodne pojmenovani funkci.
Mohl by mi prosim nekdo osvetlit jak je to s PHP funkci tempnam?

The tempnam() function creates a temporary file with a unique filename in the specified directory.

jak mám chápat tu dočasnost(temporary)? soubor se sám smaže? jakým způsobem je myšlena ta dočasnost?

díky
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: Daniel Kozak 06. 10. 2016, 14:50:30
Ne musis si to smazat sam, ta docasnost je tu spis myslena tak ze se ocekva ze ten soubor vyuzijes jen docasne, to znamena neco si do nej zapises pak si to treba prectes odjinud a soubor smazes
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: Kit 06. 10. 2016, 14:53:29
tempnam() vytvoří nový soubor tak, aby jeho název nekolidoval s žádným již existujícím souborem v adresáři.
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: ZAJDAN 06. 10. 2016, 15:03:49
diky hosi...
moderátor blbě změnil titulek vlakna, protože já se neptal na to, co ta funkce dělá ve své podstatě, pač já vím, že tím vytvořím soubor s "unikatnim" nazvem.
Mě zarážela ta dožasnost. Očekával bych, že název funkce se dá podle toho, jak se zachová stroj a ne jak člověk, proto jsem očekával, že soubor je dočasný z pohledu stroje.

díky
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: ZAJDAN 06. 10. 2016, 15:07:33
.
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: Kit 06. 10. 2016, 15:23:46
Většinou je nejlepší se dočasným souborům zcela vyhnout. Někdy to prostě jinak nejde a ten dočasný soubor se udělat musí...
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: Diskobolos 06. 10. 2016, 15:32:38
moderátor blbě změnil titulek vlakna, protože já se neptal na to, co ta funkce dělá ve své podstatě, pač já vím...

To víš, náš geniální co-všechno-ví-nejíp Péťa :-)
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: Trupik 06. 10. 2016, 16:18:19
Mě zarážela ta dožasnost. Očekával bych, že název funkce se dá podle toho, jak se zachová stroj a ne jak člověk, proto jsem očekával, že soubor je dočasný z pohledu stroje.
Myslím, že pomenovanie tejto PHP funkcie má základ v C-éčkovej funkcii tempnam, podobne ako väčšina PHP funkcií na prácu so súbormi:
Kód: [Vybrat]
man 3 tempnam
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: Petr Krčmář 06. 10. 2016, 16:24:09
To víš, náš geniální co-všechno-ví-nejíp Péťa :-)

Nevím všechno nejlíp. Ale když je titulek „PHP - tempnam“, tak je to málo. Je to ze škatulky „Firefox – problém“ a „Server – help!“. Chce to volit ty názvy popisněji, aby bylo jasné, na co se tazatel ptá. Pak nebude třeba je editovat.
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: Vasek 06. 10. 2016, 23:04:38
tempnam ma pravdepodobne v nazvu temp, pac je primarne urcena k vytvareni temp souboru v tmp slozce https://en.wikipedia.org/wiki/Temporary_folder (https://en.wikipedia.org/wiki/Temporary_folder). Spousta systemu je nakonfiguravana tak, aby se tato slozka pravidelne promazavala, takze by tam mely byt jen soubory, ktere nikomu nebudou chybet (idealne hned jak se uzavre posledni file descriptor).
A ted to tu muzem trochu roztocit. Opravdy bych nehledal nejaky smysl v nazvech php funkci. Kdyz se na ten seznam podivas, tak je to proste jen slatanina: diskfreespace, fclose, file_exists, filesize, realpath_cache_get, set_file_buffer
Komunita, ktera se nedokazala dohodnout na tom, jestli budou pouzivat camel case, podtrzitka nebo zkratky a jestli budou uvadet get/set na zacatku nebo na konci, rozhodne nestravila moc casu premyslenim nad vhodnosti nazvu funkci  :P
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: Kit 06. 10. 2016, 23:39:53
Ideální je takový dočasný soubor smazat ihned po vytvoření a teprve pak s ním začít pracovat.
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: q 07. 10. 2016, 00:11:53
Ideální je takový dočasný soubor smazat ihned po vytvoření a teprve pak s ním začít pracovat.
Na *nix systemoch ano, ale ohrozi to prenositelnost na ine systemy. Na toto pouzitie je lepsie pouzit PHP funkciu tmpfile(), ktora je prenositelna a zaisti aj zmazanie.
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: Kit 07. 10. 2016, 00:51:44
Ideální je takový dočasný soubor smazat ihned po vytvoření a teprve pak s ním začít pracovat.
Na *nix systemoch ano, ale ohrozi to prenositelnost na ine systemy. Na toto pouzitie je lepsie pouzit PHP funkciu tmpfile(), ktora je prenositelna a zaisti aj zmazanie.

To je právě ta otázka, zda funkce tmpfile() zajistí i smazání souboru. Domnívám se, že tohle nedělá.
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: Martin Dimov 07. 10. 2016, 02:34:11
Soubor z tmpfile() se smaze s ukoncenim skriptu, viz doc.
Hlavni historicky a prakticky rozdil je, ze tmpfile() vraci resource, zatimco tempnam() nazev souboru. Ne vzdycky chceme soubor rovnou otevrit, napr. pri volani nejakeho externiho skriptu s vice vystupy.

Pokud je vhodne automaticke mazani pri ukonceni skriptu a zaroven pracovat s nazvem souboru, tak lze tempnam() efektivne nahradit: stream_get_meta_data(tmpfile())['uri']; (ale jiz bude vytvoren, coz obvykle nevadi)

Pokud tedy neni potreba, aby tmp soubory pretrvavaly po ukonceni skriptu, tak je tempnam() asi k nicemu, krome tvorby vlaken v diskuzich  :D
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: ZAJDAN 12. 10. 2016, 10:41:34
zdar hoši..použil jsem tedy tempnam, ale ten nevytvoří file type, tak to dělám takto:

$tempSVG = tempnam("/var/www/modelSVG","model_");
$model = file_put_contents($tempSVG.'.svg', $contentSVG);


soubor se v pořádku vytvoří i s příponou .svg a patřičným obsahem
narážím ale na to, jak vytvořený soubor dostat do path src:
<img id="svg-model" type="image/svg+xml" width="200px" src=" '.$tempSVG.' "/>
toto fungovat nebude, pač tam chybí filetype a proměná $model mi cestu nevrátí...

díky za tip
Název: Re:PHP - k čemu je funkce tempnam
Přispěvatel: ZAJDAN 12. 10. 2016, 11:26:08
SOLVED:
$svgPath = $tempSVG . '.svg';
print_r ($svgPath);