- iPhone topik
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Egy szenzor, két zoomkamera: újraírta a Huawei a mobilfotózás történetét
- Google Pixel topik
- Milyen okostelefont vegyek?
- Honor Magic6 Pro - kör közepén számok
- One mobilszolgáltatások
- Olcsó Galaxyk telepíthetik a One UI 7-et
- Milyen GPS-t vegyek?
- Samsung Galaxy A56 - megbízható középszerűség
Új hozzászólás Aktív témák
-
cucka
addikt
válasz
papa019 #10297 üzenetére
Lehet, sőt, általában ilyen megoldást szoktak használni a korábbi hozzászólásomban leírt problémák miatt. Csak ugye egy ilyen .gif funkcionálisan ekvivalens azzal, ha kiírta volna, hogy "kérjük várjon", az eredeti kérdésben meg valamiféle valós adatokból dolgozó progress bar szerepelt.
(#10299) Athlon64+
Ez jó találat, viszont kizárólag file feltöltésre működik. -
Sk8erPeter
nagyúr
válasz
papa019 #10297 üzenetére
Dehogynem, teljesen jó az elképzelésed. Alapvetően ez az általános (jó) megoldás, meg esetleg egy felirat, hogy az adatfeldolgozás folyamatban van, várjon a júzer.
===
(#10293) Soak : nem tudom, ez a qTip2 hogy van megoldva, még nem használtam, de jQuery UI Dialognál nem okoz semmilyen gondot, ha a jQuery UI Dialognak átadott DOM-elem display:none-ra van állítva. Megoldja magának az átalakítást dialógusformára (nyilván a qTip is, csak az nem tudom, hogy), és a display tulajdonság váltogatását is kezeli, alapvetően pont inline-elemeket tudsz megjeleníteni a dialógusablakban, ettől is kényelmes az egész.
-
papa019
senior tag
Olyat esetleg nem lehet csinálni, hogy betesz egy ehhez hasonló elemet addig, amíg a művelet fut a szerveren és amikor a szerver végzett, akkor küld vissza egy jelzést, és akkor megy tovább minden?
(elég kezdő vagyok még az ilyen dolgokban, remélem nem mondtam hülyeséget)
(#10298) Sk8erPeter:
-
cucka
addikt
válasz
WolfLenny #10295 üzenetére
Elvileg úgy lehet megcsinálni, hogy a webodalad ajax-al adott időközönként megkérdezi a szervert, hogy hol tart az adatfeldolgozással, majd a kapott eredményt kiírja (egy progressbar formájában).
Ezzel (meg az ötleteddel) két baj van:
- komoly terhelést rak a szerverre
- a szerveroldalon belül mi alapján fogod eldönteni az egyik thread-ből, hogy a másik thread hol tart a munkával? Még egy thread-en belül sem egyértelmű kérdés ez.Nem véletlen, hogy ilyen progressbar megoldást nem fogsz találni sehol sem a weben - jól nem nagyon tudod megcsinálni, de egy rossz megoldás is bonyolult és hatalmas az overhead-je.
Esetleg java applet-el vagy valamilyen flash objektummal is kivitelezhető lenne, ott legalább megoldható, hogy a szerver szóljon a kliensnek, ha változott valami, ezzel megspórolhatod az ajax hívások overhead-jét, de a fő probléma továbbra is adott.
-
WolfLenny
senior tag
Üdv!
Nekem egy egyszerű progressbar kellene. Ami nem file feltöltést mutat, hanem adat feldolgozást. PHP+MySQL feldolgozást csinálunk és amikor a program az adatbázissal dolgozik, akkor szükség lenne egy visszajelzésre, hogy megy a művelet és nem áll....
Ötlet?
Előre is köszi
WL
-
biker
nagyúr
válasz
trisztan94 #10288 üzenetére
ez kell a htaccessbe ha hozzáférési hibákat dobál és nem ment el semmit
SetEnvIfNoCase Content-Type "^multipart/form-data;" "MODSEC_NOPOSTBUFFERING=Do not buffer file uploads"
-
Soak
veterán
válasz
papa019 #10291 üzenetére
Az első linken ha rá mész, hogy view source akkor az jelenleg a kód.
Sk8erPeter : A kérdés az lett volna, hogy miért nem működik, tehát a form a php-vel miért nem kommunikál, de aztán leszedtem a második linket - szerkesztés - , megnéztem annak a kódját és láttam, hogy nem olyan egyszerű ez mint ahogy én elképzeltem
. Végre átlátom a php-t akkor épp jöhet a jQuery és kezdhetek mindent előről
, amúgy nagyon tetszik, első ránézésre elég logikus.
Szerk: Amúgy az első linked király, még a legelején megtaláltam mikor neki álltam a honlapnak , csak akkor még nem igazán értettem, hogy mi olyan nagy cucc pár ablakban
-
Soak
veterán
Nem tudom, hogy php baj-e, de itt teszem fel a kérdést. Frissen szerzett jQuery henkölési tudásommal (
) . Beraktam ezt : [link] az oldalamra (nem így néz ki, de lényegtelen) . Azt szeretném elérni vele, hogy a bejelentkezési ablak szerepét vegye át bizonyos esetekben, magyarul, hogy a form ebben jelenjen meg. Tehát a sign_in.php linkjét az index.php-n kiváltja egy Sign In gomb . Berakom a php kódot ami lekezeli a formot a sign_in.php-ről .
Így néz ki valahogy:
<?php
require_once("../_includes/initialize.php");
if($session->is_logged_in()){
redirect_to("logged_in/feed.php");
}
if (isset($_POST['submit'])) { // Form has been submitted.
$e_mail = trim($_POST['e_mail']);
$password = trim($_POST['password']);
$found_user = User::authenticate($e_mail, $password);
if ($found_user) {
$session->login($found_user);
log_action('Login', "{$found_user->username} logged in.");
redirect_to("logged_in/feed.php");
} else {
$message = "Email/password combination incorrect.";
}
} else {
$e_mail = "";
$password = "";
}
?>Ez tökéletesen működik a sing_in.php-n . Viszont ha beteszem a felugró ablakba a html formot ami így néz ki :
<form action="sign_in.php" method="post">
<input name="e_mail" id="email" type="email" class="roundDiv" accesskey="2" tabindex="10" value="<?php echo htmlentities($e_mail); ?>">
<input name="password" type="password" id="password" class="roundDiv" tabindex="20" value="<?php echo htmlentities($password); ?>">
<<input name="submit" type="submit" accesskey="4" tabindex="40" value="Login">
</form>Csak a lényeg, hogy jól látható legyen. Ilyenkor úgy tűnik mintha a kommunikáció a form-al egy irányú lenne, méghozzá azért, mert ha a fenti php kódban az utolsó esetben (mikor még nem történt semmi, ezért a változóknak nincsenek értékei, hogy ne dobjon hibát) mondjuk az e_mail értéke test, akkor megjelenik a formon belül az email mezőben a test és az lesz a default érték nem pedig a semmi. Viszont kifelé már nem küldi ki az értékeket hiába kattintok a submitre.
A hiba nem áll fent, ha ezt kiveszem a forráskódból : <div style="display: none;">
, tehát alapból látható a div.Szerk : Valószínűleg ezzel menni fog : [link] , de attól még érdekel a megoldás tanulási célból.
-
Soak
veterán
válasz
trisztan94 #10286 üzenetére
Nagy vonalakban :
1. lépés HTML formot meg kéne csinálni hozzá
2. lépés, a formot php-vel lekezelni (ez közel sem egy lépés, de php része ez)
3. lépés a file-t php-vel kezelni, menteniItt nincs progress bar, de talán az a legkevesebb. Hol akadtál el? Szerintem ez már van annyira bonyolult, hogy sokra nem mész kész kóddal mert csak a "szent lélek" tartja egyben ha nem látod át.
-
biker
nagyúr
válasz
trisztan94 #10286 üzenetére
uploadify pl? mi a baj az ajaxosokkal?
-
trisztan94
őstag
Sziasztok!
Egész nap ma ezzel szarakodtam.. De komolyan. Egy nagyon egyszerű képfeltöltőt szeretnék progressbarral. Ajax uploadert nem tudom configolni, a többi meg egyszerűen nem működik, amit találtam. Nem tudtok egy egyszerű módszert erre? Leginkább PHP alapú legyen, flash nélkül, de ha flashes az se gáz. Ha lehet, akkor egy konkrét, működő kódot kérnék. Nagyon megköszönném!
T
-
PazsitZ
addikt
válasz
Sk8erPeter #10270 üzenetére
Ha létezik a kép, miért hozod létre újra (ezzel növelve a szerver terhelést)?
header('Content-Type: image/jpeg');
readfile("test.png");(#10275) Soak tudjam, hogy a képet hányszor töltötték be
Akkor viszont mégiscsak a php-n keresztüli kép megjelenítés az optimálisabb szvsz.
Bár igazából az a kérdés számt-e, ha külön megnyitja a képet. -
válasz
Sk8erPeter #10268 üzenetére
Lehet hogy uncsi de legalább színt visz bele!
-
Heló! Egy kis segítség kéne. Segítek háziban. Van egy olyan mysql tábla, ami egy másik tábla rekordjára mutat. Azt hogy tudom legegyszerűbben kinyerni?
Példa:
Színkód tábla:
id color_id
1 234
2 654Színek tábla:
id color
234 blue
654 blackmobal,
-
Soak
veterán
Ezzel a kóddal oldottam meg a foreach között :
$id = $photo->id;
mysql_query("UPDATE photographs SET views = views+1 WHERE id=".$id." ");Mondjuk ez egyelőre minden frissítésnél növel egyet, szóval vissza lehet vele élni, mármint e-péniszt növelésre, de ezt majd később oldom meg
-
Soak
veterán
válasz
Sk8erPeter #10272 üzenetére
De igen. Tehát a lényeg, hogy tudjam, hogy a képet hányszor töltötték be. Több félet méret rendelkezésre áll, de a "legkisebb is számít"
. Jelenleg így jelennek meg a képek :
<?php foreach($photos as $photo): ?>
<div class="profile_pics" ><img src="../
<?php echo $photo->profile_image_path(); ?>
" alt="" name="start_pic" id="start_pic"> ">
<?php endforeach; ?>Cathfaern : A thumbnail még nem, egy helyen, viszont a másik helyen ahol még mindig thumbnail, de már eggyel nagyobb ott már igen .
-
Cathfaern
nagyúr
Mi számít kép megnézésének? Ha már a thumbnailt látja, vagy ha konkrétan rákattint egy képre?
Bár a lényegen sokat nem változtat: felteszem magát a képet php-ból iratod ki. Elég ha a kiiratásra írsz egy functiont, ami a kiírás mellett incrementálja az adott képhez tartozó számlálót is. Legalábbis szerintem nem nagyon van értelme ennél jobban túlbonyolítani -
Soak
veterán
válasz
Sk8erPeter #10270 üzenetére
Nem erre gondoltam, legalábbis azt hiszem . Nem is értem pontosan mit csinál az imagepng() vagy a imagecreatefrompng(); . Eddig ugy jelenítettem meg userek által feltöltött képeket, hogy egyszerüen az albumukban megjelent a kép, mivel automatikusan generálta a php a könyvtáruk elérési utvonalát. Ez rossz megoldás? .
-
Sk8erPeter
nagyúr
Gondolom ezekre a függvényekre gondolsz: imagepng és társai, mutat is példát, hogyan tudsz PHP segítségével képeket kiíratni a böngészőbe:
<?php
$im = imagecreatefrompng("test.png");
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);Esetleg megoldás lehet, hogy mindenféle kép megjelenítését átirányítod .htaccess-szel egy PHP-fájlba, amiben elvégzed a nézettség naplózását, megnézed, milyen kiterjesztésű a kép, és aszerint használod a headert, majd használsz imagepng-t, imagejpeg-et vagy a többit.
-
Soak
veterán
Sziasztok !
A kép nézettség adatbázisba való rögzítését probálom megoldani. Azt könnyedén meg tudom oldani, hogy az oldal betöltés számát berakjam, de mivel egy kép több aloldalon is elérhető, ezért ez ehhez nem jó megoldás. Létrehoztam a képeknek egy views oszlopot mysql-ben, de kb ennyit sikerült haladni az ügyben
. Utána olvastam és írták, hogy header()-t kell alkalmazni, de még sosem találkoztam vele, nem is értem mire jó pontosan. Ti hogy szoktátok megoldani?
-
Sk8erPeter
nagyúr
Most tényleg ezen témázunk?
Nagyon kevesek vagytok Ti ahhoz, hogy magamra vegyem.
Amúgy pont az volt a mondandó lényege, hogy ezek a megjegyzések túl gyerekesek és gyengék ahhoz, hogy üljön a poén.
Na meg ez egy szakmai topic, minden hsz. végén ezeket olvasni kicsit uncsi.
-
válasz
Sk8erPeter #10265 üzenetére
Nem sért de magadra veszed
-
Sk8erPeter
nagyúr
-
Siriusb
veterán
válasz
Sk8erPeter #10263 üzenetére
Jól van na, nekem ilyenre nem volt időm.
Jó kutyus, szeret a gazdi.
-
Sk8erPeter
nagyúr
válasz
Siriusb #10262 üzenetére
"3. Drupla-féle poormanscron jellegű megoldás, de ezt inkább nem fejtem ki.
"
De itt úgyis leírják.
Amúgy ötletes megoldás.
Na jó, mégis leírom, nagyjából ennyivel összefoglalható: ha nincs crontab-beállítási lehetőséged, akkor jön jól ez a megoldás: elhelyez egy JavaScript-kódot az oldalon, ami AJAX-szal a betöltés után kérést intéz a szerver felé, és ha már szükséges, elvégzi az ütemezett feladatokat. Ehhez persze az kell, hogy látogassák is az oldaladat.
-
Siriusb
veterán
válasz
trisztan94 #10261 üzenetére
1. Ha a szolgáltatód biztosítja neked a cron-t, abból tudod indítani a megfelelő php fájlt.
2. Egy külső helyről - ahol ingyenesen tudsz regisztrálni és van cron - oldod meg az előbbit, lásd phplist-féle megoldás.
3. Drupla-féle poormanscron jellegű megoldás, de ezt inkább nem fejtem ki. -
trisztan94
őstag
Lenne még egy utolsó (igérem) kérdésem:
Egy olyan rendszer kéne, ami kredit ill idő alapú (idő = kredit/10). Na most azt hogy csinálom meg, hogy minden nap éjfélkor lemenjen 10-el a felhasználó kredite? Mysql adatbázisban van tárolva a kredit.
Köszönöm és bocsi a sok n00b kérdésért
-
válasz
trisztan94 #10258 üzenetére
Ne írásra nyisd meg első körben a fájlt, hanem hozzáfűzésre. [link]
-
trisztan94
őstag
Másik kérdés:
Szeretnék egy történet feltöltő rendszert. A tortenet.php ajaxxal nyílik meg a blog.php-n, egy <section>-ben, tehát csak...
<article>
<header></header>
<p></p>
<footer></footer>
</article>... tageket tartalmaz. Na most, van a upload_story.php filem, abban van egy text input, a címnek és egy textarea a törzsnek. Ezt szeretném beszúrni a korábbi tagek mögé, tehát a cím a header-ben legyen, a törzs pedig a p-ben, úgy hogy azok ne tűnjenek el.
itt a php kódom erre:
<?php
$cim = $_POST['cim'];
$torzs = $_POST['torzs'];
$szoveg =$cim . '\n' . $torzs;
$file = "tortenetek.php";
$fh = fopen($file, 'w') or die("Sajnos nem lehetett menteni a Történeted, kérjük jelezd az ügyfélszolgálaton!");
fwrite($fh, $szoveg);
fclose($fh);
?>
Tehát a baj az, hogy felülírja a tartalmat, ill ötletem sincs, hogy hogy kéne a változók szövegét a tagekbe rakni.Köszönöm szépen előre is!
-
trisztan94
őstag
válasz
Tele von Zsinór #10256 üzenetére
Szerintem akkor a másodikat választanám, az biztos, hogy jó. Kb hogy nézne ki a kód?
-
Tele von Zsinór
őstag
válasz
trisztan94 #10255 üzenetére
Konkrétum nélkül a válasz egy határozott talán.
Van erre több megoldás is, ami kettő hirtelen eszembe jutott:
- ha tud az oldal pingelni, mikor új kép kerül fel, akkor kérsz egyet a feldolgozó scriptedre. Mikor kérést kap, áthúzza az új képet, feldolgozza
- ha nem tud, akkor egy ütemezetten futó script minden n percben megvizsgálja, van-e új kép. Ha igen, áthúzza és feldolgozza.
-
trisztan94
őstag
Sziasztok!
Olyat szeretnék csinálni, hogy más oldalakról bekéne indexelni képeket, tehát ha raknak fel új képeket raknak fel, az aut. megjelenik az enyémen is. Ilyet lehet valahogy?
-
Sk8erPeter
nagyúr
Nem értem, miért ragaszkodsz ehhez a
function isUrl($val){ return $val != ''; }
függvényhez...Nem kicsit megtévesztő a függvény neve, mert az ember azt gondolná, itt valós ellenőrzés történik arra, hogy URL-ről van-e szó, miközben csak azt ellenőrzöd, empty stringről van-e szó... akkor már inkább legyen isEmptyString a függvény neve, vagy készítsd el rendesen a függvényt.
Most csak azért köcsögösködöm, mert épp tanítasz valakit a helyes kódolásra, akkor mutass neki jó példát, meg tőled nem ilyen béna függvényeket vár az ember. -
RootRulez
félisten
válasz
Peter Kiss #10251 üzenetére
De ha most ezen működik, akkor később is működni fog, más szerveren/php futtató környezetben lenne szempont, igaz?
-
RootRulez
félisten
Android program honosításnál találkoztam már ezzel a \n-el.
a "\n" és a "\r\n" helyett érdemesebb a php beépített PHP_EOL konstansát használni, ez a php-t futtató rendszernek megfelelő sorvége jelet tartalmazza.
Ez azt jelentené, hogy a
file_put_contents("linkek.txt", implode("\n", $linkek));
írjam át arra, hogy
file_put_contents("linkek.txt", implode(PHP_EOL, $linkek));
??
-
cucka
addikt
válasz
RootRulez #10247 üzenetére
notepaddal nincsenek új sorban (minden link egy sorban van). Notepad++-al viszont sorok vannak
Az utolsó sorban az implode-nál a "\n" okozza a furcsaságot. A unix-szerű rendszereken ezzel a speciális karakterrel jelölik a sor végét, windows-on viszont "\r\n"-el (mac-en pedig "\r"-el). A problémád tehát lényegében annyit jelent, hogy a windows notepad-ja nem elég intelligens ahhoz, hogy észrevegye, a file-od unix-féle sorvégeket használ. A php és a notepad++ gond nélkül kezeli mindkét sorvége jelet.mod: a "\n" és a "\r\n" helyett érdemesebb a php beépített PHP_EOL konstansát használni, ez a php-t futtató rendszernek megfelelő sorvége jelet tartalmazza.
-
RootRulez
félisten
No, ez működik (miután kitöröltem a D:\-t), de notepaddal nincsenek új sorban (minden link egy sorban van).
Notepad++-al viszont sorok vannak... Bár a sorok nem hatnak meg, csak addig kell, amíg feltöltöm a txt-t, a későbbiekben nem kavarhat be a PHP fájlnak az, hogy nincsenek sorokban a linkek?
-
cucka
addikt
válasz
RootRulez #10245 üzenetére
Lefuttattam és rájöttem, hogy elcsesztem a kódot két helyen: a file beolvasásnál a sorok tartalmába beolvasom az újsor karaktereket is, illetve az unset-et rosszul hívom. Javítva:
function isUrl($val){ return $val != ''; }
$linkek = array_filter(file("d:\linkek.txt", FILE_IGNORE_NEW_LINES), 'isUrl');
$tkey = mt_rand(0, count($linkek)-1);
$link = $linkek[$tkey];
unset($linkek[$tkey]);
if (count($linkek)==0){
$linkek[0] = 'előre megadott szöveg';
}
file_put_contents("linkek.txt", implode("\n", $linkek)); -
cucka
addikt
válasz
PazsitZ #10242 üzenetére
Egy ötlet volt, hogy most GET-ből van a jóistentől jön a link szabadon eldönthető.
Pont ezért jegyeztem meg halkan, hogy semmi szükség rá egy példakódbanAzt feltételezem írni a másik esetben is kell, önmagától ritkán mászik be és ki az adat a fájlból.
Úgy értem, az eredeti problémafelvetésben ott volt, hogy soronként 1 link van a file-ban, lásd #10115(#10243) RootRulez
A sor végén elfelejtettem lezárni az egyik zárójelet, az a baj. (Fejből írtam a kódot, bocsánat) -
cucka
addikt
válasz
RootRulez #10239 üzenetére
Ez a kód lényegében totál hülyeség, mint ha olyan ember írta volna, aki most tanulta pascal-ban a filekezelést. Érdemes lenne megértened, hogy mit csinál a kód, mert abból nem fog semmi jól kisülni, ha kriptikus kódsorokat másolgatsz abban a reményben, hogy hátha működni fog.
A kérdésedre a válasz a korábbi kódot felhasználva:
function isUrl($val){ return $val != ''; }
//a file sorait beolvasom a $linkek tömbbe
$linkek = array_filter(file("linkek.txt"), 'isUrl');
//véletlenszerű kulcs kiválasztása a linkek tömbből
$tkey = mt_rand(0, count($linkek)-1);
//kiválasztok 1 elemet a tömbből a $link változóba
$link = $linkek[$tkey];
//törlöm a tömbből a kiválasztott elemet
unset($linkek, $tkey);
//ha elfogytak a file sorai, akkor felviszem az új elemet a $linkek tömbbe
if (count($linkek)==0){
$linkek[0] = 'előre megadott szöveg';
}
//a $linkek tömb tartalmát kiírom a fileba
file_put_contents("linkek.txt", implode("\n", $linkek);Ahogy látod, a kód elején beolvasom a file tartalmát a végén meg kiírom, az összes művelet a $linkek tömbben történik. A kód nem kezeli le azt az esetet, ha az elején üres a file, továbbá egy idő után, ha elfogynak a linkek, mindig ugyanazt a szöveget fogja beírni a fileba majd kiolvasni, szóval gondold át, hogy tényleg ezt akarod-e? A kód futása után a $link változóban éred el a kiválasztott sor tartalmát, pl. beleírhatod egy html <a> tag-be.
(#10240) PazsitZ
Az alap problémában nem szerializált formában van a fileban az adat, továbbá kérdéses, hogy mennyire segíti a megoldás megértését a kódod nagy részét kitevő zaj (kiírások, $_GET feldolgozás, stb) -
PazsitZ
addikt
válasz
RootRulez #10239 üzenetére
Ilyen esetben én akkor már tömböt használnék:
$filename = dirname(__FILE__) . '/links.txt';
if (isset($_GET['add']) && !empty($_GET['link'])) {
if (file_exists($filename)) {
$links = unserialize(file_get_contents($filename));
} else {
$links = array();
}
echo 'put: ' . $_GET['link'];
$links[] = $_GET['link'];
file_put_contents($filename, serialize($links));
} else if (isset($_GET['get'])) {
$links = unserialize(file_get_contents($filename));
if (count($links)>0) {
$key = array_rand($links);
$link = $links[$key];
unset($links[$key]);
echo "<a href=\"{$link}\">{$link}</a>";
file_put_contents($filename, serialize($links));
} else {
echo 'nincs link';
}
}
Hozzáadhatsz: link.php?add&link=http://prohardver.hu
Kiolvasás és törlés: link.php?get -
RootRulez
félisten
Találtam egy ilyet, hogy
$kihagyando_sor = $link; // itt lesz a kihagyandó sor a korábbi véletlen szám
$megnyitando = fopen("linkek.txt", "w"); // megnyitó, írhatóan a fájlt
if ($megnyitando == NULL || $megnyitando == NULL)
print('Hiba történt a fájlok megnyitása közben.');
else
{ $sor = 0;
while (($karakter = fgetc($megnyitando)) !== false)
{ if ($karakter == "\n")
$sor = $sor + 1;
if ($sor != $kihagyando_sor)
fwrite($megnyitando, $karakter);
}
}
fflush($megnyitando);
fclose($megnyitando);Most épp minden sort kitöröl.
-
cucka
addikt
válasz
fordfairlane #10237 üzenetére
Szerintem nem anti-pattern, pusztán csak nagyon kevés olyan helyzet van, amikor valóban szükség van rá. Ehhez képest az összes design pattern-ekkel foglalkozó írás az első helyen említi, ezt a legkönnyebb megérteni, plusz ugye az elméleti előnyei elsőre nagyon meggyőzőek. (Csak mint sok esetben, ezek az előnyök a gyakorlatban nem észrevehetők)
-
cucka
addikt
válasz
fordfairlane #10212 üzenetére
Az, amit írsz a singleton-ról, az alapvetően jó, viszont pusztán elméleti. Igen, elméletileg a singleton valóban egy hasznos pattern. A php fejlesztés rögvalóságában viszont:
- Tudod mi van, ha két adatbázis kapcsolat objektumot hozol létre? Semmi sincs. Egy élő rendszeren rengeteg adatbázis kapcsolat létezik egy időben. Tehát itt egy olyan veszélytől (több példány létrehozása) véd meg a singleton minta alkalmazása, amely veszély nem is létezik.
- Egy tipikus php alkalmazásban a keretrendszer hozza létre az adatbázis objektumot, nem maga az alkalmazás. Nem áll fenn a veszély, hogy az alkalmazás véletlenül több példányt hoz létre belőle, mert egy példányt sem fog létrehozni.
- Az adatbázis wrapper osztályt tipikusan valamilyen globális változón keresztül éred el. A többszörös példányosítás itt is értelmét veszti.Egy cseppet sem akarok a design pattern-ek ellen beszélni, de szerintem egy tipikus php-s környezetben a singleton elméleti előnyei elméletiek maradnak. 5 évig voltam php fejlesztő, egyetlen egy alkalomra sem emlékszem, amikor olyan problémába ütköztem volna, amit a singleton pattern megold.
(#10235) RootRulez
Hol akadtál el? -
RootRulez
félisten
Sziasztok!
Pár napja kértem tanácsot arra, hogy egy olyan php kéne, ami egy txt-ből választ egy sort és az abban szereplő linket betölti. Kaptam is rá választ:
"function isUrl($val){ return $val != ''; }
$linkek=array_filter(file("linkek.txt"), 'isUrl');
$link=$linkek[mt_rand(0, count($linkek)-1)];"Ezt a dolgot annyival szeretném továbbvinni, hogy jó lenne, ha a kiválasztott sort törölné a php a TXT-ből. Ha pedig az utolsó sort is törölte, akkor behelyez a helyére egy másik (előre megadott) linket.
Köszi: RR
-
Sk8erPeter
nagyúr
válasz
PazsitZ #10233 üzenetére
Bocs, nem figyeltem oda rendesen, f@szságot írtam, igazad van!
Nem teszteltem, csak ránézésre mondtam, mert a \w szóra illeszkedik, és nem figyeltem oda, hogy ott van a "^" karakter, és szögletes zárójelek közé van téve, magyarul csak azt szeded ki, ami nem szó. Sorry. -
PazsitZ
addikt
válasz
Sk8erPeter #10232 üzenetére
Azért kipróbáltam, hátha mégis én írtam elsőre fejből hülyeséget, de úgy tűnik nem.
Nálam kiszed mindent, ami nem betű, szám vagy alulvonás.
Bár, ha csak másmilyen karakterből áll a fájlnév, akkor tényleg üres lesz. -
Sk8erPeter
nagyúr
-
vakondka
őstag
válasz
Sk8erPeter #10229 üzenetére
SEO szempontból fontos a beszédes fájlnév, de az alt és title még fontosabb, sőt a href tagban a title szintén fontos, persze a keresőbarát link még mindig kiemelt jelentőségű.
-
Sk8erPeter
nagyúr
Te tettél fel kérdést felhasználó által megadott fájlnevekről, és én erre reagáltam... Arra mondtam, hogy whitelisteket érdemes alkalmazni.
Egyébként szerintem értelmesebb egy beszédes képnév, mint egy névben lévő id, ami totál semmitmondó, ha ránéz az ember. Azt nem tudom, SEO-szempontból mennyit nyom a latba, de elvileg ennek is lehet szerepe, hogy maga a fájlnév is legyen beszédes. Ettől még olyan id-t generálsz bele PLUSZBAN, amilyet akarsz.
A képeket normális esetben így is-úgy is id szerint tárolod az adatbázisban, amihez - mint említettem - tárolod az egyéb adatait is, ezek közül a fájlnév is csak egy a sok közül, vagyis nem a kép egyértelmű azonosítására szolgál, az "csak" egy fizikai elérhetőség, de jó esetben úgy tárolod, hogy tök mindegy, mikor, mire változtatod a fájlnevet, attól még beazonosítható marad a kép.=======
(#10228) ArchElf : OK.
Én egyébként olykor ciklusoknál is az $i és $j és $k és egyebek helyett beszédesebb indexneveket használok, de persze csak akkor, ha ennek a kódban van az olvashatóságot javító szerepe (sokszor van).
A lokális változónevek tekintetében én egyelőre a kódjaimban az underscore-t használom túlsúlyban, mostanában vettem fel a camelCase-zel kódolás szokását PHP-nél is. -
ArchElf
addikt
válasz
Sk8erPeter #10226 üzenetére
Igen. Indexekre nem nevesítetteket (ix, iz, iy), a maradékra camelCase.
AE
-
Soak
veterán
válasz
Sk8erPeter #10224 üzenetére
Elolvastam, de az id-s tárolás sokkal egyszerűbb és jelentősége sincsen különösebben, hogy mi lesz a neve, de ha lesz akkor majd alkalmazom. A leirást külön tárolom, adatbázisban, a htmlentities()-t használom már belépéskor és regisztrációkor (oda jó?) , de akkor berakom a leíráshoz is.
-
ArchElf
addikt
válasz
Sk8erPeter #10219 üzenetére
Igen, alapvetően csak a privát változókra használom.
AE
-
Sk8erPeter
nagyúr
Itt már leírtam a fájlnevekre vonatkozó dolgot, arra semmit nem reagáltál. (whitelist)
A leírás mezőt meg általában a képtől/bármi egyéb fájltól külön szokták kezelni, nem is minden képformátum támogatja a leírás "beleégetését" (vagy nem tudom, erre gondoltál-e), adatbázisban a file-hoz tartozó id-val rendeled össze a kiegészítő mezőket (maga a fájlnév, leírás, szerző, stb.).
A leírásban lévő karaktereket meg a szokásos módon szűröd (pl. legegyszerűbb példaként htmlentities()-t is használva, stb.), adatbázisban tárolod, és nem fájlban. -
Soak
veterán
válasz
Tele von Zsinór #10222 üzenetére
Igen, köszi, én is erre gondoltam, hogy egyszerűen id-t megkapja minden kép amit amúgyis automatikusan, tehát egyedülálló, mondjuk a feltöltésnél meg tud adni egy le írást is a user ami mindenki számára látható. Itt pedig nyilván nem scripteket, de egy-két különleges karaktert nem árt ha tud írni az ember .
-
Tele von Zsinór
őstag
Felettem kolléga már írt egyet, de hozzáteszem a magamét: sok formátumban (kiragadott példa: jpeg) van megjegyzés mező, ahová azt írsz, amit akarsz. Akár php kódot is. És akkor képzeld el, ha ezt .php kiterjesztéssel mented a feltöltött fileok (általában nyilvánosan elérhető) mappájába.
Én valami autogenerált értéket szoktam névként használni (például a hozzá kapcsolódó tábla primary key-ét).
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #10220 üzenetére
Ja, ez tény.
Amúgy elfelejtettem hozzátenni, hogy természetesen az osztálynevek esetében én is a PascalCase-t használom. -
Tele von Zsinór
őstag
válasz
Sk8erPeter #10219 üzenetére
A csoport fő célja a keretrendszerek közti együttműködés, az pedig a mai, modern rendszerek esetében OOP kódot jelent, innen az ezirányú fókusz.
Igen, a StudlyCaps ugyanaz, mint a PascalCase (avagy: camelCase kezdő nagybetűvel).
Egyébként én sem olvastam még végig a végleges psr2-őt, csak levlistán követtem, hogy mi történik. A psr1 rövidke, az megvolt
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #10214 üzenetére
OK, tehát hogy a lényeget kiemeljük, ha már linkelted (bár ehhez bele is kellett olvasni a linkelt cuccokba, és ez melós volt
):
Symfony2:
"Naming Conventions¶
» Use camelCase, not underscores, for variable, function and method names, arguments;
» Use underscores for option, parameter names;
» Use namespaces for all classes;
» Suffix interfaces with Interface;
» Use alphanumeric characters and underscores for file names;
» Don't forget to look at the more verbose Conventions document for more subjective naming considerations."A PSR-1-ből:
"[...]
» Namespaces and classes MUST follow PSR-0.
» Class names MUST be declared in StudlyCaps.
» Class constants MUST be declared in all upper case with underscore separators.
» Method names MUST be declared in camelCase.
"Tulajdonképpen utóbbi nagyjából csak OOP-kódolásról beszél. Ezt a StudlyCaps-et még most hallom először, gondolom ez a PascalCase-zel ekvivalens, nem? (legalábbis az írási módjából következtetve)
Előbbi viszont egyértelműen camelCase-t ajánl függvényekre és metódusokra egyaránt, ezeknél az underscore-t kerüli.Az itt leírtak nagyjából egyeznek az én szokásaimmal, azzal az egy nagy eltéréssel, hogy a procedurális kódolásnál, globális függvényeknél én még többnyire underscore-t használok. Igaz, néha keveredést okoz az agyamban, főleg amikor mondjuk C#-kódról térek át PHP-ra, akkor először nagyon katyvasz van a fejemben, hogy na most akkor hogyan is deklaráljam a függvénynevet, mert a PascalCase használata viszont PHP-ben nem szokásom.
Amúgy köszi a tapasztalat-megosztást.
==========
(#10202) j0k3r! :
neked is kösz!
"- osztalynevek, nevterek: nagybetuvel kezdodik es camelCase (ClassTwo)"
>>> Tehát akkor gondolom a PascalCase-re gondolsz."az alahuzasos dolgot kerulom (kiveve konstansok), igy legalabb ha ranezek a kodra, akkor egybol latom, hogy az valoszinuleg valami beepitett php-s dolog lesz"
Hmm, végül is ez is egy elfogadható szempont.
Engem alapvetően a Drupal szoktatott rá arra, hogy a procedurális kódolásnál következetesen az aláhúzásokat használjam a szavak elválasztására függvényneveknél (persze a következetes szó akkor igaz, amikor épp nem vagyok kicsit megzavarodva más nyelv használata miatt).==========
(#10203) ArchElf :
OK, köszi, ezek szerint alapvetően kerülöd az underscore használatát. -
Siriusb
veterán
válasz
Sk8erPeter #10215 üzenetére
Szerintem a Smelly Skunk már közelít.
Bocs, ezt kár lett volna kihagyni. Ez a meleg előhozza az emberből a hülyeséget, nem mintha mélyre lenne temetve...
-
Sk8erPeter
nagyúr
válasz
fordfairlane #10212 üzenetére
#9911 környékén én is érveltem a Singleton mellett, igazából csak annyit, hogy azért annyira nem ördögtől való szerintem a használata, de olvass csak vissza, a véremet akarták.
========
(#10207) Soak :
fájlnevekre is alapvetően a whitelisteket érdemes alkalmazni: tehát azt mondod meg, milyen karaktereket engedsz, nem azt, hogy mit nem szabad használni, minden neked nem tetsző karaktert egyszerűen kivágsz a fájlnévből, vagy behelyettesíted egy általános helyettesítő karakterrel, ami neked tetszik, lehet ez egy aláhúzás (_), kötőjel, vagy egyéb, olyan karakter, ami nem okozhat problémát egyik platformon sem (pl. ne akarj egy » jelet tenni a fájlnévbe).
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #10200 üzenetére
Létezik egy, a kódok együttműködésének elősegítését célzó csoport, a php-fig (Framework Interoperability Group, mostanság gondolkodnak jobb néven). Ismerősek lehetnek a PSR-0 "szabvány" miatt, ami szépen elterjedt.
A közelmúltban fogadták el a PSR-1 és PSR2 javaslatokat, azaz:
- PSR-1 Basic Coding Standard
- PSR-2 Coding Style GuideA hozzászólásodban felvetett kérdésre: korábban a Symfony2 coding standardját használtam, ami kevés pontban tér el a fentebb linkeltektől, úgyhogy majd ezekre térek át.
-
fordfairlane
veterán
Ha a user bármilyen nevet adhat a feltöltendő filenak akkor az lehet potenciális biztonsági rés?
Lehet, mivel a filekezelő függvények nem szimpla fájlnévként értelmezik a fájlnév paramétert, így pl. komplett elérési utat is lehet megadni. A fájlnévben vezérlőkarakterek is lehetnek, amik szegmentálják a nevet. Ilyen pl. a \ vagy unixon a /.
-
fordfairlane
veterán
Bocs, de nem értem. Nem arról van szó, hogy a keretrendszer valamit megcsinál helyettem, mert mi van akkor, ha nem csinálja meg, másrészt a futási idő szintén érthetetlen érvelés. Egyébként is a keretrendszer használhat singletont, én nem?
Van egy erőforrás, amiből egy van. Fájlrendszer, adatbázis kapcsolat, socket egy kiszolgáló felé, whatever. Ezt a valamit be akarod burkolni egy osztállyal. A Singleton egy "creational pattern", ami az egyszeri példányosítási funkciót belezárja az objektumba, tehát az alkalmazásnak nem kell ügyelnie, hogy ne hozzon létre fölöslegesen új példányt, ha futás során több heylen is hozzá akar férni ehhez az objektumhoz. Egy singleton objektum ugyanolyan kutyaközönséges objektumnak néz ki a guest kód számára, mint a példányosított. Miért baj ez?
-
Soak
veterán
válasz
ArchElf #10205 üzenetére
Vagy, a v kicsivel van, lehet azért nem jó
... bocs...
Más: Lehet, hogy hülyeséget kérdezek, de itt felvetődött az SQL injection, pár hsz-el ezelött. És épp a kép feltöltés résszel szarakodok. Ha a user bármilyen nevet adhat a feltöltendő filenak akkor az lehet potenciális biztonsági rés?
-
cucka
addikt
válasz
fordfairlane #10187 üzenetére
A singleton elsősorban olyan szoftvereknél használatos minta, amelyek sokáig futnak és van egy olyan komponensük, amely valamilyen külső erőforrást használ.
PHP-nál a szkripted minden egyes oldalletöltődésnél lefut, az objektum élettartama nagyon rövid, ráadásul az adatbázis objektumot jellemzően a keretrendszer hozza létre, egy példányban. Egyszerűen nincs előny abból, ha a singleton mintát használod.(#10204) Soak
Ez tetszett -
ArchElf
addikt
válasz
Sk8erPeter #10201 üzenetére
Előző hszedre...
Én általában:
- privát tagok _-al kezdődnek
- property-k, class-ok PascalCase
- függvények camelCase
- konstansok UPPERCASEAE
-
j0k3r!
őstag
válasz
Sk8erPeter #10200 üzenetére
<sajatvelemeny>
en amit szoktam hasznalni:
- protected, private adattagok es metodusok neve _-al kezdodik ($_someImportantData, _justAnotherMethod())
- public adattagok es metodusok siman camelCase
- interfacek neve mindig I-vel kezdodik (ITestInterface)
- osztalynevek, nevterek: nagybetuvel kezdodik es camelCase (ClassTwo)
- konstansok: csupa nagybetu (ha hosszu a neve, akkor alahuzassal tagolom)az alahuzasos dolgot kerulom (kiveve konstansok), igy legalabb ha ranezek a kodra, akkor egybol latom, hogy az valoszinuleg valami beepitett php-s dolog lesz
</sajatvelemeny>ha kihagytam valamit, majd kerdezel
Új hozzászólás Aktív témák
Hirdetés
- Legion 5 15ACH6 15.6" FHD IPS Ryzen 5 5600H RTX 3050Ti 16GB 500GB NVMe magyar vbill gar
- Dji Osmo Pocket 3
- HP Elitebook 745 G3 érintőképernyős laptop (14FHD/I5-G6/8GB/256SSD)
- RTX 4090 / RTX 3090 videokartya hütő ventivel olcson! Dobozzal!
- Thinkpad T14s Gen4 14" FHD+ IPS i5-1345U 16GB 512GB NVMe ujjlolv gar
- Telefon felvásárlás!! Samsung Galaxy S23/Samsung Galaxy S23+/Samsung Galaxy S23 Ultra
- AKCIÓ! GIGABYTE GA-Z170X-UD3 Z170 chipset alaplap garanciával hibátlan működéssel
- AKCIÓ! HP Elitedesk 800 G1 USDT mini asztali számítógép - i7 4770S 16GB RAM 128GB SSD Intel HD
- Beszámítás! Apple Mac mini 2023 M2 Pro 16GB 512GB SSD számítógép garanciával, hibátlan működéssel
- Új Apple iPhone 16e 128GB, Kártyafüggetlen, 3 Év Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest