Sziasztok!
Van egy windows XP pro sp3 XAMPP szerver és szintén van ugyenezen a gépen agy easy-php 5.3.0
A böngésző lehal ennek a függvénynek a futtatásánál (tölt-tölt-tölt, felzabálja a memóriát és lefagy):
function uresKonyvtar($kvt_nev)
{
$i = 0;
$kvt = opendir($kvt_nev);
while( ($fajl = readdir( $kvt ) ) !== false )
{
if(($fajl != ".") && ($fajl != ".."))
$i++;
}
if($i!=0)
{
return false;
}
else
{
return true;
}
}
De nem mindig hal meg, mert tegnap este ment rendesen :) Nem értem mi lehet a gond.
Ezt a XAMPP-on és az EasyPHP-n is csinálta, de az otthoni szintén EasyPHP 5.3.0 szerveremen meg megy minden rendesen (XP Home SP2)
Könyvtárjogosultsági gond nem lehet, mert hol működik, hol nem.
Mindig meghagyom a szkriptjeim korábbi verzióit is és érdekes módon, amikor egy újonnan feltöltött könyvtárlekérdező szkriptet futtatok (még ha 1 bájtot sem változott a régi verzióhoz képest), akkor ez a probléma jelentkezik, de a már korábban fennlévő szkript meg lefut rendesen.
Láttatot már ilyet?
Vagy van más, erőforrástakarékosabb módszer arra, hogy megállapítsuk, hogy egy könyvtár üres-e? Könyvtár lekérdező függvényt nem találtam a PHP dokumentációjában, de találtam a neten egy az enyémhez hasonló függvényt, mely megszámolja a fájlokat és lekéri azoknak a méreteit, de akkor meg ugyanott tartok, mert nagyon sok könyvtárnak a méreteit kell lekérdeznek egyszerre.
Mi lehet a baj?
Köszi.
MysteryKe.
- 2117 megtekintés
Hozzászólások
Aztarohadt... ez a kódrészlet nagyon fáj.
public static function isEmptyDir($dir){
return (($files = @scandir($dir)) && count($files) <= 2);
}
- A hozzászóláshoz be kell jelentkezni
+sok (pedig én nem értek az ilyen magasszintű nyelvekhez, de ezen fél órája csak pislogok)
- A hozzászóláshoz be kell jelentkezni
Ami a legrosszabb, hogy a php.net is tele van ilyen examplekkel :)
- A hozzászóláshoz be kell jelentkezni
ebben megallapodtunk, hogy ugyan rovid es elegans, viszont nem jo, mert sok fajlnal megeszi a ramot
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
Akkor végre tudom, milyen néven vagy irc-n :)
- A hozzászóláshoz be kell jelentkezni
Ne orulj, mert idonkent a hupos nickje moge is bebujik.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Mivan?
- A hozzászóláshoz be kell jelentkezni
Szerda.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
mi a baj vele? a logikája szerintem rendben van :)
- A hozzászóláshoz be kell jelentkezni
Először is. Neve szerint és visszatérési értéke szerint ez a függvény ara lett kitalálva, hogy megmondja, hogy a könyvtár üres-e. Ennek ellenére elkezded számolni a fájlokat. Hogy minek, azt a jóég tudja, mert sehol nem használod fel. Ergo, az első $i++ helyett már ki is lehetne lépni false-val. De nem, megszámoljuk, aztán még kanyarítunk egy ilyet:
if ($i == 1) return 1;
if ($i == 2) return 2;
if ($i == 3) return 3;
if ($i == 4) return 4;
if ($i == 5) return 5;
...
Ugye érzed a fájdalmat?
- A hozzászóláshoz be kell jelentkezni
cool
- A hozzászóláshoz be kell jelentkezni
akkor te ne programozz :)
- A hozzászóláshoz be kell jelentkezni
function is_empty_dir($path)
{
$dir = opendir($path);
while(($f = readdir($dir) ) !== false )
{
if(($f != ".") && ($f != ".."))
return false;
}
return true;
}
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
A closedir() marad le, így nyitva marad az erőforrás.
- A hozzászóláshoz be kell jelentkezni
Mit tippelsz, meddig marad nyitva?
- A hozzászóláshoz be kell jelentkezni
Nyilván lehet hanyagul a rendszerre bízni ezeket (és most rugaszkodjunk el a konrét és egyszerű példátol), de nem biztos, hogy kifizetődő. Szerintem jobb megszokni egy mindenhol érvényes módszert, és ezért tettem megjegyzést a kódhoz. Akinek el kell magyarázni/meg kell mutatni hogyan kell eldönteni, hogy egy dir üres-e vagy sem, annak mutassunk jópéldát azzal, hogy bezárjuk a megnyitott erőforrást.
- A hozzászóláshoz be kell jelentkezni
+1
Nagyon hasonlot akartam en is reagalni, csak nem volt ra idom. Nagyon le tudom tojni azt, hogy a PHP/Perl/Ruby/akarmi mikor es hogy zarja be, ha en ilyen kodot kapok, visszadobom, mert ez hanyag kodolas. Aki ilyent megenged maganak, annak a kodjait mindig at kell nezni.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Hú, most mi lesz. Azt kellene megérteni, hogy ez egy példa kód. Az sincs ellenőrizve, hogy az útvonal amit megadunk egyáltalán könytár-e. Itt az volt a cél, hogy könnyen látható legyen a lényeg, ne kelljen kibogozni a sok jelen pillanatban fölösleges kódbol.
- A hozzászóláshoz be kell jelentkezni
Latszik, hogy te meg nem dolgoztal olyan cuccal, aminel nincs automatikus close, kulonben megszoktad volna, hogy mindig mindent le kell zarni. Peldaul:
10 OPEN 2,8,2,"TESTFILE,SEQ,WRITE"
20 PRINT#2,"TEST STRING"
30 END
Eredmeny: folyamatosan zolden vilagito disk drive, ha megpiszkalod (peldaul kiveszed a disket) akkor ervenytelen fajl lesz a vege, es nem garantalt, hogy az adat kiment a diskre (sot, altalaban nem is megy ki). Na, en itt szoktam meg, hogy az open mindig magaval vonzza a close szuksegesseget.
Es pedig ez is csak egy pelda kod volt, meg azt sem ellenorzom benne, hogy a fajl nem letezik-e esetleg mar.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Látszik, hogy te mindig mindent jobban tudsz másokrol, mint ő maguk. Jobban ismersz engem, mint én magamat, így most már tudom, hogy nem szabad lezárnom a nyitott descriptorokat, hisz hrgy84 megmondta. A példakódot sem én írtam, én csak megvédtem, hogy ez egy példakód. De nyugodtan kapálózz tovább, és hozz fel még pár folosleges érvet az igazad mellett. Mert igazad van, sehol nem írtam, hogy nem, csak még mindig fölöslegesek ezek a bizonyítgatások.
- A hozzászóláshoz be kell jelentkezni
Felreertettel, illetve felreertettuk egymast. Eloszor is, en nagyon keves ervet tudok elfogadni a hanyagsag mellettt, marpedig a nyitott descriptorok le nem zarasa mindenkeppen hanyagsag, ebben valoszinuleg egyetertunk.
Masodszor, en vagyok olyan ordas nagy marha, hogy mindig magambol indulok ki. En nem engedem meg magamnak, hogy egy pelda kod elfogadhato ok nelkul ilyen banalis hibatol szenvedjen (gyakorlatilag tenyleg egy sor kerdese, nem faradsag odairni, hogy closedir($fh);). Lehet, hogy masnak nem ilyen az attitudje sajat magaval kapcsolatban, nekem ilyen. Igyekszem sokat elvarni magamtol, mert masok is sokat varnak el tolem.
Harmadreszrol pedig abban viszont neked van igazad, hogy tulreagaltam a dolgot. Sajnalom.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Figyelmetlenség, mert általában mindig le szoktam zárni azt, amit megnyitok. De hátha mentség :D --> http://hup.hu/cikkek/20100322/tiny_core_2.10#comment-986852
- A hozzászóláshoz be kell jelentkezni
Oooo... :confused:
Most akkor te vagy mn3monic?
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
?
- A hozzászóláshoz be kell jelentkezni
Ez nem hanyagság, hanem éppen hogy megkímél a felesleges kódsoroktól. Ha tudjuk, hogyan működik egy rendszer, akkor azt úgy kell programozni, ahogy elvárja és ahogy megengedhető. Ha tudjuk, hogy lezárja a megfelelő időben, akkor jó programozók vagyunk, mert többlettudásunk van és azt alkalmazzuk is. Ha meg mechanikusan csináljuk, a te jógyerek-robot elvárásod szerint, az szörnyű.
- A hozzászóláshoz be kell jelentkezni
Igazad van, es nincs. Igazad van, mert valoban, van az embernek egy tobbletttudasa. Es nincs, mert a programozasi standardokat nem azert hasznaljak emberek, mert hulyeseg. Ennyi erovel sose szabaditsuk fel a memoriat, mert ha a program kilep, ugyis felszabadul, nem? Meg egyaltalan, szarjunk az egesz kodbiztonsagra, hiszen a rendszer ugyis gondolkodik helyettunk, mi koncentraljunk csak a feladatra, nem vagyunk mi jogyerek-robotok! Pfffff...
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
amugy a rendszer gyorsabban szabaditja fel a memoriat, szoval olvastam mar pedzegetest, hogy a kod futasanak a vegen neha elonyosebb nem egyesevel az alkalmazasbol felszabaditani a memoriat, hanem rabizni az OS-re, o egybe ki tudja kukazni a teljes az alkalmazas altal foglalt memoriat.
Tyrael
- A hozzászóláshoz be kell jelentkezni
Mi garantálja azt, hogy ez a következő verzióban is így fog működni? Bár nem valószínű, de láttam már karón varjút. Ha azt gondoljuk, hogy, majd a program lezárja mert így működik, akkor megfeleltkezünk a "most még" kifejezésről, és bár lehet fáradságos lezárni kézzel, mégis nagyobb százalékos esélyünk van arra, hogy az a következő frissítéskor is lezáródik.
- A hozzászóláshoz be kell jelentkezni
jogos!
function is_empty_dir($path)
{
$dir = opendir($path);
while(($f = readdir($dir) ) !== false )
{
if(($f != ".") && ($f != "..")) {
closedir($dir);
return false;
}
}
closedir($dir);
return true;
}
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
csak hogy en is irjak valamit:
http://www.php.net/manual/en/class.directoryiterator.php
http://hu.php.net/manual/en/function.glob.php
kenyelmesebb.
Tyrael
- A hozzászóláshoz be kell jelentkezni