Задачка / закачка

smile4o

Registered
Привет на всички, от скоро се опитвам да понауча туй онуй за това, що е то PHP и имали почва в моята глава. Та за това се извинявам ако въпроса ми е тривиален за някои. Задачата е следната:
имам си работна папка в, която си слагам документите които съдъжат скриптовете които уча. В тази папка слагам друга папка с име files например. Която съдържа множество папки и файлове от различен вид (txt, gif, jpg, html, и т.н.). Искам да направя array, който да съдържа всичко което съдържа и папка files и то да бъде подредено при повикване. Ако някой може да даде съвт или насока ще съм благодарен.
 
Нещо такова ли?
Записваш го във файл с разширение .php
<?php
$path = "files";
$dh = opendir($path);
print "Съдържание на $path<br>";
while (($file = readdir($dh)) !== false) {
if ( $file != "." && $file != ".." ){
$files = @fopen("$path/$file", "r");
if ($files){
echo "<a href='$file'>$file</a><br>";
}
}
}
closedir($dh);
?>
 
Нещо подобно, но трябва да е в масив и да се използва array. И точно тук започвам да давам заето.
 
Виж дали така става
Код:
<?php
$path = "files";
$dh = opendir($path);
print "Съдържание на $path<br>";
while (($file = readdir($dh)) != false) {
if ( $file != "." && $file != ".." )
{
$files = @fopen("$path/$file", "r");
if ($files)
{
$arr = "'$file', ";
}
}
}
closedir($dh);
$arr = trim($arr);
$substr = substr("$arr", "0", "2");
$array = array($arr);
?>

ползвам примера на Galli защоно не съм много запознат с тази функция
 
mizarck каза:
Виж дали така става
Код:
<?php
$path = "files";
$dh = opendir($path);
print "Съдържание на $path<br>";
while (($file = readdir($dh)) != false) {
if ( $file != "." && $file != ".." )
{
$files = @fopen("$path/$file", "r");
if ($files)
{
$arr = "'$file', ";
}
}
}
closedir($dh);
$arr = trim($arr);
$substr = substr("$arr", "0", "2");
$array = array($arr);
?>

ползвам примера на Galli защоно не съм много запознат с тази функция

така като гледам, не работи.

едит:
я, Бафито ме изпревари :)
 
еми най-обикновен скрипт с 2-3 функции не повече и една за сортиране.
<?php
if ($handle = opendir('files')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$masiv[] = $file;
}
}
closedir($handle);
}
natsort($masiv);
print_r($masiv);
?>

използвал съм natsort щото мисля , че е най приемлива в случая.
 
Здравейте, отново. bafitu е най-близо, за което благодаря. Но, за съжаление не се получава и при него. Извиква само основната папка която е упомената:

Array ( [0] => files )

Идеяате в този array, да се вкара цялото съдържание на папката и като бъде извикан да го показва на екран. Според мен би трябвало да изглежда горе долу така:

Array
(
[files] => Array
(
[another folder] => Array
(
[0] => blank.gif
[1] => style.css
[2] => repos.gif
[3] => logohead.jpg
[4] => barrels.gif
[5] => over.gif
[6] => usf.gif
[7] => logo.png
)



и т.н. и т.н Аз опитах да сглобя нещо подбно като съвета на bafitu, но засега нямам упех. Но все пак искам да благодаря на всеки отзовал се.
 
И съдържанието на под папките ли имаш в предвид ?

виж така:

Код:
<?php
 function show($dir){
global $file; 
$directory = opendir($dir); 
while ($files = readdir($directory)){
if (($files != "..") AND ($files != ".")){
	$path = $dir.'/'.$files; 
	if (!is_dir($path)){
		
		$file[]=array ( 
   			"name"  => $files, 
   			"path"  => $path 
			);
		
 	
	}
	if(is_dir($path)) {
	show($path); 
	}
}
}
}
show("./"); /// папката
sort($file);
print_r($file); 
?>

$file[число][path] - пътя до файла
$file[число][name] - името на файла
 
Здравей,
виж аз какво скалъпих набързо..
<?php
function filearray($dir) {
$handle=opendir($dir);
while (false !== ($file=readdir($handle))) {
$masiv[]=$file;
}
foreach($masiv as $fail) {
if (is_dir($dir.$fail) && $fail!="." && $fail!="..") {
$masiv2["{$fail}"]=filearray($dir.$fail."/");
natcasesort($masiv2["{$fail}"]);
}
if (is_file($dir.$fail)) { $masiv2[]=$fail; }
}
closedir($handle);
natcasesort($masiv2);
return $masiv2;
}
print_r(filearray("files/"));
?>

функцията print_r съм я сложил само пробно за да видиш какво ти връща масива и да ориентираш по-лесно.
Иначе името на началната папка го пиши заедно с наклонената чарта ' / '
Успех.. :)
 
Скрипта не съм го писал аз, намерих го в нет-а, води се нещо като shell, но мисля че ще може да измъкнеш каквото ти трябва.

remview.php

Тествал съм го на localhost и мисля че ще ти свърши работа.
 
EmPowerYou каза:
Скрипта не съм го писал аз, намерих го в нет-а, води се нещо като shell, но мисля че ще може да измъкнеш каквото ти трябва.

remview.php

Тествал съм го на localhost и мисля че ще ти свърши работа.


Нод-а се побърка от отварянето на файла
 
jooorooo каза:
EmPowerYou каза:
Скрипта не съм го писал аз, намерих го в нет-а, води се нещо като shell, но мисля че ще може да измъкнеш каквото ти трябва.

remview.php

Тествал съм го на localhost и мисля че ще ти свърши работа.


Нод-а се побърка от отварянето на файла

Споменах че е шел, нормално... с него получаваш достъп почти навсякъде, аз го дадох за да може човека да извлече каквото му е необходимо :) а за НОД-а няма да говоря, без антивирусна съм много по-добре ;)
 
Леле, колко храна за мойтО беден мозък ми дадохте. Това в кръга на шегата, разбира се. Първо, благодаря на всички които помогнаха. Soul_Stealler, много хубаво и прегледно си го измислил - работи. На мен поне ми е ужасно странен резултата на скрипта на bafitu. Хем работи, описва всичко в директорията и подиректориите и файловете в тях. Хем преди самия Array, изписва следното:

Warning: natcasesort() [function.natcasesort]: The argument should be an array in C:\Program Files\xampp\htdocs\s\home.php on line 101



Warning: natcasesort() [function.natcasesort]: The argument should be an array in C:\Program Files\xampp\htdocs\s\home.php on line 96

Реших за проба да извадя от скрипта natcasesort() изобщо, пак работи. Не разбирах защо трябва да е в array, но не мога да споря с PHP-то :)

Относно remview.php опитах да го сваля няколко пъти. Резултата е винаги файл с големина 0 КБ и се отказах (със спряна антивирусна изобщо, като процес)

И не на последно място ми се иска да споделя след маса главоблъсканици (и много помощ от чичо Гугъл), как го направихме с колегата, с който и двамата тепърва започваме да навлизаме в джунглата на този език. Не мисля, че ние го създадохме, но го събрахме от няколко различни теми във форуми из нета:

<?
$limit = strstr(PHP_OS, "WIN") ? "\\" : "/";

function dirstructure($path) {
global $limit;

if ($dir=@opendir($path)) {
while (($element=readdir($dir))!== false) {
if (is_dir($path.$limit.$element) && $element!= "." && $element!= "..") {
$array[$element] = dirstructure($path.$limit.$element);
} elseif ($element!= "." && $element!= "..") {
$array[] = $element;
}
}
closedir($dir);
}
return (isset($array) ? $array : false);
}
echo "<pre>";
print_r(dirstructure('files'));


Още веднъж, благодаря на всеки отзовал се и се надявам тази тема да е била полезна не само за мен.
 
Направих го в текстов файл. Иначе като отворя линка ми показва съдържанието на файла, понеже дата.бг не поддържа php... ето линк:

remview.txt
 
natcasesort
е функция за сортиране на масив затова и иска да му се подаде масив :)
т.е. затова пищи грешката.
Незнам защо ти я дава аз докато го тествах в 2-3 папки нямаше проблем.
Я пак пробвай с твоя скрипт така:
<?
$limit = strstr(PHP_OS, "WIN") ? "\\" : "/";

function dirstructure($path) {
global $limit;

if ($dir=@opendir($path)) {
while (($element=readdir($dir))!== false) {
if (is_dir($path.$limit.$element) && $element!= "." && $element!= "..") {
$array[$element] = dirstructure($path.$limit.$element);
natcasesort($array[$element]);
} elseif ($element!= "." && $element!= "..") {
$array[] = $element;
natcasesort($array);
}
}

closedir($dir);
}
return (isset($array) ? $array : false);
}
echo "<pre>";
print_r(dirstructure('files'));
?>

Всъщност ако не ти е наложително да ги сортираш въобще не я слагай функцията...
 
Да и така работи и като я махна функцията за сортиране. В случая не се изискваше да ги сортира, но пък е добре че го разбрах, преди ти да пишеш не знаех и че има такава :)
 

Back
Горе