Új hozzászólás Aktív témák
-
cucka
addikt
válasz drShaman #1745 üzenetére
mysql-ben egy rugalmasabb megoldás a date_format függvény használata. példa:
select date_format(datum_mezo, '%Y-%m-%d') from tablanev
php-ben pedig szintén megoldható, pl. strtotime függvénnyel (meg mással is, sokkal körülményesebben)
$in='2008-07-30 10:50:00';
$out=date('Y-m-d', strtotime($in)); -
cucka
addikt
válasz drShaman #1811 üzenetére
belépés ellenőrzésénél várj egy kis időt (pl. egy másodperc bőven elég), ezzel a brute force törések időszükségletét nagyságrendekkel megnövelted.
a letiltogatós dolgot szerintem nem kell erőltetni, mert nem nagyon tudod mi alapján letiltani a felhasználót. (a cookie-kat törölni nem nagy ügy, ip alapján pedig megint nem szerencsés, előfordul, hogy bizonyos helyekről nagyon sok ember ugyanarról az ip-ről megy ki a netre, pl. kollégiumok). -
cucka
addikt
A legtisztább megoldás a b jelű lenne. Az a jelű az az igazi gányolós tróger megoldás, nem javaslom (főleg nem olyan megoldással, ahogy le lett írva. Van a mysql-ben egy date_sub() függvény, tessék használni ).
A b jelű megoldás bővebben - van egy cron a szerveren, ami meghív egy php file-t. A cron mondjuk naponta fut le, a php file pedig lefuttat egy delete-et az adatbázis megfelelő tábláján. Ingyenes szerveren nem tudom, van-e lehetőség időzített futtatásra, ha nincs, akkor szopóág.
Még egy ötlet esetleg, hogy a tábla insert-jére rákötsz egy triggert, ami törli a régi üzeneteket. Igazából ez sem túl szép dolog. Lásd mysql kézikönyv create trigger utasítás.A legjobb pedig: hacsak nem fenyeget a veszély, hogy többszázezer sor kerül a táblába, akkor hagyd a túróba az egészet. Attól, mert sok üzenet van, nyugodtan listázhatod csak az utolsó 30 napot..
[ Szerkesztve ]
-
cucka
addikt
Az uw.hu például tud időzített php futtatást az ingyenes tárhelyeken is, fizetős tárhelyből pedig még nem találkoztam olyan hulladék hellyel, ahol legalább egy webcron ne lett volna.
(mondjuk ingyen tárhelynél nem nagyon vágom, hogy pontosan mit engednek meg és mit nem időzített futtatás címszó alatt, mert a fizető ügyfeleknek általában tellik legalább egy egyszerű, 20k/éves hosting szolgáltatásra is..) -
cucka
addikt
válasz vancha2 #1867 üzenetére
Az i betű a case insensitive rövidítése, tehát nem veszi figyelembe a kis és nagy betűk közötti különbséget. Ha ezt bekapcsolod, akkor mondjuk az 'ALMAFA' szövegre illeszkedni fog a '/alma/i' minta és a '/ALMA/i' minta is. (meg természetesen mindenféle variáció)
Ami fontos, hogy a /i kapcsoló csak az angol ábécé betűire működik..
[ Szerkesztve ]
-
cucka
addikt
válasz petersonal #1910 üzenetére
Nálam szépen fut Vista alatt az apache/php/mysql. Az egyszerűség kedvéért az Appserv nevű csomagot használom, ami feltelepítve talán a leginkább hasonlít a kézzel feltelepített és beállított php fejlesztői környezethez..
(Ha az appserv mellett döntesz, mindenképp az utolsó előtti php5-öt tartalmazó verziót használd, a legfrissebb php5-ös csomagban valamit nagyon eltoltak a mysql beállításokkal) -
cucka
addikt
válasz vakondka #1914 üzenetére
Cron-ból általában kétfajta van:
A sima unix/linux cron futtatható file-okat eszik. Ha nem saját szervered van, akkor jellemzően ezt nem tudod piszkálni. Php-ból pont úgy lehet futtatható file-t csinálni, mint ahogy bármilyen más scriptből
- az elejére kell egy ilyen sor: #!/usr/bin/php (az útvonal természetesen más is lehet)
- futtatási jogot kell adni a file-ra (például chmod +x <filenév>)
- ezután parancssorból pont úgy futtatható, mint bármely más program illetve megeszi a cron isA második lehetőség a különféle webcron cuccok, ezeknél van egy webes felületed, ahova tetszőleges php file-t megadhatsz, nem kell tökölni a fent leírtakkal. Ha azonban ez így nem megy, esetleg meg lehet próbálni a fentieket végigzongorázni, hátha.. A jogosultságokat ilyenkor állítsd mondjuk 755-re, hogy a cron-t futtató felhasználó számára is olvasható és futtatható legyen a file.
[ Szerkesztve ]
-
cucka
addikt
válasz petersonal #1918 üzenetére
A csel, hogy az Appserv-nek is vannak verziói meg a benne lévő cuccoknak is.
A 2.6.x verzióban 2-es apache, 6-os php és 6-os mysql van, a 2.5.x-ben pedig 2-es apache, 5-ös php és 5-ös mysql.A 6-os php jelenleg béta, a 6-os mysql pedig alfa stádiumban van, ezért javaslom, hogy ezeket ne használd. (hacsak nincs valamilyen nyomós indokod rá..)
Az utolsó appserv változat, ami jól működik, az a 2.5.9-es, ezt használom én is. Nemrég kinn volt a 2.5.10-es is, ezt azóta ha jól látom leszedték, na ez nem működött rendesen. (mysql volt totál elállítva, nem lehetett benne felhasználót létrehozni)A 2.5.9-es appserv-et itt tudod letölteni: [link]
-
cucka
addikt
A programnak kell egy mysql adatbázis szerver.
A database host annak a gépnek a neve vagy ip címe, ahol a mysql adatbázis szerver fut.
A database port az a port, amin keresztül kapcsolódik a progid az adatbázishoz, mysql-nél 3306 az alapértelmezett.
A database name az magának az adatbázisnak a neve, amit használni fog a program. Egy mysql szerveren több adatbázis futhat egyszerre.
Table prefix az az adatbázisban a program által létrehozott táblák prefixe. Tehát ha pl. ennek azt adod, hogy "stats_", akkor minden táblának a neve ezzel fog kezdődni. Ez azért kell, hogy még véletlenül se kavarjon be az adatbázsban található többi táblába.
Database user,password - adatbázishoz kapcsolódásnál meg kell adni egy felhasználónevet és egy jelszót. Célszerű, ha a felhasználónak van is jogosultsága módosítani az adatbázist, ahova csatlakozik.Egyébként annak függvényében, hogy hol van a szervered, a szolgáltatótól/rendszergazdától/hozzáértő havertől is meg tudod kapni ezeket az adatokat, látatlanban pl. elég nehéz kitalálni, hogy milyen nevű adatbázisba kell nálad pakolni a cuccot..
-
cucka
addikt
Sziasztok,
Adott egy ubuntu server-t futtató gép, csomagból felraktam az apache+php környezetet, minden királyul működik egy dolgot leszámítva: symlink-elt könyvtárban található php filet nem tudok include-olni, nem találja meg a php. Ha symlink helyett odamásolom a linkelni kívánt könyvtárat, akkor természetesen működik, de ez nem lenne jó megoldás, kifejezetten linkelni szeretnék. Van valamilyen beállítás, amivel ez megoldható? Kerestem, de nem találtam..
[ Szerkesztve ]
-
cucka
addikt
válasz Tele von Zsinór #1969 üzenetére
Hogyan csinálod a symlinket?
Parancssorbólln --symbolic fizikai_konyvtar link_neve
Ha fopen()-el próbálsz megnyitni egy bene levő filet, az sem működik?
Nem, azt mondja, hogy permission denied. Természetesen a jogosultságokat beállítottam, bármely felhasználó olvashatja/írhatja az összes file-t, sőt, a file-ok tulajdonosát is átállítottam a php-t futtató felhasználóra.. -
cucka
addikt
válasz Tele von Zsinór #1971 üzenetére
Igen, a symlink jogosultságait is beállítottam..
Teljesen tanácstalan vagyok, miért nem működik.. -
-
cucka
addikt
válasz _Petya_ #2003 üzenetére
Izé, php manual ismerős?
string exec ( string $command [, array &$output [, int &$return_var]] )
A $output tömbben kell visszakapd a perl programod kimenetét, soronként, a $return_val pedig a program visszatérési értékét tárolja. Figyeld meg, hogy mindkettő referencia szerint van átadva. Példa:
$out=array();
exec('./azenprogramom.pl', $out);
print_r($out);Elvileg így jó kell legyen, legalábbis ennél jobb ötletem nincs..
[ Szerkesztve ]
-
cucka
addikt
válasz _Petya_ #2009 üzenetére
Próbáltad, hogy elkapod a perl progiban a mailman kimenetét és kiírod?
A system() függvénynél azt mondja a help, hogy This is not what you want to use to capture the output from a command, for that you should use merely backticksItt van valamiféle leírás erről a módszerről, ez alapján elvileg a system hívás helyett valami hasonlót kéne csinálni:
$out=`parancs 2>&1`;
print $out;Mondjuk lehet ez így nem jó, perl-ből nem vagyok valami nagy ász..
[ Szerkesztve ]
-
cucka
addikt
válasz PazsitZ #2015 üzenetére
csak a html nem ételmezi ugye a sortörést.
Ez így nem teljesen igaz. A html a sortörés, tab és szóköz karaktereket is értelmezi, méghozzá úgy, hogy mindegyiket átalakítja 1 darab szóközzé. Tehát 1 darab sortörésből és egy 3 sortörés + 2 tab kombóból is egy darab szóközt fog csinálni. Ez azért van így, hogy lehessen szépen megszerkesztett, olvasható (magyarul indentált ) html kódot írni anélkül, hogy a szerkesztésnél használt tab-ok és újsorok tönkretennék a végeredményt.[ Szerkesztve ]
-
cucka
addikt
-
cucka
addikt
válasz pentium4 #2023 üzenetére
Most mit kell ezen nézni? Bármit írok, azt mondja, nincs ilyen rendelés.
esetleg ha php ra átültetnénk és nem lenne js hanem csak php és html form!
Elég a js is a feladat megoldásához, de a linkelt oldalon az ultraweb szarjait leszámítva 1 betűnyi javascript-et sem látok.. -
cucka
addikt
válasz Fire/SOUL/CD #2030 üzenetére
Nincs semmilyen nagy trükk, flash-ből le tudsz kérni egy url-t, az url mögött meg a te php programjaid vannak. Ezek között lesz olyan, ami berak egy GET/POST paraméterként kapott üzenetet az adatbázisba, lesz olyan, ami a paraméterek alapján visszaadja xml-ben (vagy bármiben) a korábban írt üzeneteket, stb.
mod: látom, időközben kiderült, hogy fölöslegesen írtam, de ezért még nem törlöm ki, hátha segít valakinek..
[ Szerkesztve ]
-
cucka
addikt
Kiegészítve az előző hozzászólásokat:
- .doc file generálást felejtsd el, ha muszáj, akkor monjduk az .rtf formátum megoldható.
- .pdf-et lehet natúrban gyártani fpdf-el, de elég macerás.
- php-val könnyen gyárthatsz html-t, amiből meg mondjuk ezzel gyárthatsz pdf-et. Konkrétan ezt nem próbáltam, de ha nem jön be, vannak alternatívák, a kulcsszó "php html to pdf".Amikor a php kód kiírja a pdf file tartalmát, a következő content-type-ot kell használni:
header("Content-type: application/pdf");
MS Word doksi esetén:
header("Content-type: application/vnd.ms-word");
RTF file esetén pedig:
header("Content-type: application/rtf");
[ Szerkesztve ]
-
cucka
addikt
A regexp a vázolt feladat megoldására nem alkalmas, viszont kb. másfél perc alatt lehet írni valami ilyesmit:
$eredmeny=array();
$inw=0;
$wc=-1;
for ($i=0;$i<strlen($str);$i++){
if ($str[$i]=='"'){
if (!$inw) $eredmeny[++$wc]='';
$inw=($inw+1)%2;
} else if ($inw){
$eredmeny[$wc].=$str[$i];
}
}A $str-ben kapja a bemeneti adatot, az $eredményben vannak a keresett szavak. Javaslom, nézd át a kódot, hogy értsd is, mit csinál, lehet, hogy találsz benne érdekességeket.
mod: természetesen sikerült elrontanom elsőre
[ Szerkesztve ]
-
cucka
addikt
Két tetszőleges karakter közötti szövegnél nem kell sokat módosítani, csak az " karakter ellenőrzését kell cserélni.
Két karakterlánc közötti szövegnél eléggé át kell írni a kódot, hogy a szókezdetet ne akkor érzékelje, amikor a " karaktert látja, hanem amikor az aktuális pozíció előtt a szókezdetet jelző betűkombináció szerepel a szövegben.
Azért javasoltam, hogy értsd is meg a kódot, mert akkor már te is meg tudod csinálni. Egyébként sincs benne semmi bonyolult.. -
cucka
addikt
A dupla ciklus totál fölösleges, egy for ciklus elég. Tudod a kezdő és a végső minta hosszát, így substr() függvénnyel azt is meg tudod mondani, hogy tetszőleges i. pozicióban kezdődik-e a start minta vagy a vége minta.
Az általam írt programhoz hasonlóan:- ha találsz egy start-ot, akkor beállítod a jelző változót, hogy éppen egy keresett szóban vagyunk (ezt én ott $inw-nek hívtam), a ciklusváltozót pedig úgy állítod át, hogy a ciklus következő iterációjában a szó első betűjét dolgozza fel. Tehát ha i. helyen megtalálja az n hosszú mintát, akkor i=i+n-1
- ha találsz egy vége pattern-t, akkor már nem vagyunk keresett szóban, a ciklusváltozót úgy állítod, hogy köv. iterációban a vége pattern utáni első betűt dolgozza fel.
- ha a fentiek nem igazak, akkor a jelző változó függvényében rakod be a kimenetre a karaktert.Tulajdonképpen ugyanaz, mint amit írtam, csak két ellenőrzést kell kicserélni benne (ott ugye csak azt néztem, hogy a " karaktert talált-e a progi.
-
cucka
addikt
válasz drShaman #2088 üzenetére
A probléma megoldódott, viszont most van egy másik gondom.
Ha megoldódott, akkor esetleg leírhatnád azt is, mi volt a megoldás. Ennek a topiknak a fő célja, hogy tanuljunk egymástól, semmiképp nem php instant helpdesk.A <?= $cim?> forma akkor működik, ha a php-ban engedélyezve van a short_tags. Ellenkező esetben használd a <?php echo $cim;?> formát.
A másik: az include-ot úgy kell elképzelni, hogy a preprocesszor az include-olt file teljes tartalmát odamásolja a megfelelő helyre (ahol az include) hívás van. Ez a művelet a konkrét futtatás előtt történik.
Ha a title-ben kiírod a $cim változót, majd később include-olod azt a file-t, ahol beállítod a változót, akkor a változó beállítása azután fog lefutni, hogy már kiírtad a title-be.[ Szerkesztve ]
-
cucka
addikt
válasz drShaman #2090 üzenetére
De, kiküszöbölhető, normális php kóddal, ahol a megjelenítés (html) és az alkalmazáslogika (php) külön van választva, tehát nincs telegányolva php kódrészletekkel a teljes html.
A lényeg: az oldal előállítása azzal kezdődik, hogy lefut az alkalmazáslogika, tehát pl. kitalálod valahogy, hogy éppen most mit kell include-olni. A második részben kiírod a html-t, itt az egyik részen lesz egy kis php, ami konkrétan beinclude-olja azt a részt, amit a kód legelején meghatároztál. Remélem sikerült érthetően leírnom
-
cucka
addikt
válasz drShaman #2092 üzenetére
Nem értem, mi az, ami nem megy? Szerintem elfelejtetted leírni, konkrétan mi a gond
A függvényhez annyit, hogy ha a $str a függvény paramétere, akkor a $str = strtolower($str); sorban célszerű lenne más nevű változót használni. A másik gond, hogy így elvesznek a kis és nagybetűk.
-
cucka
addikt
válasz drShaman #2115 üzenetére
Azt kérdezted, hogy miért nem megy a flash menüd. Semmilyen más infót nem mondtál a problémáról, csak annyit, hogy nem megy, illetve mi a hibajelenség.
Ez alapján nyilván nem fogsz olyan választ kapni, hogy az x. as file y.sorában ez meg az hibás, mert csak annyit lehet tudni, hogy mi az a hiba, amit egy tetszőleges flash menüben ki kell javítani. -
cucka
addikt
A kód tök jó, csak a string összefűzés és a táblázat összeállításának logikája szar benne
Az elgondolás az lenne, hogy megyünk végig a képeken, ha a $i osztható 3-al, akkor új sort nyit a táblázatban, ha $i%3==2, akkor pedig lezárja az aktuális sort. Miután kiírtad a képeket, arra is oda kell figyelni, hogy mi van akkor, ha a képek száma nem osztható 3-al, ilyenkor a maradék helyekre üres táblázat cellákat ír ki.
Javaslom, kopipészt helyett próbáld megérteni, mit csinál a kód, illetve kérdezz, ha valami nem világos..<table>
<?php
$db=24;
for ($i=0;$i<$db;$i++)
{
if ($i%3==0) print '<tr>';
print "<td><a href=\"kep.php?kep=\"".($i+1)."\"><img src=\"mini-ubuntu".($i+1).".jpg\" /></a>";
if ($i%3==2) print "</tr>\r\n";
}
if ($i%3!=0){
for (;$i%3!=0;$i++){
print '<td> </td>';
}
print "</tr>\r\n";
}
?>
</table>[ Szerkesztve ]
-
cucka
addikt
válasz Fire/SOUL/CD #2183 üzenetére
Vannak, olyan progik, amik képesek honlapok teljes tartalmát lementeni.
Ezek azt tudják lementeni, amit a böngészőben is látsz. Normálisan karbantartott webszerverről a php kódot igazából sehogy nem tudod lementeni kívülről.Gyakorlatban ez ellen, milyen módszerekkel lehet védekezni, mi a bevett szokás?
(Tehát, hogy egy PHP kód ne tartalmazhasson közvetlen jelszót, vagy egyéb nem publikus adatokat, stb)
Ha nagyon paranoid van, akkor ezeket az adatokat berakhatod egy file-ba, ami a webszerver mappáján kívül található, de a php be tudja olvasni. -
cucka
addikt
válasz Fire/SOUL/CD #2186 üzenetére
Szoftverfejlesztői szemmel biztonsági szempontból nem túl bonyolult a helyzet. Egyetlen fő alapelv van: minden, kívülről érkező adatot (pl. amit beír a júzer egy form-ba) megbízhatatlanként kell kezelni.
A különböző technikákat (felhasználó azonosítás, session-ök és cookie-k működése, használata) pedig bármilyen php programozással foglalkozó könyvben találsz, ha érted, hogy működnek ezek a fogalmak, akkor józan ésszel is be lehet látni, hogyan lehet biztonsági lyukak nélküli rendszert írni.
A fentieket leszámítva tényleg nincsenek nagy trükkök fejlesztésnél, józan ésszel kell mindent megírni. Például ha vagy egy script-ed, ami kapott paraméterek alapján letöröl valahonnan valami filet, akkor azt úgy kell megírni, hogy semmilyen módon ne lehessen kárt okozni úgy, hogy valaki valamilyen paraméterekkel kívülről meghívja azt a script-et. Minden az adott feladattól függ, szóval ennél specifikusabb tanácsot nem nagyon tudok adni.Rendszergazdai oldalról majd írjon más, ahhoz kevésbé értek.
mod: egyébként pl. itt egy lista [link], 1-6ig az összes tipp arról szól, hogy nem bízunk meg a kívülről érkező adatokban. A legjellemzőbb támadás, az sql injection is ezt a hibát használja ki, történetesen azt, hogy az sql lekérdezésebe ellenőrzés nélkül berakod a kívülről jövő adatokat..
[ Szerkesztve ]
-
cucka
addikt
válasz Tele von Zsinór #2192 üzenetére
Hűű ezt eddig nem ismertem, nagyon király.
Új hozzászólás Aktív témák
- Autós topik látogatók beszélgetős, offolós topikja
- Szevam: Érzelmi magabiztosság/biztonság - miért megyünk sokan külföldre valójában?
- Itt az első kép a 2024-es Nokia 3210-ről
- Politika
- Milyen TV-t vegyek?
- Kerékpárosok, bringások ide!
- Kormányok / autós szimulátorok topicja
- Milyen okostelefont vegyek?
- Szeged és környéke adok-veszek-beszélgetek
- Napelem
- További aktív témák...