- Luck Dragon: Asszociációs játék. :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Fűzzük össze a szavakat :)
- Gurulunk, WAZE?!
- Geri Bátyó: B550 szűk keresztmetszet, de mi és miért?
- gban: Ingyen kellene, de tegnapra
- sh4d0w: Csak a profit - emberélet nem számít
- vrob: Az IBM PC és a játékok a 80-as években
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- Magga: PLEX: multimédia az egész lakásban
Új hozzászólás Aktív témák
-
PumpkinSeed
addikt
válasz
lezso6 #18958 üzenetére
Igazából szerintem azért "szar" (ami egy kicsit erős túlzás). Én pl. Go-ban szoktam ami nem engedi, hogy gányoljanak benne, mert annyira "strict" nyelv, hogy nagyon nehéz benne szar kódot írni. Ezzel szemben a PHP meg engedi. Ez nem azt támasztja alá, hogy a PHP szar meg minden, csak jobb lenne ha nem lenne ennyire megengedő. De mondjuk azt se lehet elvárni, hogy mindenki Symfony best practice-t követően kezdjen el programozni. Nyilván inkább az a szar, hogy mindenki PHP-val kezd ami hát szvsz nem a legjobb, mert ha mondjuk C-vel vagy valami mással kezdene, végigsz*pná a programozás nehezebb ágát is akkor egyből minőségibb kódok születnének PHP-ban is.
Amúgy én kifejezetten gyűlölöm a PHP-t, de más miatt nem azért mert lehet benne gányolni.
-
Sk8erPeter
nagyúr
válasz
lezso6 #12406 üzenetére
Ez így van.
Egyébként gondolom értetted Te is, mire gondolok, hogy egyes cégeknél jó állásért meglepő fizukat lehet hallani még PHP-munkakörben is.
Meg azért írtam, hogy "trollkodás", amit válaszolt, mert az volt a kérdés, milyen tutorialt nézzen meg, nem az, hogy belevágjon-e és jó fizut fog-e kapni, vagy sem. -
Peter Kiss
őstag
válasz
lezso6 #12215 üzenetére
Nekem már sikerült ilyenbe belefutnom, nem volt őszinte a mosolyom. Ami igazából fontos a példából, hogy ne használjunk referenciákat, de nem csak azért, mert ilyen eredmények születhetnek, hanem Do-not-use-PHP-references.
-
Sk8erPeter
nagyúr
válasz
lezso6 #12206 üzenetére
12342468
nem ez? tegnap, 11-e délelőtt 10 óra óta nem aludtam egy percet sem, szóval lehet, hogy hülyeség
De a referencia miatt ez ugrana be elsőre. Nem futtattam le, ahhoz már nincs energiám, inkább eltakarodok lassan aludni.
szerk.: na jó, nem bírtam a véremmel, lefuttattam, mert rájöttem, hogy ahhoz nem kell sok energia.
Majd kommentálom, ha páran még megnézték. -
1ed
csendes tag
$PHP_SELF ez csak register_globals-al működik (ami általában ki van kapcsolva és jó is úgy)
Ha ezt írod szerintem akkor is jó lesz <?php echo $_SERVER['PHP_SELF'] ?>
és talán még a html is valid(abb) lesz (mintha nem írnál semmit)Még egy megjegyzés:
ha már ilyet írsz: <?, akkor írhatnád ezt is: <?=$_SERVER['PHP_SELF']?>
és így még rövidebb, bár a rövid php tag-ek használata nem javasolt (XML miatt), és általában tiltott -
Soja
aktív tag
Nem hiszem el, de igazad van, kivettem belőle, és működik!
Most nagyon örülök, mégsem én rontottam el
Lenne még egy kérdésem.
Wampserver van telepítve nálam, de a php GD2-es grafikus modulját nem sikerül működésre bírni.
Ha ki van kapcsolva, nyilván nem sok minden történik, ha engedélyezve van, akkor meg kép helyett mindenféle krix-krax-okat jelenít meg 10 soron keresztül...Ez beállításprobléma, vagy nem jó paranccsal dolgozok, vagy mi lehet a gond?
Több példaprogramot is kipróbáltam, egyelőre ugyanazzal az eredménnyel. -
Soja
aktív tag
A hibát nem tudom lekérdezni, mert a böngésző írja ki ezt:
Forbidden
You don't have permission to access /pages/php/php12/< on this server.
A kóddal nincs baj, mert szétbontottam két lapra, az első adatokat ad át a másiknak, a második feldolgozza azt, és a módosítás tökéletesen meg is történik.
A hiba valahol az önmagát meghívó form-ban lehet, vagy lehet, hogy ilyet nem is lehet csinálni? php4-es könyvben van a példa, de a php-m már 5-ös verzió felett van.
Esetleg, ha van valakinek hasonló adatbázismódosító programja, azt szívesen meglesném.
-
Sk8erPeter
nagyúr
Most miről beszélsz? Egyetlen sorrol, a tr class-nál? Nem én gányoltam össze, javítottam egy korábbi, egyáltalán nem működő verziót, ez működik, nem azt mondtam, hogy tökéletes. Egyébként is, az eredeti (nem az általunk módosított) kód gány, nem én hánytam így össze...
Na meg a franc fog a szépítgetéssel törődni éjfél közeledtével. -
Sk8erPeter
nagyúr
Ott volt az utóbbi cikk, mint ajánlott link, ott épp ezt ajánlják. Az md5-öt első lehetőségnek írtam, a választás az övé. Gondolom egyébként nem szupertitkos aktákat fog először tárolni, hogy attól parázzon, hogy valaki idejét nem sajnálva feltörje az md5-tel titkosított jelszavait.
-
Sk8erPeter
nagyúr
Hali!
Na, végül sikerült!Úgy döntöttem, hogy már csak az átláthatóság kedvéért is szétboncolom kicsit a kódot, és a feldolgozást átrakom másik fájlba. Tulajdonképpen maradhatott volna az eredetiben is, de már a t×köm tele volt, hogy annyi kód van egy helyen...
Amivel korábban a problémám volt, ami miatt rinyáltam, az az, hogy lényegében így kétszeri átirányítás történik így is-úgy is, amennyiben azt szeretném, hogy a böngésző ne kérdezgessen vissza, hogy el szeretném-e küldeni ismét a POST adatokat.
Mert így zajlik a feltöltés, ha az általad javasolt SESSION-ös trükkel oldom meg (ami egyébként nekem tetszik):
1.) form elküldése feldolgozásra, átirányítás a feldolgozó fájlba (ami adott esetben lehet uaz a fájl is) -> 2.) form kiértékelése, feldolgozása, hibamentesség esetén feltöltés, tetszőleges SESSION változó beállítása adott értékre, majd átirányítás (már a második) az eredeti fájlba -> 3.) eredeti fájlban a SESSION feltételágba lép (mivel az beállított értékkel rendelkezik a sikeres feltöltés miatt), kiírja a SESSION-be beállított cuccokat, majd unset-eli.Ez így most már tökéletesen működik, de mondom, eddig valahogy azon paráztam, hogy most kétszeri átirányításra van szükség, és ez esetleg lassíthat. De kb. 1-2 másodperccel tart így tovább a feltöltés, nem releváns, és egy admin felületen amúgy sincs nagy forgalom...
Egyébként minden esetben így szokták megoldani, hogy kétszeri átirányítás történik a feldolgozás miatt?Az ob_start() használata milyen esetekben ajánlott?
Lényeg: köszönöm a segítséget, most már végre működik!
Ez a session-ös beállítás bevált.
Én nem érzem úgy, hogy ez gányolás lenne, ha mégis az, akkor indokokat kérek!(#3320) fordfairlane: köszi neked is, végül maradt a session-ös megoldás.
-
-
Sk8erPeter
nagyúr
Oké, egyetértünk, de van pl. az MVC-ről valahol jó leírás (NEM Wikipédiás)? Hogy az egészet hogyan is kell elképzelni a gyakorlatban. Nyilván ez nem feltétlenül azt jelenti, hogy használj Joomla-t vagy ehhez hasonlót, hanem gondolom át lehet ültetni saját modellbe/keretrendszerbe. Ha Joomla-t vagy ilyesmit használnék, akkor kb. azt is mondhatnám, hogy mi a francnak dolgoztam annyit, "készen" is kaphattam volna
(de szerettem volna belelátni a működésébe, nem egy "előre legyártott" valamit használni)
-
Sk8erPeter
nagyúr
Az a helyzet, hogy valóban nem látom még át teljesen jól a korrekt megoldást, és az is való igaz, ahogy cucka is mondta, hogy esetleg ez egy gányolt fos kód így. Főleg annak lehet esetleg rossz látni egy ilyen kódot, akinek már azért bőven van tapasztalata hasonlók megírásában, de az nem én vagyok.
Igazából ez az első komolynak nevezhető munkám PHP-ben - sőt, továbbmegyek: az első normális honlapom -, és nemrég kezdtem el tanulni az egész PHP-nyelvet, ezért bőven előfordulhatnak hibák, és hülye kérdések is, ezekért elnézést kérek, de az viszont nagyon jól jön, hogy mindig megpróbáltok segíteni.Nélkületek lassabban haladnék egyes problémákkal.
Úgy próbáltam bizonyos feladatokat megoldani, hogy php.netről vagy gugliról keresett cikkekből, esetleg abból a szar PHP4 könyvből megpróbáltam ellesni trükköket, módszereket, és azt átültetni a saját oldalamra, több-kevesebb sikerrel.Nyilván már egy komplexebb űrlapfeldolgozási feladatnál már azért nem elég beérni a gány technikával, de próbálom egyelőre a jelenlegi tudásomból kihozni a legtöbbet. Az admin felületet már átadtam, természetesen folyamatosan módosítgatom, javítgatom, toldozom-foldozom a kódot. Mivel haverom apjának készítem a honlapot, nem nyakaznak le, ha nem tökéletes a kód, mivel fingjuk nincs az egészhez - mint általában az emberek többségének
-, és ők már ettől is el vannak ájulva
Rengeteg dolgot kellett rendkívül rövid idő alatt, iszonyú kevés szabadidő mellett, megfeszített tempóban csinálni, ezért sok dolognak egyszerűen nem volt időm utánajárni, meg kellett csinálni, működjön.
Működik, de ezt majd lehet továbbfejleszteni, hogy úgy működjön, hogy attól egy jó programozó sem sírja el magátCsak gondoltam elmondom, miért is teszek fel olykor amatőr kérdéseket PHP-vel kapcsolatban, hogy ne verjétek a fejeteket a falba ezek láttán...
Ha azt mondjátok, érdemes megvenni a PHP fekete könyvet, megteszem, mert valószínűleg jóval összeszedettebb írás van benne, mint a netről összeszedegetett információmorzsák és a PHP4 könyv egyvelege...
(persze php.net fasza, de azért nem minden célra)
_____________________________________________________Szóval a problémát az okozta, hogy csekkoltam, hogy a felhasználó lenyomott-e gombot, és ha igen, akkor egyből elvégeztem mindenféle műveletet, feltölteni kívánt fájl ellenőrzése, ha minden rendben, akkor feltöltése, majd egyből vízjelezése, az eredmény azonnali megmutatása, thumbnailek készítése, ezek megmutatása, stb...
Tehát magyarán minden egy fájlban van, az űrlap megjelenítése és feldolgozása is. Ez gond lehet.
Lehet, hogy csak fel kéne töltenem, a háttérben elvégezni a vízjelezést, thumbnailek készítését, ezek eredményét pedig valahogyan eltárolni, aztán a későbbiekben megmutatni, de már fingom nincs, milyen sorrendben, hogyan kéne...(minél jobban belemerülök, annál jobban elveszek a részletekben)
Ha ezt az MVC-módszert alkalmaznám, valószínűleg nem lenne probléma, de egyelőre csak a körvonalait látom, hogy mi a lényege, rendes leírás (nem Wikipédia) sokat segítene...
Egyébként mindig az van, hogy elkészítem, örülök, hogy faszán működik, ahogy kéne, aztán rájövök, hogy mégis mennyire hiányos/kifogásolható a kód...
Gondolom a kezdeti tapasztalatgyűjtéseknél sűrűn van ez, nem csak velem van a hiba...
-
fordfairlane
veterán
-
cucka
addikt
Az ob_start függvénnyel mi a baj? Tény hogy gány lesz utána a kód
Na látod, meg is válaszoltad.de szerintem még mindig egyszerűbb, mint átírni az egészet MVC-re. De tény, hogy az utóbbi lenne a legjobb.
Előfordul, hogy mások által hasonló szellemiségben írt, össze-vissza toldozott szar kóddal kell foglalkoznom, olyan is előfordult, hogy én csináltam hasonlót, mert nagyon szorított az idő, de megmondom őszintén, a hátam közepére sem kívánom. Továbbá hosszú távon az ilyen összehányt kódokkal mindig sokkal több a probléma, összességében véve a leghatékonyabb elsőre jól megírni, mint megírni rosszul és utána kókányolni. (És ugye tudjuk, hogy a php teljes mellszélességgel támogatja a szarul összegányolt kódok írását, tehát észnél kell lenni)
-
cucka
addikt
Hirtelen most erre a dologra azt tudom mondani, hogy használd az ob_start() függvényt a kérdéses fáj elején, s így akkor küldhetsz headert, amikor csak akarsz, mert pufferbe írja az adatokat elküldés helyett, amit a szkript lefutása után ürít ki, ha ez megold valamit.
Ilyet azért inkább neAmúgy meg nem értem a teljes problémát, amiről beszéltetek. Sok hosszú hozzászólás és egyszerűen nem látom bennük, hogy mi a gond.
Egy php-ban írt weboldal nagyjából a következő struktúrával rendelkezik:1. session indítás, változók beállítása, alapvető osztályok példányosítása
2. beküldött-e a felhasználó bármilyen adatot? Ha igen, akkor adatok ellenőrzése, a szükséges műveletek elvégzése.
3. minden olyan művelet elvégzése, ami ahhoz szükséges, hogy kiírjuk a html-t.
4. a html kiírása.Az 1-3 pontokban semmi nem kerül kiírásra, tehát lehet piszkálni a session-t meg átirányítani. A 4. pontban kizárólag a kiírás van, semmi más. Egyszerű, ha megnézel egy mvc-s keretrendszert, az is ugyanígy működik.
-
Sk8erPeter
nagyúr
Ezek szerint az előző hsz. kicsit túl hosszúra sikeredett, sorry...
Igazából annyi lenne a lényeg, hogy hogyan tudom megoldani ezt a SESSION-ös trükköt úgy, hogy nem a headerbe, még a <html> cuccok megjelenése előtt szeretném kiíratni a sikeres feltöltésre utaló üzeneteket, hanem úgy, hogy rendesen megjelenjen az oldalon, menükkel, mindennel együtt.
Aztán frissítéskor viszont ne akarjon minden POST üzenetet újra elküldeni.Amielőtt még a lényeget feltölteném adatbázisba, elvégzek olyan műveleteket, mint a kép vízjelezése, felbontás kiíratása, thumbnailek készítése, és egyben megmutatása (tehát hogy megjelenik a kép több elkészített verziója is a felhasználó számára az oldalon), valamint egyéb megadott adatok kiíratása, majd ezt követően történik csak meg az adatbázisba való feltöltés.
Érdekes lenne, ha még azelőtt átirányítanám a júzert, mielőtt ezekből a feliratokból, képekből bármit is látna.
Akkor hogyan kéne megoldani szépen? -
Sk8erPeter
nagyúr
Hmm, akkor az a gáz, hogy ebben az esetben valamit nagyon át kéne írni az egész űrlapkezelésben.
Ez egyébként egy admin felület. Most egyelőre az a struktúrája a dolognak, hogy még a <html> kiírása előtt lecsekkolja, hogy az illető be van-e jelentkezve, ha igen, akkor megyünk tovább, ha nem akkor kirakja a bejelentkező formot, semmit nem is ír ki.
Elindít egy sessiont a session_start() fv.-nyel, stb...
Utána már kezdődik az oldal tényleges megjelenítése, és a középső részbe íratom ki a dolgokat, tehát már nem a headerben vagyunk, itt már nem adhatok ki header-re vonatkozó módosítgatásokat. Mindenképp ide kell jönnie a szövegnek, hogy sikeres blabla...
Itt következik a php-részben egy feltétel-ellenőrzés:1.) ha a $_POST üzenetek el vannak küldve, és minden adat megvan a megkövetelt elemek közül (kitöltötték, stb.), akkor megkísérlem feltölteni a fájlt, a megadott adatokat az adatbázisba, ha valamiért nem sikerül (pl. túl nagy a fájl), hibaüzeneteket íratok ki.
2.) ha a $_GET értékekbe elküldték már korábban (még egy form segítségével, aminél GET action van), hogy pontosan melyik elemhez is szeretnénk képet feltölteni, akkor azt megjelenítjük az adatbázisból, csak hogy látható legyen (megjelenítjük a már feltöltött adatokat, már fent lévő képet, stb.), itt jelenítjük meg azt a formot is, amivel konkrétan ki tudjuk választani a fájlt, amit feltöltünk!
3.) egyébként pedig megjelenítek egy formot (rádiógombokkal), amelyik tartalmazza a megfelelő szempontok szerinti ÖSSZES már meglévő elemet (csak egy kiskép és egy név van fent, ami utal rá, ez így a felhasználó számára egyértelmű), azok közül kiválaszthatjuk, melyikhez szeretnénk képet (és esetleg adatot) feltölteni.
Ez a struktúra így jól is van rendjén, jól is működik, a követelményeknek megfelelő, csak azt nem tudom, hogyan kellene úgy beilleszteni akkor ezt a SESSION-ös ellenőrzést úgy, hogy frissítés UTÁN ki tudjam íratni az adatokat, meg a sikerre utaló üzenetet, a headerben ez a rész NEM szerepelhet, mivel szükséges, hogy megjelenjen a fenti menü, stb...
MOST úgy csináltam meg azt, amiről beszéltünk, hogy az 1. részben miután konkrétan feltöltöttem az adatbázisba az adatokat, beteszem a $_SESSION['siker'] = true; értéket.
Aztán, ha mégis frissít a júzer, akkor van az a feltétel-ellenőrzés, hogy ez az érték true, akkor átirányít.Igazából már nem vágom, hogyan kellene akkor mégis szépen megoldani, hogy unset is legyen, átirányítás is legyen, és ne akarjon semmiféle POST adatot újból küldeni.
A jelenlegi működik, de így valóban kicsit gagyibb.
-
Sk8erPeter
nagyúr
Tökéletes!!
(nem is tudom, ez ebben a formában miért nem jutott eszembe már korábban
)
Az adatbázis feltöltése után betettem a $_SESSION['siker'] = true; sort, majd a fejlécbe, még a <html> cuccok elé betettem a header-re vonatkozó sort:if (true === $_SESSION['siker'])
header('Location: ', $_SERVER["PHP_SELF"]);és kipróbáltam, ha feltöltök, kiírja a szokásos sikeres feltöltés blabla szöveget, majd megnyomom a frissítést, a böngésző felteszi a szokásos kérdést, hogy még egyszer elküldöm-e a $_POST adatokat, és az OK-ra kattintva a kezdőoldal jön be.
Ja, és oda, ahol annak ellenőrzése zajlik, hogy megvan-e minden $_POST cucc, ami kell, betettem még azt a feltétel-ellenőrzést, hogyif ( //blabla...........
&& !isset($_SESSION['siker'])
)Nagyon köszönöm lezso6, sokat segítettél!
-
Sk8erPeter
nagyúr
Igaz, nem kell az egész sessiont destroy-olni, én is arra gondoltam egyébként, hogy $_SESSION['post'] vagy ehhez hasonló nevű változóba adom meg az értékeket. Ez így jó megoldás lenne?
Van egy űrlapom, ott elküldöm az értékeket, ugyanazon az oldalon fel is dolgozom őket, aztán szeretném, ha többé nem lehetne ugyanezeket az értékeket elküldeni frissítésnél.
No de akkor az konkrétan hogyan is néz ki?
$_SESSION['post'] = $_POST;
és aztán végül is mit csekkolok?(az oké, hogy aztán sikeres lefutásnál gondolom unset($_SESSION['post'])
Vagy mégis inkább pakoljam át külön php-fájlba a feldolgozást, és a form action-nél állítsam be annak az elérési útját? Igazából azért gondoltam arra, hogy ugyanazon az oldalon dolgozom fel az adatokat, hogy ha hiba van, tehát nem adtak meg minden szükséges értéket, akkor egyszerűen írja ki a form fölé a hibákat, aztán jelenítse meg ugyanúgy, a már megadott értékekkel (! hogy ne kelljen újra begépelni), ne kelljen mindig "vissza" linkekre kattogni hibánál.
Na de ha átirányítom az oldalt feldolgozás érdekében, akkor az eredeti oldalon hogy fog megjelenni a szükséges kimenet, ha a feldolgozás után ismét visszairányítás történik? -
Sk8erPeter
nagyúr
áá, bocs, nem vágom, hogy sikerült pont a lényeget lehagynom róla...
Arra gondoltam, hogy nem sima változónak, hanem egy SESSION-nek adod át a POST értékeit, aztán amikor megtörtént az adatbázis feltöltése, akkor meghívod a session_destroy() függvényt.
Ez így nem jó? Vagy hogyan kéne? (Huhh, mostanra már úgy összezavartam saját magamat, hogy azt se tudom, mit is akarok kihozni ebből.)
-
Sk8erPeter
nagyúr
Igen, ennek a függvénynek én is megörültem, mert korábban a levagdosással szenvedtem, ami sikerült is, de azért ez így jóval egyszerűbb megoldás.
Köszi, akkor ezeket majd kipróbálom, de időközben lenne egy másik probléma:
szeretnék korlátozást beállítani a feltölthető fájltípusokra, de valamiért csak akkor működik, ha az if feltételnél egyetlen szempontot adok meg, ha VAGY-olom a feltételeket ( || ), akkor már igazából semmilyen típust nem enged feltölteni, és ez így nem túl vicces.
Így írom be, egy feltétel esetén tökéletesen működik, csak a több feltétel esetén nem://Fájltípusra vonatkozó korlátozások
$tipus = $_FILES['uploaded']['type'];
if ($tipus == ('application/octet-stream' || 'application/zip' || 'application/x-msdownload' || 'text/css' || 'text/html' || 'text/plain' || 'message/rfc822'))
{
echo 'Ne tölts fel ilyen kiterjesztésű fájlt!<br />';
$ok=0;
}Mit ronthatok el?
-
Sk8erPeter
nagyúr
Valóban, akkor lehet, hogy mástól lestem el. De kézenfekvőnek tűnik a változó állapotának nyomonkövetése. Ez miért csak egyszerűbb szkriptekhez jó? Mármint mitől jobb a többi hibakezelő módszer? A változó állapotának követésénél is meg lehet adni, hogy ha az mondjuk 0, akkor legyen "return: false", stb... Tehát akkor végül is ez, amit Te is használsz, elvileg majdnem ugyanaz.
Kiterjesztés kiderítésére a pathinfo() függvényt találtam a legésszerűbbnek, így:
$target_dir = "upload/";
$target = $target_dir . basename( $_FILES['uploaded']['name']);
$akarmivaltozo = pathinfo('$target');
echo 'Kiterjesztés: '.$akarmivaltozo['extension'].'<br />';Akkor ezt az extension tömböt lehetne rakni a substr() függvénybe, hogy ily módon vágja le a kiterjesztést, így jó?
Vagy mondjuk astrrpos($target, '.');
is jónak látszik.
_________________
(#3045) cucka: kivételkezelés?
Ez miben más/jobb, mint a többi hibakezelés?
-
Sk8erPeter
nagyúr
Jahh, értem már, akkor így módosítottam az image változót:
$image = ($_FILES['uploaded']['tmp_name']);
Ezzel már megfelelően eléri?
Másik kérdés, hogy még a konkrét feltöltés előtt mindenféle fájltípusra, fájlméretre és egyebekre vonatkozó ellenőrzéseket végzek a fájlon, és egy $ok változóval jelzem, ha minden ok, utána mehet a feltöltés, tehát így (sztem ezt még Te javasoltad, h így érdemes):
if ($ok==0)
{
...valami gáz van...;
}
else
{
if (move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
...ezt meg ezt csináld, írd ki, hogy faszán sikerült feltölteni a fájlt...;
}
else
{
...írd ki, hogy nem jött össze, stb...;
}Nyilván az ellenőrzésnek, hogy létezik-e már a fájl, ezelőtt kéne lefutnia.
Ekkor tehát csak simán állítsam az $ok változót 1-re, miután a while ciklus az i változó növelgetésével, kiterjesztés levágásával, kiegészítő név hozzácsapásával lefutott?
Hogy fog mögékerülni a kiterjesztés, ha a move_uploaded_file függvénynek kéne utána következnie? Külön if-be tegyem be, hogy ha volt ilyen jellegű változtatás (kiterjesztés levágása), akkor a képtípustól függő kiterjesztést tegye mögé? -
Sk8erPeter
nagyúr
Jaaaaa
Oké, úgy látszik, késő van...
A feltöltés során mondjuk így adok nevet:$target_dir = "upload/";
$target = $target_dir . basename( $_FILES['uploaded']['name']);Milyen módon érem el bináris formában magát a képet?
____________________________________________________________________
Basszus, a fájltípusra vonatkozó kérdésem sztornó... Azt nem írtam, hogy próbáltam már a $_FILES tömbből elérni (ahogy írtad is), és ezt jól is tettem, azzal a kivétellel, hogy elcsesszintettem két karaktert a formon belül, az inputnak adott névnél, és emiatt nyilván nem működött...
Tehát így:
$tipus = $_FILES["uploaded"]["type"];
(na, és itt az uploaded helyett upload-ot írtam, és ezt jó ideig nem vettem észre
)
-
Sk8erPeter
nagyúr
Ezzel helyesen tudod megjeleníteni ATW-n is az UTF-8-as karakterkódolást?
Csak mert én már rákérdeztem ATW-nél, hogy mikor válik lehetővé ott az UTF-8-as kódolás helyes megjelenítése, miért csak az ISO-8859-2 kódolás megy, és ezt válaszolták:
"A karakterkódolás az ingyenes oldalaknál valóban csak ISO-8859-2 lehet. Ez régebbről maradt így a rendszer felépítése miatt, és több dolgon is módosítani kellene, hogy változzon. Idővel természetesen változni fog ez, egészen konkrétan az admin felületről lehet majd választani. Pontos időpontot erre most nem tudnék mondani."Ezek szerint mégis ki lehet ezt kerülni, és helyesen megjeleníteni az UTF-8-as kódolású weblapokat?
_______________
Még egy kérdés a képfeltöltéssel kapcsolatban: hogyan tudom olvasható formában kiíratni egy feltöltött kép típusát? Próbálkoztam párral, de eddig valahogy nem jött össze:
image_type_to_extension
image_type_to_mime_type
Persze lehet, hogy valami tök triviális dolgot rontok el, vagy valamire nem gondoltam.Köszi!
-
Sk8erPeter
nagyúr
Hali!
Bocsánat, csak most volt időm foglalkozni a dologgalKöszönöm a segítséget!
A dolog valamilyen oknál fogva nem működik jól:
ha létezik a fájl, létrehozza az új, kiegészített fájlnevet, de maga a kép csak az image változóban meghatározott számsorozatot tartalmazza (36 bájt, nyilván, mivel 36 szám (karakter) van benne).Egy-két alapdolog még nem teljesen tiszta számomra, ezért inkább megkérdezem:
1.) mi a szerepe az$image = '010101110101011010111010101011011110';
sornak?
A file_put_contents szerint ez hozzáfűzi ezt az infót a fájlhoz. Valóban, a tartalma ez lesz. Tehát ha megnézem magát a fájl tartalmát mondjuk szövegszerkesztővel, akkor benne ezt látom.
De ez mire jó jelen esetben? Csupán ennyit fog tartalmazni a fájl, semmi mást.Ebből következően a képet nem tudja megjeleníteni, mert arra vonatkozó infókat nem tartalmaz, hogy akkor hogyan is néz ki a fájl (ezt felülírja az image változóval a file_put_contents második paramétere).
2.) Jól értelmezem, hogy az alábbi sornál a strpos megkeresi azt a pozíciót, ahol a pont előfordul a fájlnévben, és a substr pedig a file változó legelejéről kezdve elmegy a pontig, és azt adja vissza eredményül?
$name = substr($file, 0, strrpos($file, '.')); // kiterjesztés levágása
Majd ha jól értem, a while függvényben szereplő cucc ehhez a névhez fogja hozzáfűzni a ".jpg" kiterjesztést.
Egyébként természetesen jpg kiterjesztésű fájllal próbáltam ki a dolgot. -
Tele von Zsinór
őstag
A php.net nem tud olyanról, hogy ob_get_end(), szerintem az ob_get_clean()-ra gondoltál.
Headerben azt mondod, hogy gzip tartalom jön, de sehol nem zömöríted.
Amúgy a hálózati forgalom csökkentésére jó, de általában nem ez szokott lenni a szűk keresztmetszet, inkább az adatbázis. -
fsockopen() függvénnyel:
(a függvények - kicsit átírva - a php.net-ről származnak)
<?php
/*
* A választ adja vissza fejlécek nélkül.
*/
function parseHttpResponse($content=null) {
if (empty($content)) { return false; }
// split into array, headers and content.
$hunks = explode("\r\n\r\n",trim($content));
if (!is_array($hunks) or count($hunks) < 2) {
return false;
}
$header = $hunks[count($hunks) - 2];
$body = $hunks[count($hunks) - 1];
$headers = explode("\r\n",$header);
unset($hunks);
unset($header);
if (!validateHttpResponse($headers)) { return false; }
if (in_array('Transfer-Encoding: chunked', $headers)) {
return trim(unchunkHttpResponse($body));
} else {
return trim($body);
}
}
/*
* Sikerült-e?
*/
function validateHttpResponse($headers=null) {
if (!is_array($headers) or count($headers) < 1) { return false; }
switch(trim(strtolower($headers[0]))) {
case 'http/1.0 100 ok':
case 'http/1.0 200 ok':
case 'http/1.1 100 ok':
case 'http/1.1 200 ok':
return true;
break;
}
return false;
}
/*
* ha darabolt az eredmény, akkor össze kell rakni, különben hülye számok és betűk jelennek meg a tartalomban
*/
function unchunkHttpResponse($str=null) {
if (!is_string($str) or strlen($str) < 1) { return false; }
$eol = "\r\n";
$add = strlen($eol);
$tmp = $str;
$str = '';
do {
$tmp = ltrim($tmp);
$pos = strpos($tmp, $eol);
if ($pos === false) { return false; }
$len = hexdec(substr($tmp,0,$pos));
if (!is_numeric($len) or $len < 0) { return false; }
$str .= substr($tmp, ($pos + $add), $len);
$tmp = substr($tmp, ($len + $pos + $add));
$check = trim($tmp);
} while(!empty($check));
unset($tmp);
return $str;
}
$host = "eu.wowarmory.com";
$file = "/guild-info.xml?r=Nordrassil&gn=Solidarity";
$user_agent_string = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1';
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
die("$errstr ($errno)<br />\n");
} else {
$out = "GET $file HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "User-Agent: $user_agent_string \r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$content = '';
while (!feof($fp)) {
$content .= fgets($fp);
}
fclose($fp);
}
echo parseHttpResponse($content); -
Balint133
aktív tag
igen megy... csak a nagy gondolkodasban azt felejtettem el h a page sourcet kell nezni nem pedig a kapott tartalmat ami egy nagy feherseg
nah, sikerult kiszednem mindent, vegulis nem azt a cirka 200 sornyi parse fuggvenyt hasznaltam amire aztmodntatok h oskorszaki lelet, hanem a DOM osztalyt hasznaltam, szoval a kodom most jelenleg (kiiratasra)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://eu.wowarmory.com/guild-info.xml?r=Nordrassil&gn=Solidarity");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
curl_setopt($ch, CURLOPT_ENCODING, "UTF-8");
$output = curl_exec($ch);
curl_close($ch);
$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML($output);
$params = $dom->getElementsByTagName('character');
foreach ($params as $param) {
echo $param -> getAttribute('name').'<br>';
}nos igy cURLel menne is a moka, viszont a cURL meg kb 2 honapig nem elerheto a szolgaltatomnal, szval go back to php.net es kinyalazom a linket amit kaptam
Orok halam sokat segitettel koszike.
-
Balint133
aktív tag
ő, várj azthiszem félreértjük egymást
eredeti link: itt
ez egy vmi dinamikus valami, ha itt rámész arra a böngészőben h: forráskód megtekintése, kidobja az xml filet, én innen mentettem le ayz xml-t file->save file nál
MOD: cURL-nél meg sajnos nem működik szintúgy, legalább azzal sikerülne.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://eu.wowarmory.com/guild-info.xml?r=Nordrassil&gn=Solidarity");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
curl_setopt($ch, CURLOPT_ENCODING, "UTF-8");
$output = curl_exec($ch);
curl_close($ch);egy amatőr kérdés: $output változó milyen visszatérési értéket ad? 'kompatibilis' az értéke az xml értelmezővel, vagy nézzek új fordító után?
-
Balint133
aktív tag
-
bejmuller
aktív tag
-
Balint133
aktív tag
szia, FTP sajnos kizárt, a 'klső' armory portálhoz nincs ftp hozzáférés sajnos
fopen()-el próbálkoztam, de sajnos nem az xml tartalmát adja vissza, hanem vmit az oldal forráskódjából.
ha pl letöltöm az xml filet a gépemre majd feltöltöm a http://endomainem.hu/xmlfileom.xml
ráuszítom az xml parsert az urlel, azt adja vissza amit kell és ahogy kell(ene).
[link]ha viszont http://endomainem.hu/xmlfileom.xml helyett beírom az armory portál linket:
"http://eu.wowarmory.com/guild-info.xml?r=Szervernév&gn=Guildnév"akkor ilyesmit kapok vissza:
[link]MOD: Neem, 5.2.8 azthiszem, majd még finomítgatok rajta, csak a hibalehetőségeket kellett kiszűrnöm, hogy mi miatt nem működik
-
Lusta vagyok megcsinálni, sokat kell konfigolni, meg az új gépnél is szakadozik a net, lehet a server 2008 r2 a baja, mert össze szokott veszni a routerral, s így az utóbbi gyakran elérhetetlen.
Restart segít csak (ami nagyon jó, mert pont azért raktam fel servert, mert nem szoktam leállítani a gépet
). De az már volt amúgy, s úgyis sz@r.
Post, upload max méret állításra valami?
-
Ejjj, ez a vmware alatti intrepid valamiért elég bugosnak tűnik, lehet ha csinálok egy újat akkor megjavul. A vmware sírt amikor újra beraktam virtuális gépet windows reinstall után, s ez a virtuális ubu server is elég fluktuáló módon kap internetet, de mellette van egy NATos virtuális hálókártya is, az meg megy rendesen.
Elég régi ez a maChina, szóval lehet nem a php a ludas, hanem a vmware vagy én. Csinálok egy másik vm-et oszt kiderül. -
Sk8erPeter
nagyúr
Ezek szerint az include ilyen durván lassítja a betöltést?
Ez nem túl jó, mert a baloldali menük miatt egy honlapon így oldottam meg, hogy ne kelljen mindenhol megismételni.
Végül is akkor észrevehető valamennyire a sebességbeli különbség olyan esetben, ha csak mondjuk a menüpontokat include-olom? -
Nagyon úgy néz ki, hogy az a 17 include 1 másodpercet vesz igénybe, amik Qrvára sok! Nyomok egy defragot, hátha segít...
Szerk:
Aha: 22.8kB adat 152 kB helyet foglal.
Szerk2:
egy másik szkriptem még több fájlt használ, de az nagyságrendekkel gyorsabb.
Viszont abban a fájlok osztályokat tartalmaznak, itt meg (nem echózott) HTML kódot, benne pár <?php echo $var ?> cuccal.Szerk3:
Ugyanolyan lassú hulladék töredezettség nékül is.
Ötlet?
-
Gyorsabb, memóriakímélő pufferelős módszer:
<?php
// fájlnevek
$in = 'bemenet.txt';
$out = 'kimenet.txt';
// fájlokat megnyit
$input = fopen($in, 'r');
$output = fopen($out, 'w');
// iterál
$i = 1;
while(! feof($input)) {
// sort beolvas
$line = fgets($input);
// páratlan sort beír a kimenetbe
if($i % 2 == 1) {
fputs($output, $line);
}
$i++;
}
// fájlokat bezár
fclose($input);
fclose($output);Az eredmény ugyanaz, csak ez szinte semennyi memóriát se eszik és jóval gyorsabb.
-
ArchElf
addikt
Én pont a múlt héten dobtam össze egy MSSQL-es session kezelést (tudom, hogy az IIS+PHP4+MSSQL már majdnem főbenjáró bűn - de ugye a megbízónak mindig igaza van
) Mondjuk ha megtaláltam volna ezt a függvényt, lehet, hogy megspórolok egy órát (bár ahogy nézem, egész máshogy oldottam meg a dolgot - igaz biztos nem lett ilyen szép, mint ezzel volna).
AE
-
ArchElf
addikt
Nem néz ki rossznak, csak sajnos az XDebug-ot nem tudtam belőni PHP4 alatt (nem akar betöltődni). Így ez valószínűleg felejtős lesz.
Amúgy az XDebug problémám:
zend_extension=”c:\php4\xdebug.dll” -> nem töltődik be, nem dob hibát
extension=”c:\php4\xdebug.dll” -> nem töltődik be, de hibát dob, hogy zend "módban" kell betölteni (ami érdekes, mert pl a DBG extension betöltéssel töltődik be zedn módba... ki érti ezt)Más:
NuSphere-t próbálgattam a hétvégén, ott megy a debug gond nélkül (PHP4 módban - vagy csak azt hazudja nekem?) Aptana-t letöltöttem, de nem volt időm kipróbálni.AE
Új hozzászólás Aktív témák
Hirdetés
- Milyen légkondit a lakásba?
- Macron betiltatná az EU-ban a közösségi médiát a 15 év alattiaknak
- Xiaomi 15 - kicsi telefon nagy energiával
- Kínai és egyéb olcsó órák topikja
- OLED TV topic
- Ez már a középkategória: teszten a GeForce RTX 5070
- DOOM - The Dark Ages
- Okosóra és okoskiegészítő topik
- One mobilszolgáltatások
- GTA VI
- További aktív témák...
- Dell Precision Workstation ultrabook 5560, 5550, 7510 i7, 6-11. gen. Nvidia 4k Touch, gar
- BESZÁMÍTÁS! ASUS ROG CROSSHAIR X670E GENE alaplap garanciával hibátlan működéssel
- PS5 konzolod megvásároljuk: Budapest, Kecskemét, Szeged, Debrecen vagy akár GLS futárt küldünk!
- REFURBISHED - HP USB-C Universal Dock G1 docking station (DisplayLink)
- Samsung Galaxy A32 4G 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged