- A lapkakészlet és az akku különbözteti meg a Motorola Edge 60 és Edge 60 Pro-t
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Android szakmai topik
- Samsung Galaxy A52s 5G - jó S-tehetség
- Samsung Galaxy A56 - megbízható középszerűség
- Honor Magic V2 - origami
- Magisk
- Na! Ez egy JÓ utólagos autós fejegység - Minix CP89-HD
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Samsung Galaxy Watch7 - kötelező kör
Új hozzászólás Aktív témák
-
ArchElf
addikt
válasz
Speeedfire #7266 üzenetére
Nnem kötekedésből, de nálam fut a py a routeren.
AE
-
Alex91
félisten
válasz
Speeedfire #7253 üzenetére
QuiXplorer, bar tomoritest nem tud...
eXtplorer, ez elvileg tomorit is. (Bar azt hiszem ezt nekem nem sikerult portolnom.) -
cucka
addikt
válasz
Speeedfire #7260 üzenetére
cucka: Ezen nem tudom mit kell magyarázni. A python megeszi a vasat alólam. A php és a lighttpd meg még nem.
Csak szólok, hogy a python egyik nagy előnye pont a sebessége, a php-nál pl. lényegesen gyorsabb. -
válasz
Speeedfire #7262 üzenetére
akkor legközelebb majd tudosítsd
-
válasz
Speeedfire #7260 üzenetére
Routeren futtatod?
-
cucka
addikt
válasz
Speeedfire #7255 üzenetére
mindent tud csak kell a python hozzá, ami meg megeszi a gépet
Ööö ezt magyarázd már el, hogyan is eszi meg a python a gépet? (És ezzel párhuzamosan a php hogyhogy nem eszi meg?) -
válasz
Speeedfire #7257 üzenetére
hát akkor kapcsold be. mellesleg ennél jobbat nem fogsz találni.
-
válasz
Speeedfire #7255 üzenetére
[link] ?
-
ArchElf
addikt
válasz
Speeedfire #7253 üzenetére
Milyet?
AE
-
rt06
veterán
válasz
Speeedfire #7250 üzenetére
viszont a tied nem kezeli peldaul a http://hosszu.osszetett.url.teszt.valami.hu/ domain-t
szerk.: alternativ port miert nem kell? nem ritka, hogy a https-hez odatuzik a 443-as portot az url vegere, az ilyeneket kapasbol kiuti a te ellenorzod
-
rt06
veterán
válasz
Speeedfire #7248 üzenetére
ha jol latom, akkor a tiedhez kepest:
- kezeli a http authentikaciot
- kezeli az url-ben megadott portokat
- kezeli az ekezetes domain neveket
- kezel tetszoleges tld-tpeldaul
https://user:password@ez.egy.kinai.domain.xn--fsqu00a.xn--g6w251d:8080/index.html?x=y#z
vagy
http://בײַשפּיל.טעסט/ (egy egy yiddish domain) -
ArchElf
addikt
válasz
Speeedfire #7246 üzenetére
http(s)?://(([^/@:]*:)?([^/@:]+)(@))?([^/@.:]*\.)*([^/@.:]*)(:(\d{1,5}))?(/.*)?
hmm?
AE
-
Speeedfire
félisten
válasz
Speeedfire #7245 üzenetére
Talán ez már minden igényt kielégít.
http(s)?:\/\/(\w|[0-9-])+(\.(\w|[0-9-])+)?(\.[a-z]{2,4}){1,2}
-
L3zl13
nagyúr
válasz
Speeedfire #7237 üzenetére
A 2-4 karakteres TLD már nem érvényes egy ideje. Gondolom ez az esetek 99.999...%-ában nem okoz gondot (nem hiszem, hogy valaha is jártam volna .travel, .museum vagy hasonló url-en), csak ha esetleg tökéletességre törekednél.
Az ékezetes doménekről meg a nem latin betűs doménekről ne is beszéljünk, mert úgy meg már tényleg kezelhetetlenné válik.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #7241 üzenetére
Áhá, világos. De akkor most már magyarul minden úgy megy, ahogy szeretted volna eredetileg?
Amúgy tapasztalat alapján a Microsoft-programok a telepítéskor és máskor is csak pont olyanra kérdeznek vissza, amire nem kéne.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #7239 üzenetére
Mármint most milyen javítás?
Az msiexec /i ...msi ?
-
Sk8erPeter
nagyúr
válasz
Speeedfire #7236 üzenetére
Win+R, eventvwr ?
Win 7-nél legalábbis általában már részletesebb a hibajelzés, mint pl. XP-nél.Ezt a linket a Web Deployment Agent Service-ről már láttad? >> [link].
Lehet, hogy egyszerű reinstall a megoldás, nem vágom. -
Speeedfire
félisten
válasz
Speeedfire #7236 üzenetére
Béjna voltam.
/^http(s)?:\/\/[a-z0-9-]+(\.[a-z0-9-]+)?(\.[a-z]{2,4})$/
-
válasz
Speeedfire #7233 üzenetére
ok, csak a skype alapból ráül a 80 as portra.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #7233 üzenetére
A deploy-oló szarságnak a portját nem tudod bekonfigolni? Eléggé csodálkoznék rajta.
Egyébként addig is kerülő megoldásnak az is jó lehet szerintem, hogy az IIS ugyanúgy 80-as porton fut, mint defaultból, addig meg leállítod az Apache-ot. Általában úgyis az Apache-ot használod, ahogy értelmezem, és csak néha használnád az IIS-t, próbából. Akkor meg a service-re beállítod, hogy csak manuálisan induljon el.
De meg lehet oldani úgy is, hogy ne vesszenek össze.Vagy harmadik megoldás, hogy IIS alá teszed a PHP-t is.
Még 2009-ben ezt írták itt:
"An upcoming projects involves Microsoft engineers working with PHP engineers to get the next version of PHP (PHP5.3 which is not yet available at this time) to perform much better in IIS. This will no doubt make some progress toward WIMP catching up with LAMP in performance.""és 2-4 karakter között az url, több nem lehet."
Gondolom itt nem URL-t akartál írni, hanem TLD-t...URL-validálásra csak egy gyors példa (Google):
[link]
function isValidURL($url){
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}Vagy ez: [link].
Nem teszteltem mondjuk agyon, de itt egyből ki lehet próbálni a működését a reguláris kifejezésnek: [link].
De a legegyszerűbb, php.net-ről: [link]
$uri = 'http://example.com';
$isValid = filter_var($uri, FILTER_VALIDATE_URL); -
válasz
Speeedfire #7229 üzenetére
Skype?
-
Sk8erPeter
nagyúr
válasz
Speeedfire #7229 üzenetére
Itt azt írja valaki, idézem: "Check if you have "SQL Server Reporting Services" running, it uses port 80. If you stop it (from the Reporting Services Configuration Manager) you'll be able to run apache."
Egyébként most azt szeretnéd, hogy az Apache a 80-ason, az IIS a 81-esen, igaz? Milyen SQL szervered van fent?Egyébként Windows-on cmd-ből netstat -a -val is tudsz listázni (melyik portok foglaltak).
-
Speeedfire
félisten
válasz
Speeedfire #7229 üzenetére
Félig jó megoldás. [link]
A 80-as port szabad lesz, viszont így a web deploy agent nem megy. : -
PazsitZ
addikt
válasz
Speeedfire #7225 üzenetére
-
rt06
veterán
válasz
Speeedfire #7225 üzenetére
ne konkretan php-s peldakat keress, jo neked minden, ami pcre (perl compatible regular expression), ugy tobbet talalsz
-
PazsitZ
addikt
válasz
Speeedfire #7223 üzenetére
A reguláris kifejezésekről könyveket lehet és írtak is, szóval érthető, ha nem túl részletes a php.net-en
-
Peter Kiss
őstag
válasz
Speeedfire #7221 üzenetére
Van.
/^(ez)|(vagyemez)$/ui
Itt az egész inputra nézi, hogy egyenlő-e valamivel. Mindebből a ()-ek és a | jel használata a lényeg.
-
wolandino
tag
válasz
Speeedfire #7214 üzenetére
Hasonló, netes nyelvleckékhez kellene
-
atom44
csendes tag
válasz
Speeedfire #7185 üzenetére
Köszi szépen
közben én is rá jöttem csak vissza kellett nyulni az öskorba
DOS
Köszi a helpet -
atom44
csendes tag
válasz
Speeedfire #7182 üzenetére
Hali ,bocsi de eszembe jutott még1 dolog. :S Egy ilyen esetben amikor be van szurva egy kép pl: <IMG SRC="F:\cuccok\cipök trainer\KANGOL canvas/124.jpg">
ott is meg lehet oldani hogy dinamikusan kezelje a kép helyét? Ha mondjuk az egész mappa át kerül a C:/dokumentumok/asztal bla bla bla helyre akkor már a képek nem jelenek meg mert a pendrive eltávolitásával nem fogják látni a a képek heylét ami az F: meghajton van. Erre is lenne megoldás? köszi a választ elöre is -
atom44
csendes tag
válasz
Speeedfire #7182 üzenetére
Uh basszus ,egy nagyon nagy köszönet érte
Köszi szépen !
-
rt06
veterán
válasz
Speeedfire #7154 üzenetére
DirectoryIndex, amit egy szokozzel elvalasztott felsorolas kovet
-
Peter Kiss
őstag
válasz
Speeedfire #7115 üzenetére
$filename = $source;
return $filename;Helyett:
return $source;
-
Peter Kiss
őstag
válasz
Speeedfire #7113 üzenetére
Igen, mert úgy értelmeztem, hogy a kiterjesztés nem számít bele a maximális hosszba.
-
Peter Kiss
őstag
válasz
Speeedfire #7111 üzenetére
function levag($source, $maxLength = 20) {
$ext = "";
if (($extPos = mb_strrpos($source, '.')) !== false) {
$ext = mb_substr($source, $extPos);
$filename = mb_substr($source, 0, $extPos);
} else {
$filename = $source;
}
$filenameLength = mb_strlen($filename);
if ($filenameLength <= $maxLength) {
return $source;
}
return mb_substr($filename, 0, $maxLength) . "..." . $ext;
}Teszt:
echo levag("qwertzuiopasdfghjklyxcvbnm.bubu", 10);Eredmény:
qwertzuiop....bubu -
DeltaPower
addikt
válasz
Speeedfire #7106 üzenetére
igen, mivel az első változatban a 7. sorban még
$lekerdez = mysql_query($lekerdez);
szerepelt, ami resource és a 9. sorban induló while ciklus használta
while($row = mysql_fetch_assoc($lekerdez)) {
viszont a 61. sorban a cikluson belül(!) felüldefiniáltad, amit csak különleges esetekben szoktunk csinálni -
DeltaPower
addikt
válasz
Speeedfire #7097 üzenetére
61-es sorban felüldefiniálod a $lekerdez-t.
-
Peter Kiss
őstag
válasz
Speeedfire #7102 üzenetére
Át kell szokni!
Ráadásul jobb lenne OO módon használni.
-
Siriusb
veterán
válasz
Speeedfire #7090 üzenetére
Csak egy kérdés, miért mysql és nem mysqli?
Nem ez utóbbi az ajánlottabb? -
Brown ügynök
senior tag
válasz
Speeedfire #7095 üzenetére
var_dump()-t akartam én is javasolni. print_r()-rel nem látod a típusát.
-
Coyot
őstag
válasz
Speeedfire #7095 üzenetére
tuti hogy a ciklusban felülvágod az értékét... mivel 1 hírt kitett a másodikat már nem tudja.
-
Peter Kiss
őstag
válasz
Speeedfire #7093 üzenetére
var_dump()-pal lesd meg a típusát, szerintem nem mysql_resource lesz (vagy minek is kellene lennie), hanem string (tömb).
-
Peter Kiss
őstag
válasz
Speeedfire #7090 üzenetére
$lekerdez = mysql_query($lekerdez);
Ha itt egy tök új változóba rakod be az eredményt, akkor mi történik?
-
Coyot
őstag
válasz
Speeedfire #7090 üzenetére
nem vágtad felül a $lekerdez változó értékét?
mod.: sorry elírtam a változónevet
-
Tele von Zsinór
őstag
válasz
Speeedfire #7083 üzenetére
Adatbázisban tábla.
-
Peter Kiss
őstag
válasz
Speeedfire #7081 üzenetére
Buffertábla arra is kell, hogy ne legyen nagy gáz abból, ha megszakadna a művelet, lehessen folytatni.
-
Peter Kiss
őstag
válasz
Speeedfire #7079 üzenetére
Az általam elmesélt rendszerben mentve vannak a levelek. A buffertábla azért kellett nekem, hogy 1 levelet 1 ember nehogy 2-szer kapjon meg, mivel az emberek különböző csoportokba iratkoznak fel, levelet küldeni pedig csoportoknak lehet.
-
Siriusb
veterán
válasz
Speeedfire #7076 üzenetére
Nekem a phpList bevált.
(#7075) kukinyo
Ha a böngészőben a forrást megnézed (akár firebuggal), milyen class van az aktív menünél? -
Peter Kiss
őstag
válasz
Speeedfire #7076 üzenetére
Kiküldéshez készítesz egy buffertáblát. Mikor megvan írva a levél, rányomnak a kiküldésre, akkor ebbe belekerül minden szükséges adat (e-mail cím és a hírlevél ID-je mindenképp), majd elkezdi a rendszer kiküldeni. Lehet cron-nal, de én pl. AJAX-ot használtam automata újrahívással. Rányomnak a küldésre --> táblát felépíteni --> kiszedi pl. az első 50-et (törli is a táblából) --> elküldi --> visszahív a szerveroldalra az újabb 50-es adatért. A kérések között eltelik mindig egy kis idő. Ha ezt a módszert választod, akkor a buffertáblába be kell rakni, hogy ki intézi az aktuális kiküldést, így el lehet kerülni azt, hogy ha egyszerre 2 küldés van folyamatban, hogy összeakadjanak.
-
modder
aktív tag
válasz
Speeedfire #6942 üzenetére
Helló,
Nem mindegy, hogy milyen fordítású apache van fönt. Amennyit én tudok, a prefork verzió childprocesseket hoz létre, amíg a worker verzió szálakat.
Olvasd el ezt: http://httpd.apache.org/docs/2.0/mpm.html
Ha prefork verzió van fönt, a MaxSpareThreads nem játszik.Itt van a prefork által elfogadott paraméterek: http://httpd.apache.org/docs/2.0/mod/prefork.html
Nem tudom milyen megfontolásból tetted a routerre, ha otthon baszkódsz vele és kíváncsiságból, akkor nem gond, de azért vállalati környezetben ne csinálj ilyet
Még eljátszogathatsz az apache process nice érékével is, hogy ha hálózati forgalom szempontjából a router keményen igénybe van véve, az oldallekérdezések ne fogják vissza, de az is lehet, hogy erre nincsen szükség.
Nem vagyok egy nagy apache guru, de megpróbálkozhatsz olyannal is, hogy ne töltsön be modulokat, amik nem kellenek, pl. ssl.
-
Alukard
senior tag
válasz
Speeedfire #6846 üzenetére
Amióta elkezdtem php-vel játszani, azóta több kisebb-nagyobb projektel foglalkozom/foglalkoztam. Most momentán 6 VH-van beállítva, ebből 4 egy projihoz tartozik.
Azért van szükség a 4 VH-ra mert több domainen fut majd a proji különböző könyvtárakból és az egyes elemeket -mondjuk a frontendet és a backendet- szeretném annyira elválasztani egymástól amennyire csak lehet.
De tovább megyek, fősulin azzal úsztam meg a vizsgát, hogy megmutattam a tanárnak, hogy VirtualBox kliensként futó linux szerverről hogy lehet elérni a Windowsos VirtualBox host-on a linuxos apache VH-kat.
-
fordfairlane
veterán
válasz
Speeedfire #6846 üzenetére
Még nálam lokálban is virtualhostok vannak az Apacheban.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6844 üzenetére
Ez mondjuk nem igaz, mert VirtualHosttal Apache-ban oda irányítod a webszerver könyvtárát, ahova csak akarod. Pl. lehet, hogy az egyik projekted a http://localhost:4133123 címen elérhető, és a könyvtára - Windows alatt - a D:\ezazegyikprojekt\nos\ helyen található a vinyón, a másik meg http://blabla.local.akarmi.ize címen érhető el, és a könyvtára az F:\tokmindegy\blabla\ helyen van.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6822 üzenetére
Próbáld meg a parancsikonban a working directoryt átírni, régebben ez segített, most meg nem tudom tesztelni.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6815 üzenetére
Mire gondolsz? 7.0-át használok, a projekt mappa pedig egy nbprojekt n. mappa az adott meló helyén.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6563 üzenetére
Abban az esetben nem is kell, ha
1.) a formok feldolgozását ugyanott végzed, ahol maga a form kiíratása van (tehát nem külön fájlban, így a POST adatokat egyből közvetlenül fel is tudod használni a formmezők kitöltésére - de ez szerintem gány megoldás),
2.) ha átmeneti adatbázis-bejegyzést hozol létre a felhasználó által megadott adatokkal, amit csak akkor hagysz meg, ha a felhasználó véglegesíti az adatokat (korlátozott lehet az adatbázisban elérhető kapcsolatok száma)
3.) vagy akkor, ha egyszerűen nem foglalkozol vele, hogy a felhasználónak ki kell-e töltenie újból az űrlap egyes mezőit, vagy sem
4.) ha bejelentkeztető űrlapról van szó, ahol pl. csak felhasználónév-jelszó párost kell kitölteni, itt nyilván az esetek többségében nem kell megjegyeztetni semmit
5.) biztos van olyan eset, ami most nem jut eszembe.DE érdemes bevetni a session képességeit ilyen esetekre is, igazából mi másra lenne használható, mint adatok átmeneti tárolására, akár egy egész session erejéig, vagy csak rövidebb időtartamra.
Nyilván formadatokat is csak addig tároljunk session-változókban, amíg nagyon szükséges. -
Sk8erPeter
nagyúr
válasz
Speeedfire #6559 üzenetére
"Nem szokták"
Kik nem szokták?
Nyilván van, aki átmeneti adatbázis-bejegyzést hoz létre ilyenkor, de én nem pazarlom ilyenekre az adatbázis korlátozott erőforrásait, épp ezért is használom legtöbbször a sessiont ilyen célra (is). Persze csak addig tárolom, ameddig nagyon szükséges - leginkább hiba esetén. A form adatait mindig külön feldolgozó fájlban dolgozom fel, és amennyiben ezt nem AJAX-szal oldom meg (azért úgy a szép, de működjön annál is, akinél ki van kapcsolva a JavaScript), akkor ha nincs hiba, eltárolom az adatokat adatbázisban, ha mégis hiba történt, a form adatait elmentem session-változókba, hogy a felhasználónak ne kelljen újra begépelnie az adatokat (szerintem ez elég fontos, engem is halálra idegesít, ha nem így oldják meg), majd visszairányítom a júzert az eredeti oldalra (ahonnan a formot elküldték), és ott a form megfelelő mezőibe kiíratom a session-változókban tárolt korábbi űrlapadatokat, majd ezután rögtön meg is szüntetem ezek tárolását (a formon már úgyis látszik, majd a felhasználó elküldi újból ugyanezeket az adatokat, ha nagyon akarja).
Érdemes ezeket az adatokat egy többdimenziós megoldással tárolni, hogy könnyű legyen őket megszüntetni is, valahogy így (egyszerű példa):
$_SESSION['form_data'] = array();
$_SESSION['form_data']['user_name'] = $_POST['user_name'];
$_SESSION['form_data']['user_address'] = $_POST['user_address'];
// ....
Ha meg akarod szüntetni az eltárolt formadatokat, elég ennyit csinálni:
unset($_SESSION['form_data']); -
biker
nagyúr
válasz
Speeedfire #6555 üzenetére
Latod, megoldottam igy is -
Sk8erPeter
nagyúr
válasz
Speeedfire #6553 üzenetére
Hát ha nem dob warningot vagy fatal errort, akkor lennie kéne ilyen függvényednek, aminek lehet, hogy referenciaként van átadva a tömb.
-
biker
nagyúr
válasz
Speeedfire #6540 üzenetére
elkezdtem próbálgatni, nem működik
shuffle_assoc nem működik nálam(??) shuffle() van
ez javítva, mondhatni ok, de ezek után a $tags-re és másra sem adja már vissza az összekevert, leszámolt tömbből a NEVET
azt tudom kinyerni hogy melyik kulcs hányszor szerepel, de a nevét rohadtul semmilyen verzióban nem adja vissza.ezen még küzdenem kell, úgy látom
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6542 üzenetére
Én a VirtualHostot így csináltam a httpd.conf fájlban:
NameVirtualHost 127.0.0.1
ServerName localhost
## Próbálgatásokhoz
<VirtualHost 127.0.0.1>
ServerName proba.local
DocumentRoot "d:/Honlap/www/proba"
<Directory "d:/Honlap/www/proba">
Options All
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>itt ebben a példában a http://proba.local címen elérem a "d:/Honlap/www/proba" elérési úton található könyvtárat, amennyiben beteszek egy ilyen megjegyzést a hosts fájlba (Windows alatt: C:\Windows\System32\drivers\etc\hosts):
#Próbákhoz
127.0.0.1 proba.localÍrd át a neked megfelelő elérési utakra és nevekre, ha gondolod, szerintem érdemes.
"Hogy érted azt, hogy nem célszerű kiírni?"
A felhasználóknak semmi köze az adatbázissal kapcsolatos pontos hibaüzenetekhez, azt inkább csak a fejlesztőnek kell tudnia.
Úgy lenne érdemes, hogy még a kiíratások előtt vizsgálgatod, hogy elérhető-e az adatbázis, meg annak megfelelő lekért sorai, és amennyiben valami gond lenne, akkor egy ennek megfelelő hibaoldalra irányítod át a júzert, vagy átirányítás helyett simán csak a fő tartalomrészbe kiíratsz egy felhasználóbarát hibaüzenetet, mint pl. "Sajnos para van az adatbázissal, gyere vissza később, csá".A hibaüzeneteket meg naplózod és/vagy elküldöd magadnak e-mailben, hogy tudj róla, de a felhasználó lehetőleg ne lássa, mi is történik a háttérben (pl. melyik tábla nem elérhető, miért, stb.). Ez is egyfajta biztonsági rés lehet, de ami lényegesebb szempont, hogy nem túl szép, ha a felhasználó az arcába kap egy warningot, fatal errort vagy hasonlót.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6540 üzenetére
"Kellene még egy másik tábla, ahol el lenne tárolva ez mind"
Ezt hogy érted?
Engem is érdekel a gyorsítás, de ezt most nem értem, mire gondolsz.Szerk.: jé, közben pont írtál nekem, mindjárt elolvasom.
-
biker
nagyúr
válasz
Speeedfire #6540 üzenetére
köszi, hétvégén összehozok valamit
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6496 üzenetére
Miért nem használod fel a $_GET['phpoldal'] változót?
Úgy értem, akkor minek adod át ennek a query stringnek a címet?
http://localhost/!!!szapar.hu/
Ehelyett meg létrehozhatnál egy bejegyzést a hosts fájlban, meg apache-beállításokban egy VirtualHost-ot, és lehetne a címe http://szapar.localÍgy azé' szebb, meg nem kell annyit pötyögni a cím beírásához.
$valogatas = "select * from szapar_alias where eng = '".$uri."' ";
Itt azért az $uri változót nem ártana escape-elni, az SQL Injection elkerülése érdekében!$i= 0;
foreach ($valogat as $ertek) {
if ($i != 0) {
parse_str($ertek);
}
$i++;
}
Ezt nem is értem, minek csinálod, ha utána egyáltalán sehol nem használod fel az $ertek változót?
Vagy felhasználod, csak valami include-olt fájlban? Vagy csak benne maradt?if (!mysql_query($valogatas,$con)) {
die('Hiba: ' . mysql_error());
}
Itt a die() helyett érdemesebb lenne inkább valami felhasználóbarátabb hibaüzenetet, hogy nem elérhető az adatbázis, látogasson vissza később. Ráadásul a felhasználónak semmi köze a konkrét hibaüzenethez. Nem célszerű kiírni! Főleg, hogy nem is túl szép.
Az ilyen jellegű hibákat amúgy nagyon faszán le lehet kezelni kivételkezeléssel, ha valami kritikus jellegű hibád van, azonnal dobsz egy kivételt, hogy ne is futkorásszon tovább a kód, nem is kell bonyolult és ronda if-else blokkokat csinálni, egyszerűen valahol elkapod a kivételt, megfelelő módon kezeled, és kész.Saját kivételtípusokat is definiálhatsz, ha származtatsz az Exception osztályból, azt is érdemes, hogy el tudd dobálni, és tudd, hogy egész pontosan milyen kivételt kell kezelned, így akár végtelen mennyiségű kivételt is elkaphatsz.
Példa:class Kiskutya extends Exception {
//nem is feltétlenül kell, hogy bármi más legyen benne
}
/// ... valahol a kódban
try{
// ...
$hiba = true;
if($hiba){
throw new Kiskutya('elég nagy gáz van, kiskutyákat dobálok! :D');
}
///...
$legyen_meg_kivetel = true;
if($legyen_meg_kivetel){
throw new Exception('ha az előbb nem dobáltam volna kivételt, akkor még idáig is eljutna, de ezt a kivételt is elkapnám a catch-ben! Bruhahahahh.');
}
} catch (Kiskutya $e) {
echo 'Kiskutya kivétel elkapva! Konkrét hibaüzenet: '.$e->getMessage();
} catch (Exception $e) { // fontos a sorrend! Az ősosztály (Exception) később legyen, mint a származtatott!
echo 'Általános jellegű hiba: '. $e->getMessage();
}if (!empty($valogat['url']) and isset($valogat['url']))
Ennek a feltételvizsgálatnak így nem sok értelme van, itt elég lenne a !empty() részt vizsgálni, nyilván ha nem üres a változó (nem is NULL, nem is üres string, stb.), akkor be van állítva, tehát a második feltétel már felesleges. Sőt, itt előbb célszerű lenne inkább megvizsgálni, hogy van-e kapott eredményhalmaz, vagy sem, ha már úgyis lekérdezed a kapott sorok számát a mysql_num_rows() függvénnyel.Na, a többi részéhez most nem volt türelmem.
(#6494) Speeedfire:
"Amelyik táblában az url-ek vannak cachelve van."
Hogyan bírod rá így külön az adatbázist, hogy cache-elje? Tudtommal default cache-eli, indexeléssel lehet esetleg segíteni a lekérdezés gyorsaságát. -
pumatom
aktív tag
válasz
Speeedfire #6494 üzenetére
Szia!
Ez a kódom;
<?php
$imglist='';
$img_folder = "images_hu/";mt_srand((double)microtime()*1000);
$imgs = dir($img_folder);
while ($file = $imgs->read()) {
if (eregi("gif", $file) || eregi("jpg", $file) || eregi("png", $file))
$imglist .= "$file ";} closedir($imgs->handle);
$imglist = explode(" ", $imglist);
$no = sizeof($imglist)-2;
$random = mt_rand(0, $no);
$image = $imglist[$random];echo '<div align="center"><a href="' . $_SERVER['PHP_SELF'] . '"><img src="' . $img_folder . $image . '" border=3 </a></div>';
?>
Próbálgattam amit mondtál, de hibát adott, hova kellene beilleszteni a header() -t?
-
RedSign
tag
válasz
Speeedfire #6498 üzenetére
Persze, természetesen... :-) ...majd a napokban foglalkozom vele, aztán ha lesz eredmény megírom... :-D
-
RedSign
tag
válasz
Speeedfire #6496 üzenetére
Szia!
Köszönöm szépen a példát, egy alapnak nagyon jó lesz...
RedSign
-
RedSign
tag
válasz
Speeedfire #6494 üzenetére
Sziasztok!
Még nem sikerült kipróbálnom a htaccess rewriterule-s megoldást, de a jelenlegi projektemnél nekem is hasznos lehet.
Speeedfire - Egy példával leírnád, hogy hogyan is működik nálad (link is jó, ha meg van honnan vetted)?
Üdv,
RedSign -
Tele von Zsinór
őstag
válasz
Speeedfire #6489 üzenetére
Egy framework nyilván lassú a teljesen általad írt kódhoz képest, de a kettő méretét nem is lehet összemérni - és manapság a fejlesztői órabér sokkal drágább, mint a processzoridő, ezért a fejlesztés gyorsaságán van a hangsúly. Ezekben segítenek nagyon a keretrendszerek.
A symfony összes teljesítményről szóló howtoja úgy kezdődik, hogy tegyél fel valami bináris cachet, mint az APC, ami ráadásul elég php-közeli is, és egyszerű telepíteni. Többszörösére ugrik vele a teljesítmény, mert így nem kell minden egyes kéréskor külön lefordítani a php fileokat.
Nyakatekert, hát... az egyik első php5.3-as framework, érthető módon különbözik az eddig megszokott módszerektől. Fejlesztői levlistán követtem, ahogy alakul, illetve a dokumentációjával is ismerkedek egy ideje - tanulni, szokni kell, de aztán remek lesz.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6487 üzenetére
És mire hivatkozva akarnak lebeszélni róla? Én mint teljesen pártatlan kérdezem, még nem próbáltam.
================================
(#6483) abteam2008 : legközelebb használd a "Programkód" gombot a bemásolt kódod kijelölése után, mert így nagyon nehéz áttekinteni, én legalábbis ha ilyen kódot látok, többnyire meg sem próbálom megérteni, mert annyira zavaró, hogy mindenféle formázás, indentálás nélkül van csak bemásolva. Szerintem ezzel itt a legtöbben így vannak.
-
Brown ügynök
senior tag
válasz
Speeedfire #6485 üzenetére
Hát ekkor még nagyon korai fázisban volt a Symfony 2. Ma már azért jóval kidolgozottabb, szinte kész van. És éppen ezért nincs még rendes tutorial nem hogy magyarul de angolul sem.
Egy jó kiindulópont lesz a Jobeet projekt átültetése Symfony 2-be: [link]. Még csak az első három nap érhető el és az sem működik tökéletesen.
Az utolsó parancsnál doctrine:data:load nekem hibát ír ki:
Fatal error: Cannot redeclare class Job\JobeetBundle\Entity\Category in E:\easyp
hp\www\symfony\src\Job\JobeetBundle\Entity\ORM\Category.php on line .
Jó hír, hogy szinte naponta frissítik tehát előbb-utóbb működni is fog.Illetve készül a knp labs berkein belül egy tutorial, érdemes figyelni az oldalt: [link]
Néhány szolgáltatást összefoglaltak az egyik fórumban: [link]
Symfony 2 csomagok: [link]
Symfony 2 API : [link]
Symfony 2 összetevők: [link]
-
Speeedfire
félisten
válasz
Speeedfire #6470 üzenetére
Látom mindenki maga fejleszti ezeket.
Közben vagy opencart vagy prestashop lesz az alapja az egésznek.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6437 üzenetére
engedélyezni kell az apachban, vagy abban amiben használod
a .htaccess fileok csak apache szerverrel működnek, a többiben teljesen máshogy működik a konfiguráció
-
Frigo
őstag
válasz
Speeedfire #6432 üzenetére
Ehh sajnos az újabb változatokból már kivették .
DE vissza lehet varázsolni!!!Egyszerűen tegyél fel egy régebbi (pl 6.7-es) NetBeans-t és az UML könyvtárat másold be a 6.8-as alá.
-
Speeedfire
félisten
válasz
Speeedfire #6430 üzenetére
Az argouml-t ajánlották ez elvileg már kezeli a kódgenerálást is. Meglesem.
Frigo: Észre sem vettem, hogy írtál.
Az mégjobb, mert netbeans-t használok én is.
Kell ezt valahol aktiválni vagy valami csinálni vele? -
Frigo
őstag
válasz
Speeedfire #6430 üzenetére
NetBeans-hez van és a legtöbb modern IDE rendelkezik UML támogatással.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6424 üzenetére
Keveri a két dolgot: az interfacekben minden függvény absztrakt, de nem kell (szabad) kiírni. Sima osztályokban is lehet absztrakt függvény (ilyenkor azokat példányosítani sem lehet), ekkor ki kell írni.
Miért akarod kétszer (mindkét konstruktorban) beállítani? Felesleges.
A négyzeted használható téglalapként is. Itt nem olyan szigorú a típusvizsgálat, mint mondjuk c++ban, hisz az egy erősen, ez meg egy gyengén típusos nyelv. Annyi a lényeg, hogy a változó mögötti objektumnak legyen olyan függvénye, amit hívni akarsz, semmi egyéb.
-
DeltaPower
addikt
válasz
Speeedfire #6421 üzenetére
bocs, előbb rosszul értelmeztem a hibaüzenetet. nem kell bele az "abstract"
-
Tele von Zsinór
őstag
válasz
Speeedfire #6421 üzenetére
Vedd ki az abstract kulcsszót, felesleges, sőt: tilos. Úgyis mindegyik függvénye absztrakt, akkor minek kéne kiírni?
Korábbihoz: ez a függvényed hibás:
public function __construct() {
$this->szelesseg = $szelesseg;
$this->magassag = $magassag;
}Itt jön a notice, hogy nincs szélesség meg magasság változód - és jogos a panasz, mert nincs.
-
DeltaPower
addikt
válasz
Speeedfire #6419 üzenetére
ha jól értem, akkor kell a public/private/stb az interface-ben levő függvényeknek is
-
Frigo
őstag
válasz
Speeedfire #6416 üzenetére
Üres a konstruktorod paraméterei a téglalapnál.
-
shaggy
aktív tag
válasz
Speeedfire #6414 üzenetére
de-de mert ez a macromedia mx ez a címe és ebben egy kis php van és az a 4-es de ezt már végig olvasom és utánna jön a php5 24 óra latt
-
Tele von Zsinór
őstag
válasz
Speeedfire #6404 üzenetére
Pontosan: ha exceptiont dobsz destruktorban, az fatal error.
-
Brown ügynök
senior tag
válasz
Speeedfire #6405 üzenetére
Így van.
protected: Csak a tartalmazó osztály és alosztály számára hozzáférhető.
private: Csak a tartalmazó osztály számára hozzáférhető. -
Tele von Zsinór
őstag
válasz
Speeedfire #6402 üzenetére
Ha nem kézzel semmisíted meg az objektumot, akkor erre azután kerül sor, hogy a szerver elküldte a választ a böngésződnek, és záródott a kapcsolat - szóval ne számíts arra, hogy a destruktorba bármit írva látni is fogod. Mégvalami, amit érdemes észben tartani: Attempting to throw an exception from a destructor (called in the time of script termination) causes a fatal error.
-
Speeedfire
félisten
válasz
Speeedfire #6401 üzenetére
Meglett a hiba, nem a kódban volt a gond hanem az update résznél a foreach ciklusban.
Szintaktikailag a mysqlnek nem felelt meg, csak erről nem dobott nekem hibát.
Helyesen a foreach:foreach($this->_modositottTulajdonsagok as $tul) {
$utasitasBeallitas[] = $tul .' = \'' . $this->_tulajdonsagok[$tul]. '\'';
} -
Sk8erPeter
nagyúr
válasz
Speeedfire #6394 üzenetére
"van-e az adott néven ilyen függvény, ha van akkor meghívja ha nincs akkor elkészíti"
Nem készít el semmilyen függvényt.
Függvényt legfeljebb meghív. [call_user_func()]"Nem lenne célszerűbb már a __get() résznél megvizsgálni a dolgokat? dátum, név stb? Mert így feleslegesen dolgozik utána még a __set() is."
Másra való a kettő! A getter függvényekkel lekérdezel bizonyos attribútumokat, változóértékeket, a setter függvényekkel pedig beállítod azok értékét.Ha be akarnám állítani vagy épp le akarnám kérdezni a "pityipalko" változó értékét, akkor arra nyilván kivételt dobna, mert nincs ilyen (ha beállítottad volna a konstruktorban, akkor lenne ilyen! példa:
$this->_tulajdonsagok['pityipalko'] = null;).
De a $_tulajdonsagok tömbben létezik 'nev' és 'szuletesidatum' index is, így azokhoz tartozik egy érték, azok beállíthatók, lekérdezhetők.Amikor ezt írod:
$obj->szuletesidatum = '1985-08-27';
Akkor tulajdonképpen a "mágikus" __set függvény hívódik meg, a __set $tulajdonsagnev paramétere megkapja a 'szuletesidatum' sztringet, az $ertek pedig az '1985-08-27' értéket.Ezután az array_key_exists() függvénnyel megvizsgáljuk, hogy a $_tulajdonsagok tömbben beállítottunk-e egyáltalán 'szuletesidatum' index-szel bármit (ami a konstruktorban egyébként null értéket kapott [lásd $this->_tulajdonsagok['szuletesidatum'] = null;], de ezzel már létrejött ezen az indexen egy érték), ha nem, kivétel, ha igen, megyünk tovább.
Ezután megvizsgálja, létezik-e az osztály adott példányában ($this) $tulajdonsagnev . 'Beallitas' nevű függvény - tehát esetünkben szuletesidatumBeallitas nevű függvény (mivel konkatenálja a $tulajdonsagnev változó értékét a 'Beallitas' sztringgel, majd megvizsgálja, van-e ilyen metódus ( method_exists() függvény).
Ha létezik ilyen metódus, akkor meghívja azt, különben pedig csak simán beállítja a $tulajdonsagnev nevű indexen található értéket a $_tulajdonsagok tömbből.Remélem valamennyire érthetően mondtam el.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6392 üzenetére
Valószínűleg saját fordítás, mert készítik egy ideje a php6-ot. Ott is van a neve végén, hogy dev verzió.
Korábbira: az általad adott kódban pont van egy xyBeallitas példa.
-
Brown ügynök
senior tag
válasz
Speeedfire #6388 üzenetére
Nincs még PHP 6. A hivatalos oldal szerint a következő verzió az 5.3.6. lesz.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6379 üzenetére
A példaprogram lényegi része:
definiál egy tulajdonságok belső változót, benne létrehozva a helyet az érvényes tulajdonságoknak
definiál egy függvényt szuletesidatumBeallitas néven, ami az adott tulajdonság beállításával foglalkozik
definiál egy mágikus __set függvényt, ami akkor hívódik meg, mikor egy nem létező tulajdonságot próbálsz beállítani. Működése:
- ha a $_tulajdonsagok tagban nincs olyan kulcs, akkor hiba
- ha létezik "tulajdonságnévBeallitas" függvény, akkor meghívja
- amúgy beállítja az adott tulajdonságotAmit megmutat: hogy lehet általános magic settert írni úgy, hogy ha egy-egy esetben mégis spec. működés kell, megoldja. A getterben ott a párja, ami "tulajdonságnévLekerdezes" nevű függvényt keres.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6341 üzenetére
Szerintem speciel az "1985. 08. 27." pont nem egy érvényes dátum, amit megeszik az strtotime függvény.
"1985 08 27" - ez sztem megint nem érvényes dátumformátum, így jogosan dobja a kivételt.
Mellesleg így elsőre nekem úgy tűnik, hogy a könyv az OOP-s részt kezdőknek feleslegesen elbonyolítja, mert így csak nézel, hogy mi a bré van...
Én annak idején C++-ból értettem meg elég jól az OOP-t, elsőre ilyen magic függvényekkel "varázsolni" fura lett volna, tuti nem vágtam volna elsőre, mi a pálya. Így utólag belátom, hogy ezek könnyíthetik a melót, de elsőre érdemes sztem a hagyományos módszerekkel tisztában lenni, hogy értsd, de ez mondjuk csak egyéni vélemény.Ezért fura a könyv felépítése.
-
PazsitZ
addikt
válasz
Speeedfire #6347 üzenetére
[link]
Első paraméter: array($this, $tulajdonosnev . 'Beallitas') - function név
többi paraméter(opcionális): $ertek - paraméter(ek)
Ha osztály function nevére kell hivatkoznod, mint string, azt így teheted: array(classnév,functionnév)
tehát az aktuális osztály($this), $tulajdonosnev.'Beallitas' sztringösszefűzés adta functiont hívod meg.A __set(), __get() magic methodok a nem definiált tagváltozókat fogadják és szimulálják za általad implementált módon, ilyen formában nincs köze a call_user_func() fgv.-hez.
-
jeges
senior tag
válasz
Speeedfire #6350 üzenetére
nem biztos, hogy jól értelek, de a függvények szempontjából nem is értelmezhető. a call_user_func() egy felhasználó által definiált függvényt/eljárást hív meg, a meghívott függvény/eljárás paramétereivel. mivel jelen esetben objektum eljárásáról van szó, az eljárás paramétere lehet mindkét string. ha jól gondolom, az egész példa arra jó, hogy bemutassa, hogy lehet előre nem definiált tulajdonságú osztályokat kezelni.
-
jeges
senior tag
válasz
Speeedfire #6347 üzenetére
ezt így "látatlanba' " nem könnyű megmondani.
az első valamely class egy példányának (ő lenne a $this) a "$tulajdonosnev" metódusát hívja meg a "Beallítas" paraméterrel. Feltételezem, hogy a tulajdonosnév eljárás machinálására szolgál, és az adott paraméterrel a tulajdonosnév beállítása történik meg. A második hasonló. (nincs elírva az első soron a tulajdonos? inkább tulajdonság lehet, nem?)joker: #6325-ben a válasz
-
j0k3r!
őstag
válasz
Speeedfire #6339 üzenetére
melyik konyv ez?
-
jeges
senior tag
válasz
Speeedfire #6345 üzenetére
a php számára ez nem dátum, hanem egy "sima" string. bizonyos formátumokat felismer, másokat Neked kell megmutatni a programnak. php manual-ban le van írva, bár nem a legvilágosabb része a dokumentációnak. a yyyy-mm-dd formátum jó szokott lenni.
-
jeges
senior tag
válasz
Speeedfire #6343 üzenetére
próbáld meg a dátumot így: 1985-06-27
és írd vissza false-ra, mer' az strtotime() == false a hibás
(azaz szerintem nem volt jó true-val, csak nem dobott hibát - ez a kettő jelen esetben nem ugyanaz) -
jeges
senior tag
válasz
Speeedfire #6341 üzenetére
szerintem próbáld külön a köszöntésig egy ciklusba (megjegyzem, logikailag nekem egyébként is az tűnik egy teljes ciklusnak), meg a végét (ami hibás) egy másik try-catch-be
szerk: így valahogy:
$obj = new TulajdonsagObjektum();
$obj->nev = "Szabi";try {
$obj->szuletesidatum = '1985. 08. 27.';
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} if (!isset($e)) {$obj->koszontes();}try {
$obj->szuletesidatum = 'piros';
$obj->koszontes();
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} if (!isset($e)) {$obj->koszontes();} -
jeges
senior tag
válasz
Speeedfire #6339 üzenetére
uncaught exception -> nincs try/catch, ami elkapja
szerk: nézd meg itt
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6327 üzenetére
Ha sok HTML-kód kerül az outputra, nem is árt, ha az aposztrófos megoldást választod.
(Jó fárasztó és csúnya escape-elni a sok idézőjelet az attribútumoknál.)
(#6329) Siriusb: állítólag az aposztrófos megoldás a kiértékelés szükségességének hiánya miatt (de jól hangzott) gyorsabb lehet, mások szerint urban legend.
Személy szerint jobban szeretem inkább összefűzögetni, és aposztrófot használni, részben a fenti okok miatt (pl. esetleges sebességkülönbség plusz HTML-kód kiíratása), részben meg amiatt, hogy így szerintem sokkal jobban elkülöníthető a kód, ha böngészgetem a kódot - még ha a fejlesztőkörnyezet ki is emeli az idézőjelben elhelyezett kiértékelendő változót, akkor is sokkal inkább egybefolyik a többi kóddal. Ráadásul tömbindexelésnél vagy egyéb esetben is szintaktikai hiba lehet belőle, az összefűzögetésnél könnyebb elkerülni (számomra).Többiektől kérdezném, ha már erről van szó:
echo-zásnál mennyire használjátok azt a változatot, hogy vesszővel elválasztva íratjátok ki a különböző változókat, sztringeket, és nem konkatenálva?
Eszerint itt is lehet sebességbeli különbség, mégpedig a vesszővel elválasztott módszer javára.
Lehet, hogy értelmesebb, mint az állítólag lassúnak számító sztring-összefűzögetés, és érdemes lenne esetleg erre a módszerre átszokni.
Új hozzászólás Aktív témák
Hirdetés
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Apple asztali gépek
- Tőzsde és gazdaság
- Milyen házat vegyek?
- EAFC 25
- Vicces képek
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- EA Sports WRC '23
- Sweet.tv - internetes TV
- A lapkakészlet és az akku különbözteti meg a Motorola Edge 60 és Edge 60 Pro-t
- További aktív témák...
- Intel Core Ultra 7 265 /// Bontatlan, Teljesen Új // Üzletből, Számlával és Garanciával
- Csere-Beszámítás! Ryzen 9 9950X Processzor!
- Újszerű Gamer Asztali PC Számítógép 2026-ig Garis ASUS H510M-K R2.0 i5 11400F RTX 4060 8GB Dobozába
- Samsung Galaxy Tab A8 (2021) , 3/32 GB,
- Samsung Galaxy S6 Lite (2022) , 4/64 GB ,Wi-fi
- Eladó Apple iPhone Xr 64GB fekete / ÚJ KIJELZŐ / 100% AKKU / 12 hónap jótállással!
- Samsung Galaxy S23 128GB, Kártyafüggetlen, 1 Év Garanciával
- LG 45GS95QE - 45" Ívelt OLED / 2K WQHD / 240Hz 0.03ms / NVIDIA G-Sync / FreeSync Premium / HDMI 2.1
- Bomba ár! Lenovo X1 Yoga 3rd - i5-8GEN I 8GB I 256GB SSD I 14" FHD Touch I W11 I CAM I Garancia!
- Bomba ár! Lenovo X1 Yoga 1st - i7-6G I 8GB I 256SSD I 14" WQHD I HDMI I W10 I CAM I Garancia!
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest