Kiskalóz Posted May 25, 2011 Posted May 25, 2011 Ennyi az össz. kód: <?php $x=33400; $x=$x/1024; echo printf("%.2f\n", $x); ?> És ez a kimenet forrása: 32.62 6
arpsoft Posted May 25, 2011 Posted May 25, 2011 Az echo és a printf páros lesz a ludas. Szerintem kiírja az echo, hogy a printf hány karaktert küldött ki a kimenetre, mert hogy ezt adja vissza a printf.
Kiskalóz Posted May 25, 2011 Posted May 25, 2011 Így is ugyan az a helyzet: <?php $x=33400/1024; $x=printf("%.2f\n", $x); echo $x; ?>
kléni Posted May 25, 2011 Posted May 25, 2011 használd a sprintf() függvényt. a printf() függvény alapból kiírja, nem kell echo.
arpsoft Posted May 26, 2011 Posted May 26, 2011 Mondjuk én az echo-t hagytam volna el, de így sem rossz.
payskin Posted June 6, 2011 Posted June 6, 2011 PHP Manual: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. Ha nem mutatóként adod át, akkor másol. Ennek neki kellene futni még egyszer... Hogyan lehet referencia szerint megadni egy tömböt, ha az alábbira foreach(&$array as $key => $value) azt mondja, hogy Parse error: syntax error, unexpected '&' in akármi.php on line 947 Vagy félreértjük a dolgot, és a fenti (ez esetben meglehetősen szerencsétlenül megfogalmazott) mondat magára a foreach 2-3. paraméterére vonatkozik, amennyiben a $key => $value nem a tényleges $kulcs és $érték, hanem azok másolatai. Ez esetben azonban nincs szó arról, hogy a foreach kétszer annyi helyet foglalna (aka lemásolja a tömböt), hanem csak a tömb éppen aktuális elemeit másolja. Mert arra van példa a doksiban is, hogy foreach ($assray as $key => &$value) Mely esetben a $value ténylegesen az $array tömb egy eleme. Szóval, konfúz.
arpsoft Posted June 7, 2011 Posted June 7, 2011 Ki nem próbáltam, de elvben mûködnie kell. <?php function foo(&$array) { foreach($array as $key => $value) { ... } } ?>
Pjotr Posted June 7, 2011 Posted June 7, 2011 Nálam ilyen hal le 5.2.akárhányas PHP mellett, 5.3.akárhányon hibátlan.
payskin Posted June 7, 2011 Posted June 7, 2011 Ki nem próbáltam, de elvben működnie kell. Működni működik, de ez a foo-nak adja át referenciaként a tömböt, nem a foreach-nek. Ettől még a foreach ugyanúgy nem referenciaként kapja (és "lemásolja", ha lemásolja). Elküldtem a kérdést programozó ismerősöknek, remélem, hogy rábólintanak. (Rosszabb esetben számukra is revelációértékű lesz.) --- Programozó ismerősök vakarják a fejüket és vitatkoznak. Az egyik villantott egy olyan példát, amelyben van egy 10 elemű tömbünk, amin elindulunk foreach-csel, és amikor az első elemhez érünk, kitörlünk belőle 5 elemet. A foreach végigmegy az eredeti 10 elemen. WTF. Erre azt mondja a másik, hogy a PHP-ban minden referencia szinten megy, egy $a = $b is ugyanarra a memóriaszeletre "mutat", egészen addig, amíg valamelyiknek meg nem változtatjuk az értékét, amikor is a megváltoztatott új memóriaszeletet kap. Tehát simán lehet, hogy a fenti példában egészen addig ugyanazokon a memóriaszeleteken ugrál a foreach, amíg el nem kezdjük kitörölni a tömb hátsó elemeit, amikor is elágazik a két történet. A harmadik azt mondja, hogy régen futott bele foreach-csel memória problémába, míg a while simán végigfutott a tömbön.
KGigi Posted June 7, 2011 Posted June 7, 2011 Neeeee. Ha addig nem oldódna meg, július 6-a után nekiesem ennek. Legutóbb a C# memóriakezelésével játszottam el, az is szeret érdekes dolgokat produkálni.
riskawarrior Posted June 7, 2011 Posted June 7, 2011 Erre azt mondja a másik, hogy a PHP-ban minden referencia szinten megy, egy $a = $b is ugyanarra a memóriaszeletre "mutat", egészen addig, amíg valamelyiknek meg nem változtatjuk az értékét, amikor is a megváltoztatott új memóriaszeletet kap. Tehát simán lehet, hogy a fenti példában egészen addig ugyanazokon a memóriaszeleteken ugrál a foreach, amíg el nem kezdjük kitörölni a tömb hátsó elemeit, amikor is elágazik a két történet. +1 A PHP on-the-fly másol, ha lemásolsz egy változót az valójában csak akkor másolódik ha valamelyiket módosítod. Régen így volt, kétlem, hogy egy ilyen remek dolgot kivennének a késõbbi verziókból.
kléni Posted June 16, 2011 Posted June 16, 2011 Egy olyat szeretnék elérni, hogy localhostról egy külsõ szerver adatbázisához csatlakozok. Ilyen lehet, és csak nekem nem sikerül a google segítségével sem?
Kiskalóz Posted June 16, 2011 Posted June 16, 2011 A külsõ szerveren engedélyezve van a mysql távoli hozzáférés?
Kiskalóz Posted June 22, 2011 Posted June 22, 2011 Egy meglehetõsen érdekes problémába futottam bele. Fejlesztek 1 weboldalt.. nem az éles oldalon hanem egy al mappában (akarmi.hu/xy) Amikor készen voltam kérték hogy töltsem fel az éles oldalra. Na itt jöttek a galibák. Az összes inculde nem mûködött. Minden include-ot az indexre kell betenni. Aztán ami még jobban idegesít, hogy nem mûködik az is_file() függvény. Ugyanis ezzel hívom be az al oldalakat. Most kénytelen voltam megoldani egy sima isset() ellenõrzéssel.. Ráadásul eddig az index.php oldalhoz tudtam állítani a mappahivatkozásokat.. de miután áttettem az éles oldalra már az adott fájl helyéhez képest kell hivatkozni. A szerver Win 2008 és IIS. Ha van valakinek valami jó ötlete az jelentkezzen.
payskin Posted June 22, 2011 Posted June 22, 2011 PHP doksiban is_file-nál írja valaki: I have noticed that using is_file on windows servers (mainly for development) to use a full path c:\ doesn't always work. I have had to use C:/foldertowww/site/file.ext so I preform an str_replace('\\', '/', $path) Sometimes I have had the \ instead of / work. (this is using apache2 on XP) but for sure you cannot have mixed separators. Hátha. Nálunk az include-oknál relatív mappahivatkozások vannak (includes/classes/akarmi). Ennek nyilván feltétele, hogy php csak a weboldal gyökérkönyvtárából fut, így ahhoz képest működik a relatív hivatkozás.
Kiskalóz Posted June 22, 2011 Posted June 22, 2011 Sejtem én is hogy win és az IIS lesz a ludas (még soha nem használtam ijjet).. de fõleg azt nem értem hogy egy mappával beljebb miért mûködik..
Kiskalóz Posted June 22, 2011 Posted June 22, 2011 Na most nem értem mire gondolsz.. de inkább leírom a konkrétumokat: index.php: if(is_file("pages/".$_GET['s'].".php")){ include("pages/".$_GET['s'].".php"); }else{ include("pages/main.php"); } Mondjuk "?s=akarmi" akarmi.php tartalma: if(!isset($_GET['d'])) $_GET['d']="xy"; if(is_file("pages/akarmi/".$_GET['d'].".php")){ include("pages/akarmi/".$_GET['d'].".php"); } Tehát ha meghívod a "?s=akarmi" -t akkor az akarmi mappából vagy kiválasztja a default oldalt ha nincs $_GET['d'], vagy a $_GET['d']-nek megfelelõ oldalt szintén az akarmi mappából include-olja be. remélem érthetõen írtam le
payskin Posted June 22, 2011 Posted June 22, 2011 Persze, de szemlátomást mégsem /xy-nal adod meg a hivatkozást, amit arpsoft kérdezett... Végül is részletkérdés, ha nem működik. Milyen hibát dob?
Kiskalóz Posted June 22, 2011 Posted June 22, 2011 Semmilyent.. egyszerûen nem hozza be az oldalt hanem a default (main.php) oldalt hívja be. De amikor ezt: if(!isset($_GET['d'])) $_GET['d']="xy"; if(is_file("pages/akarmi/".$_GET['d'].".php")){ include("pages/akarmi/".$_GET['d'].".php"); } Átírom erre: if(!isset($_GET['d'])) { $_GET['d']="xy"; include("akarmi/".$_GET['d'].".php"); } Akkor mûködik.
Pjotr Posted June 22, 2011 Posted June 22, 2011 Az is_file() hamisat ad vissza, mert nem mûködik relatív hivatkozással. Kérdezd le a DOCUMENT_ROOT-ot, és azzal konkratenáld össze jól (szeparátorok) az átadott paramétert, és utána ellenõrizd.
Kiskalóz Posted June 22, 2011 Posted June 22, 2011 Eredmény:E:\web\xy Ok.. már csak azt nem értem.. hogy egy mappával beljebb miért mûködött? Ekkora különbség van hogy gyökérben használod vagy nem?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now