Autor | Zpráva | ||
---|---|---|---|
needhelp Profil * |
#1 · Zasláno: 15. 10. 2008, 17:42:58
Ahoj, mám sloupec v tabulce db "registrováno" a potřebuji soubory zapsané v něm porovnat s reálnými soubory v adresáři, posléze vypsat soubory které jsou pouze v adresáři a ne v databázi. Napadá někoho rozumný postup jak toho docílit? Děkuji.
|
||
BetaCam Profil |
#2 · Zasláno: 15. 10. 2008, 17:46:52
needhelp
A co obsahuje ten sloupec DB?? |
||
nightfish Profil |
#3 · Zasláno: 15. 10. 2008, 17:48:59
„Napadá někoho rozumný postup jak toho docílit?“
načíst ze sloupce do pole načíst z adresáře do pole provést array_diff() s oběma poli vypsat výsledné pole |
||
needhelp Profil * |
#4 · Zasláno: 15. 10. 2008, 17:52:12
Sloupec DB není, to jsem se asi špatně vyjádřil, ale sloupec registrováno obsahuje např. soubor1.txt,soubor2.txt. Já potřebuji vypsat soubor3.txt, protoře není ve sloupci, ale v adresáři. Díky, pokusím se to dostat do polí.
|
||
needhelp Profil * |
#5 · Zasláno: 15. 10. 2008, 18:18:17
Tak skoro, nebyl problém dostat do pole všechny názvy souborů z db, ale mohl by mi ještě někdo prosím poradit jak tam dostat soubory z toho adresáře? Nějaké reaadir mi k tomu asi nepomůže.
|
||
BetaCam Profil |
#6 · Zasláno: 15. 10. 2008, 18:43:47 · Upravil/a: BetaCam
needhelp
„Tak skoro, nebyl problém dostat do pole všechny názvy souborů z db, ale mohl by mi ještě někdo prosím poradit jak tam dostat soubory z toho adresáře? Nějaké reaadir mi k tomu asi nepomůže.“ if ($handle = opendir('/directory/')) { $files = array(); while (false !== ($file = readdir($handle))) { if ($file != '.' OR $file != '..') { $files[] = $file; } } closedir($handle); } array_diff($files, $model->getFiles()); Za $model->getFiles() si dosad pole které si vytahnul z DB |
||
needhelp Profil * |
#7 · Zasláno: 15. 10. 2008, 19:10:58
if ($handle = opendir('/directory/')) {
$files = array(); while (false !== ($file = readdir($handle))) { if ($file != '.' OR $file != '..') { $files[] = $file; } } closedir($handle); } array_diff($files, $model->getFiles()); Warning: array_diff() [function.array-diff]: Argument #1 is not an array |
||
BetaCam Profil |
#8 · Zasláno: 15. 10. 2008, 19:23:04
needhelp
„Warning: array_diff() [function.array-diff]: Argument #1 is not an array“ No to znamená, že jeden z parametrů array_diff() není pole. V tomhle případě to bude $model->getFiles(). Říkal sem ti ať si to nahradíš polem kterým si vytáhl z DB. |
||
needhelp Profil * |
#9 · Zasláno: 15. 10. 2008, 19:25:58
No to znamená, že jeden z parametrů array_diff() není pole. V tomhle případě to bude $model->getFiles()
Argument #1 znamená že pro něj není polem ta první proměnná, ještě jsem si to ověřil tak že jsem tam použil i na druhm místě pro porovnání $files. |
||
needhelp Profil * |
#10 · Zasláno: 15. 10. 2008, 19:30:50
Pardon, teď zjišťuji že to možná neznamená problém v té první jak jsem si myslel, ale je ted divné že to neporovná dvakrát files. Zkoušel jsem tam hodit dvakrát to své pole z databáze a udělalo to to samé, tak nevím. :(
|
||
BetaCam Profil |
#11 · Zasláno: 15. 10. 2008, 19:42:37
needhelp
V prvním argumentu problém není protože to pole je na 100%. Hned na začátku se totiž inicializuje pomocí $files = array(); |
||
needhelp Profil * |
#12 · Zasláno: 15. 10. 2008, 19:49:20
Ok, můžeš se tedy prosím podívat ještě na tohle proč je v tom chyba?
$query=array(); $query = mysql_query("SELECT registrovano FROM tabulka"); list($query) = mysql_fetch_row($query); |
||
BetaCam Profil |
#13 · Zasláno: 15. 10. 2008, 20:06:24 · Upravil/a: BetaCam
needhelp
„Ok, můžeš se tedy prosím podívat ještě na tohle proč je v tom chyba? “ $result = mysql_query("SELECT registrovano FROM tabulka"); while($row = mysql_fetch_row($result)){ $filesdb[] = $row; } if ($handle = opendir('/directory/')) { $files = array(); while (false !== ($file = readdir($handle))) { if ($file != '.' AND $file != '..') { $files[] = $file; } } closedir($handle); } $compare = array_diff($files, $filesdb); var_dump($compare); |
||
needhelp Profil * |
#14 · Zasláno: 15. 10. 2008, 20:37:46
Jsem z toho jelen, zase jiná chyba :( :
Warning: array_diff() [function.array-diff]: Argument #1 is not an array in /home/free/ic.cz/s/adr/root/www/porovnanipoli.php on line 44 NULL |
||
BetaCam Profil |
#15 · Zasláno: 15. 10. 2008, 21:17:55
needhelp
„Jsem z toho jelen, zase jiná chyba :( : “ místo : $compare = array_diff($files, $filesdb); var_dump($compare); si dej : var_dump($files); var_dump($filesdb); $compare = array_diff($files, $filesdb); var_dump($compare); a podle toho zkontroluj které to pole je blbé nech si vypsat mysql_error(); jestli ti opravdu něco z té DB leze. |
||
nightfish Profil |
#16 · Zasláno: 15. 10. 2008, 21:47:33 · Upravil/a: nightfish
needhelp
místo /directory/ si musíš dat jméno svého adresáře... a asi těžko bude v rootu filesystému, takže bych to viděl spíš na ./directory a kdybys měl error_reporting na E_ALL, tak ti to zařve, že proměnná $files nebyla inicializována (pravděpodobně proto, že neprojde ten if, protože opendir skončí s chybou na neexistujícím adresáři) a kód while($row = mysql_fetch_row($result)){$filesdb[] = $row;} bych nahradil za while ($row = mysql_fetch_row($result)) {$filesdb[] = $row[0];} |
||
needhelp Profil * |
#17 · Zasláno: 15. 10. 2008, 22:11:05
directory jsem vymazal a je to prázdné, to mi v jiných scriptech funguje, jinak mi to na cokoliv hází že je to v SAFE Modu. Dal jsem si E_ALL a hází mi to Undefined variable: files. + to původní, Warning: array_diff() [function.array-diff]: Argument #1 ...........NULL
|
||
BetaCam Profil |
#18 · Zasláno: 15. 10. 2008, 22:14:18
needhelp
Tak neprojde ta podmínka takže máš blbně nastavenej adresář. Jak je umístěn ten adresář vůči scriptu kde máš tenhle kód?? |
||
needhelp Profil * |
#19 · Zasláno: 15. 10. 2008, 22:15:54
Pokud dám ./ , rozjede se to, hází to sice děsnou změť a nevim roč je výpis i s [4]=> těmito parametry, ale s tím se už dá něco dělat, moc díky!
|
||
needhelp Profil * |
#20 · Zasláno: 15. 10. 2008, 22:16:36
To je právě to zajímavé, soubor s tímto kódem je ve složce se kterou chci pracovat, což nejde a projde jedině ./
|
||
nightfish Profil |
#21 · Zasláno: 15. 10. 2008, 22:25:24
„roč je výpis i s [4]=> těmito parametry“
to je ten var_dump... když ho nahradíš za foreach ($compare as $v) echo $v."<br>"; tak to bude zřejmě to, co potřebuješ... „To je právě to zajímavé, soubor s tímto kódem je ve složce se kterou chci pracovat, což nejde a projde jedině ./“ pokud chceš aktuální adresář, tak tam zadej tečku . - nic víc, nic míň |
||
needhelp Profil * |
#22 · Zasláno: 15. 10. 2008, 22:28:24
Tečku ano, ale musí být s lomítkem jak jsem psal, jinak to hází chybu. :) ak jste mi opravdu moc pomohli, měl bych už jen poslední dotaz, pokud mám tohle a to samozřejmě obsahuje i .,.., adresáře, a podobně, jak mohu nadefinovat aby se tyto vybrané nezobrazovaly? Uměl bych to vyřezat "natvrdo" z textu, ale to se mi nezdá správné.
|
||
needhelp Profil * |
#23 · Zasláno: 15. 10. 2008, 22:30:59
Hodil jsem tam prostě if, díky! :)))
|
||
nightfish Profil |
#24 · Zasláno: 15. 10. 2008, 22:31:00
je třeba řádek
„if ($file != '.' OR $file != '..') {“ opravit na if ($file != '.' && $file != '..') { |
||
BetaCam Profil |
#25 · Zasláno: 15. 10. 2008, 22:47:40
nightfish
„je třeba řádek „if ($file != '.' OR $file != '..') {“ opravit na if ($file != '.' && $file != '..') {“ Koukám že takhle po večeru už bych neměl nic psát. Sekám tam chyb jak máku. :) |
||
Časová prodleva: 17 let
|
0