Autor | Zpráva | ||
---|---|---|---|
Darker Profil |
#1 · Zasláno: 2. 9. 2012, 14:28:56
Chtěl bych stvořit třídu s metodou OPEN která vrátí HANDLE, které půjde číst (a půjde do něj psát) funkcemi pro práci se soubory -
fread, fwrite, fclose atd. Našel jsem tohle, to ale vyžaduje funkci PHP wrapperů, potřeboval bych handle vrátit přímo. Tedy: $pokus = new Neco(); $fp = $pokus->open(); echo fread($fp,50); fclose($fp); |
||
ShiraNai7 Profil |
Tak si na to udělej vlastní obdobu wrapperu. Resource bude ta instance obsluhovat interně - tzn. že ji open() nevrátí rovnou ale vrátí objekt (např. třída Handle), který zprostředkuje požadované akce.
|
||
Darker Profil |
#3 · Zasláno: 2. 9. 2012, 14:48:19
A jaké metody by ta třída handle měla mít, aby je fread brala?
|
||
ShiraNai7 Profil |
Žádné. Nepoužíval bys fread, ale metodu read() na instanci třídy handle (pojmenovat ji můžeš jak chceš).
<?php class Neco { public function open($cesta, $mod) { return new Handle(fopen($cesta, $mod)); } } class Handle { protected $res; public function __construct($res) { $this->res = $res; } public function read($len) { return fread($this->res, $len); } } $neco = new Neco; $handle = $neco->open('soubor.txt', 'r'); echo $handle->read(50); |
||
Darker Profil |
#5 · Zasláno: 2. 9. 2012, 14:59:25 · Upravil/a: Darker
ShiraNai7:
„Nepoužíval bys fread“ Na používání fread mi záleželo. Napsání vlastní metody pro čtení jsem se chtěl vyhnout. Pak bych ani nemusel vracet třídu a mohl mít čtení a psaní přímo na objektu. ShiraNai7: Dík za tu ukázku, teď mi dochází, že asi není jasné, o co mi jde. Snažím se v rámci třídy co dělám načíst data na různých místech v souboru/ve více souborech, nějak je rozparsovat a výsledek číst jako soubor. Nevidím jiné řešení než dočasný soubor, vůbec se mi ale nezamlouvá... |
||
Alphard Profil |
#6 · Zasláno: 2. 9. 2012, 20:02:23
[#1] Darker
Ten kód nefunguje? Nevidím v tom problém, metoda open() prostě musí vrátit ukazatel na otevřený soubor a ne true (jak uvádí odkázaná stránka). „a výsledek číst jako soubor“ Tak jeden způsob je již uveden fopen("var://myvar", "r+"); . Další možnost je vytvořit vlastní sestavu metod, jak uvádí [#4], pak by v pozadí vůbec nemusel být soubor...
|
||
Darker Profil |
#7 · Zasláno: 2. 9. 2012, 22:26:17
Jenže já chci pravý opak [#4] - metoda vrátí handle k neexistujícímu souboru. Pokud není možné vytvořit /simulovat/ resource pro funkce pracující se soubory (bez wrapperů) nemá pro mě cenu dělat cokoliv jiného než metody read, write atd. přímo na objektu.
|
||
ShiraNai7 Profil |
Vůbec nechápu o co se snažíš. Proč to musíš za každou cenu řešit přes resource?
Taky existují php://memory a php://temp |
||
Darker Profil |
#9 · Zasláno: 3. 9. 2012, 17:00:53 · Upravil/a: Darker
ShiraNai7:
„Taky existují php://memory a php://temp“ Darker: „Našel jsem tohle, to ale vyžaduje funkci PHP wrapperů“ „(bez wrapperů)“ Tahle funkce je jen zřídkakdy dostupná na hostinzích, takže se mi její použití nehodí. |
||
ShiraNai7 Profil |
#10 · Zasláno: 3. 9. 2012, 17:09:52
Darker:
Zřídkakdy? Jsou dostupné od PHP 5.1.0, které je staré už cca 7 let. Každý hosting, který to myslí alespoň trochu vážně je minimálně na verzi 5.3.x. |
||
Časová prodleva: 12 let
|
0