sima file append de a meglévő fájl elejére!
Sziasztok!
Hogy lehet azt megoldani hogy php file append-nél ne a txt végére fűzze az új szöveget, hanem az elejéhez csapja hozzá?
Először csináljak másolatot róla aztán írjam felül az egyiket az új adattal és vágjam egybe őket?
Ez elég barbár megoldás lenne sztem.
Valami ötlet?
Előre is kösz!
■ Hogy lehet azt megoldani hogy php file append-nél ne a txt végére fűzze az új szöveget, hanem az elejéhez csapja hozzá?
Először csináljak másolatot róla aztán írjam felül az egyiket az új adattal és vágjam egybe őket?
Ez elég barbár megoldás lenne sztem.
Valami ötlet?
Előre is kösz!
Seek
+1 krédés
Akkor másfelől közelítem meg a dolgot: hogy lehet mondjuk egy fájlból a sorok olvasását a végétől kezdeni?
Szóval visszafelé.
Mert nem szeretném beolvastatni (több 100kbyteos fájlok) legelejétől, ha csak a végére vagyok kiváncsi :)
Végéről?
De ez valeszeg hülyeség, ha így akarod megoldani, vagy baromira el van cseszve az adatstruktúra amit kitaláltál vagy valami eleve elcseszett helyzetbe csöppentél bele, amire viszont az első hozzászólásom a megoldás.
megvan!
amúgy egy "saját csetet" próbálok összehozni ajaxal és php-jal.
ezt a php-t hivogatom 2-3 másodpercenként ami megvizsgálja hogy kell e hozáfűzni az ablakban lévő szöveghez vagy sem.
eleve így "terveztem", csak hogy nekelljen összes sort beolvasni ezért gondoltam ilyen megoldásra, mert azért ha haverok feljönnek, 2másodpercenként kérnek a szervertől, jobb ha minimálisat számol.
$file_name="logs/" . date('Y-m-d') . ".sc6";
$file = array_reverse( file( $file_name ) );
$limit = 30;
for ($i = 0; $i < $limit; $i++ )
{
if (strlen($file[$i])!=0)
{
echo $file[$i] . "<br>\n";
}
else
{
break;
}
}
Uh
Szerintem, sürgősen próbálj meg valami adatbázis hátteret varázsolni a dolognak, különben adott esetben szét fog esni az egész. Arról nem is beszélve, hogy nem igazán gazdaságos, ha minden alkalommal megfordítod az egész fájlt. Ez az inkább pazarló megoldás.
Ja, és remélem a mások által beküldött tartalmakat szűröd mindenféle injection szempontból, mert az is baj lehet.
array + serialize
Igen az flock elég problémás szokott lenni, a végén úgyis írni kell egy daemon-t...
üdv. krey
ps. közben rájöttem, hogy gázos a serialize dolog, mert meg akarja spórolni az írás-olvasásokat...
Serialize
jogos
Amúgy itt SQL-ről szó nincs, de ha lenne, akkor is védve van minden az injectionök ellen ;)
üdv. krey
JavaScript
és ha direkt azt akarok?
Mert...
nyilvánvaló?
a te scripted valószínűleg nem fogja tudni eldönteni, hogy mi vág a témába és mi nem, úgyhogy kénytelen leszel mindent eltárolni, amit kapsz. ilyen alapon a "</div></body></html>" sztring is nyilvánvalóan ártó szándékú, mert elronthatja a designt, persze csak ha html-ről van szó. úgyhogy akkor vegyük sorra mi lehet még ártó szándékú az rss-emre, a csv fájljaimra, az adatbázisomra, stb. persze most már nem csak a chat-ről van szó, de szerintem rossz a logikád. olyan, mintha letiltanám a ', " és ; jelek használatát, mert bezavarhat az adabázisban tárolásnál.
Nem erről van szó!
korábban még visszadobtad volna
Chat
Más elképzelés
Amúgy a kód csak demonstráció...
Megjegyzem a kérdező kódja nem is lenne rossz, ha nem a teljes logon fordítana egyet, hanem csak az új üzeneteken.
Nem értem miért ilyen fontos a sebesség, mellesleg. Ha tényleg max. sebességet akarsz, akkor írj egy daemont. Elvileg phpban is lehet futtasd a szerveren és ha frissül valami akkor dobja vissza az összes kliensnek az új üziket (mondjuk 1mp-s minimum intervallal). Ezt flashben olyan jól meg lehet csinálni, nemtom ajaxban hogy kell, de érdekelne :) És ha már megy a daemon, akkor beleépítheted az adatbázis kezelést is!
üdv. krey
:)
Nekem csak egy volt a lényeg, hogy az új üzenetek egyből előre kerüljenek ÉS előről olvasom be a sorokat VAGY a végére kerülnek az új üzenetek ÉS a végétől visszafelé olvasom be a sorokat.
Az utóbbit találtam célszerű(bb)nek.
Bocsi ha kontárkodok össze meg vissza, de én spec így tudok megtanulni valamit ha kipróbálom, nemrég kezdett el érdekelni a php meg ezek a webes dolgok.
Perpill csak a legutolsó sort frissíti le, de ez már csak phptól függ hogy meddig olvas vissza, majd azis meglesz idővel.
3 másodpercenként nézi meg hogy van e friss sor a fájlban, és ha van akkor hozzáteszi a meglévőkhöz.
pl.: http://sc6.somnusoft.com
Várom a hozzászólásokat ill. kritikákat!
UI: amit említettél daemont, azt hogy lehetne megvalósítani? (utánnaolvasok ígérem)
Daemon
Ami a daemont illeti, két fajta megoldás létezik: Mindkettő lényege az, hogy nem maga a PHP program intézi a chat kezelést, hanem egy harmadik valami, ami állandóan fut a háttérben.
1. Rendszerdaemon
Használhatsz pl IRC szervert vagy írhatsz egy sajátot. A probléma az, hogy ehhez rendszergazdai hozzáférés kell a szerverhet szal valszeg kilőve.
2. Adatbázis
Tulajdonképpen ez is egy daemon, csak a legtöbb helyen föl van telepítve. Az előnye az, hogy tudsz sorokat lekérni belőle és nem kell vacakolnod a fájlkezeléssel, mert ezt az adatbázis elintézi neked. Ajánlom figyelmedbe a MySQL dokumentációt.
Röviden így nézhet ki az adatbázis tábla:
nagyon szépen köszönöm!
kösz szépen mégegyszer!
amúgy te voltál fent és kérdeztél rá a Cross Site Scripting-re?
elvileg minden < > stb... jelet átalakítok html kódra
na majd re, nagymamát viszem ügyeletre!
mégegyszer köszi szépen!
Menni fog
Nagyinak meg jobbulást.
kezdek újat mert ott már nagyon tömör volt a sor
(bocs a kontárkodás miatt)
és ez az egy visszatérési értékből kellene a phpba viszatöltenem az utolsó sort (akkor van gáz ha egyszerre több sort kapott) :S
mit szóltok hozzá?
amúgy én mindeképpen fájl alapút akarok, nem akarok sql ben tárolni az üziket se semmit, max a jelszavakat (talán)
hogy ne tudja mindeki használni, szépen teszek majd az egész subra egy htaccess fájlt ami jelszóval nézhető csak meg.
üdv: Somnus
Inkább
flock?
Üdv,
Felhő
Flock
A session kezelés megint más, mert ott egy klienst szolgálsz ki egy sessionből. Egyébként ha megnézed a leírásokat, ott is van konkurens hozzáférési probléma csak a gyakorlatban ritkán jön elő, mert két oldalletöltés egy felhasználótól ritkán történik egy időben. Ergo ott sincs lekezelve.
strace
strace php -r "session_start();"
. Ebben ezt találod:flock(3, LOCK_EX)
Üdv,
Felhő
flock
AJAX: ott a pont. De azért nagyságrendileg több lekérés érkezik még így is egy többek által közösen használt erőforráshoz, mint egy egyetlen ember által használt session-höz. Ergo, valószínűbb, hogy megúszod versenyhelyzet nélkül. Arról nem is beszélve, hogy ha okos a JS lib, akkor tudja queue-ba tenni a szerverhívásokat és akkor nincs gond.
session_start: nem tudtam ellenőrizni, mert valamiért nem akar rajta fogni a grep, de biztos így van. De mint az előbb említettük, a flock nem (feltétlenül) thread safe.
Összegezve: szőrszálhasogatás helyett inkább azt mondanám, mivel az adatbázis thread safe és már megírtam az előbb elég sok mindent hozzá, inkább használja azt a t. kérdező.
re: flock
strace -o filename
működik.Üdv,
Felhő
Sqlite?