Рандом файл от папка

HunteR

Super Moderator
Например имам папка с txt файлове.
Трябва ми да изкарва рандом файл от всички файлове в тази папка.
Как е кода?
 
Код:
<?php
$dir = "papkata";
$scan = scandir($dir);
$count = count($scan)-1;
$random = rand(0,$count);
echo "$dir/$scan[$random]";
?>
 
А как ще се направи така.
ако например в тази папка има и други папки да изкарва и от там файлове, без имената на папките само рандом файл дори и от другите папки!?
 
mizarck каза:
Код:
<?php
$dir = "papkata";
$scan = scandir($dir);
$count = count($scan)-1;
$random = rand(0,$count);
echo "$dir/$scan[$random]";
?>

това изкарва само името на файла ... не може ли да го изкарва ако е мп3 като линк , ако е снимка.. като снимка ама по малка ?!
 
HunteR
аз само за този начин се сещам
Код:
<?php
$dir = "papkata";
$scan = scandir($dir);
$count = count($scan);
$random = rand(0,($count-1));
for($i=0;$i<$count;$i++)
{
	if ($scan[$i] != "." && $scan[$i] != ".." && is_dir("$dir/$scan[$i]"))
	{
		$dirs[] = $scan[$i];
	}
}
$c = count($dirs);
for($q=0;$q<$c;$q++)
{
	$v = scandir("$dir/$dirs[$q]");
	$g = count($v);
	$g = rand(0,$g);
	$g = $v[$g];
	$rand[] = $g;
	$g = '';
}
$cc = count($rand);
echo "$scan[$random]<br>";
for($r=0;$r<$cc;$r++)
{
	echo "$rand[$r]<br>";
}
?>

Cek0Ff
Може разбирасе ти си избираш какво да ти пише в echo-то
$scan[$random] - ти е името на файла с разширението
$dir ти е папката
 
за произволна картинка
Код:
<?php
$dir = "papkata";
$scan = scandir($dir);
$count = count($scan)-1;
$random = rand(0,$count);
echo "<img src=\"$dir/$scan[$random]\">";
?>


ако ти трябва някой по специален код пиши
 
mizarck каза:
HunteR
аз само за този начин се сещам
Код:
<?php
$dir = "papkata";
$scan = scandir($dir);
$count = count($scan);
$random = rand(0,($count-1));
for($i=0;$i<$count;$i++)
{
	if ($scan[$i] != "." && $scan[$i] != ".." && is_dir("$dir/$scan[$i]"))
	{
		$dirs[] = $scan[$i];
	}
}
$c = count($dirs);
for($q=0;$q<$c;$q++)
{
	$v = scandir("$dir/$dirs[$q]");
	$g = count($v);
	$g = rand(0,$g);
	$g = $v[$g];
	$rand[] = $g;
	$g = '';
}
$cc = count($rand);
echo "$scan[$random]<br>";
for($r=0;$r<$cc;$r++)
{
	echo "$rand[$r]<br>";
}
?>
То това добре ма защо изкарва рандом файлове колкото са папките.
Аз искам само 1, но и да проверява и файловете в папките на главната папка(май много папки станаха ма... :) ).
 
HunteR
първия път явно не съм те разбрал
ако сега правилно съм те разбрал значи ти трябва този код

Код:
<?php
$dir = "papkata";
$scan = scandir($dir);
$count = count($scan);
$random = rand(2,($count-1));
$random = $scan[$random];
$rand[] = $random;
for($i=2;$i<$count;$i++)
{
   if ($scan[$i] != "." && $scan[$i] != ".." && is_dir("$dir/$scan[$i]"))
   {
      $dirs[] = $scan[$i];
   }
}
$c = count($dirs);
for($q=0;$q<$c;$q++)
{
   $v = scandir("$dir/$dirs[$q]");
   $g = count($v);
   $g = rand(0,$g);
   $g = $v[$g];
   $rand[] = $g;
   $g = '';
}
$cc = count($rand)-1;
$cr = rand(0,$cc);
echo "$rand[$cr]";
?>
 
HunteR каза:
А защо по някога ми изкарва това, а не файл: ".."
явно защото не се филтрира
сега ще се опитам да го оправя

EDIT:
ето кода
Код:
<?php
$dir = "papkata";
$scan = scandir($dir);
$count = count($scan);
$random = rand(2,($count-1));
$random = $scan[$random];
$rand[] = $random;
for($i=2;$i<$count;$i++)
{
   if ($scan[$i] != "." && $scan[$i] != ".." && is_dir("$dir/$scan[$i]"))
   {
      $dirs[] = $scan[$i];
   }
}
$c = count($dirs);
for($q=0;$q<$c;$q++)
{
    $v = scandir("$dir/$dirs[$q]");
    $g = count($v)-1;
    $g = rand(2,$g);
    if (!is_dir("$dir/$dirs[$q]/$v[$g]"))
    {
		$g = $v[$g];
		$rand[] = $g;
    }else
    {
		$g = rand(2,$g);
		$g = $v[$g];
		$rand[] = $g;
    }
    $g = '';
}
$cc = count($rand)-1;
$cr = rand(0,$cc);
echo "$rand[$cr]";
?>
 
Добре сега добре не изкарва онези точки, но защо изкарва и имената на папките.Казах само да рови из тях и да изкарва файл, а не и имената им ;)
Едит: Забелязах, че когато в главната папка която съм задал има и под папки не ги изкарва, но има ли в тези под папки други под папки тях ги изкарва :)
Ама това не е проблем мерси и така ме устройва :)
 
HunteR каза:
Добре сега добре не изкарва онези точки, но защо изкарва и имената на папките.Казах само да рови из тях и да изкарва файл, а не и имената им ;)
Едит: Забелязах, че когато в главната папка която съм задал има и под папки не ги изкарва, но има ли в тези под папки други под папки тях ги изкарва :)
Ама това не е проблем мерси и така ме устройва :)
оправих проблема да не изкарва имената на папките в главната папка
както и да не изкарва точките
кода рови само в главната папка и до една под папка в нея
разбирасе може да има безброй пад папки но не и под под папки
ако ме разбираш
пак ще прегледам и тествам кода и ще го оправя ако забележа проблем
 
Аз мисля че забелязах проблем.
Значи гледай сега.
Например задал съм да търси в някаква папка и в нея има някакав файл например "file_1".
Така гледай сега какво става като натискам рефреш.
По някога ми изкарва
Код:
file_1
А по някога ми изкарва
Код:
file_1file_1
Като имаме в предвид, че файла е само 1.
 
ммм при мен си бачка идеално
но щом казваш че го парави тоз проблем утре като се наспа ще го напиша наново
 
Еми незнам изкарва рандом файл.
Но вместо да е само file_1 то е например file_1file_1
 
Забелязах, че проблема е в мен ;) Сори, но иначе май пак изкарва имената на папките.
 
Добре значи по тази тема имам само последен въпрос.
Значи да кажем, че в променливата $files имам няколко файла.
Как да изкарам рандом само 1 от тези файлове?
 
HunteR каза:
Добре значи по тази тема имам само последен въпрос.
Значи да кажем, че в променливата $files имам няколко файла.
Как да изкарам рандом само 1 от тези файлове?
ако променливата е масив така
Код:
<?php
$files = array("file1","file2","file3","file4");
$c = count($files)-1;
$r = rand(0,$c);
echo "$files[$r]";
?>

ако са разделени с някакав знак или разтояние значи така
Код:
<?php
$files = "file1|file2|file3|file4";
$e = explode("|",$files);
$c = count($e)-1;
$r = rand(0,$c);
echo "$e[$r]";
?>
 
ОК ще се опитам да се справя мерси пак :)
Аз иначе съм ти дал точка ;)
 

Back
Горе