Autor Zpráva
needhelp
Profil *
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
needhelp

A co obsahuje ten sloupec DB??
nightfish
Profil
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 *
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 *
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
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 *
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
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 *
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 *
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
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 *
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
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 *
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
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
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 *
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
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 *
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 *
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
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 *
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 *
Hodil jsem tam prostě if, díky! :)))
nightfish
Profil
je třeba řádek
if ($file != '.' OR $file != '..') {
opravit na
if ($file != '.' && $file != '..') {
BetaCam
Profil
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. :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0