Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

visitante_php

tamanho de arquivo: funcao usada sozinha funfa, separada nao

Recommended Posts

o resultado eh esse

 

No.: 2 |Nome: ClassTempl.inc |Tamanho: 2895

 

Warning: filesize() [function.filesize]: stat failed for arquivomp3.mp3 in C:\AppServ\www\template\phpdesigner_tmp96.php on line 30

No.: 3 |Nome: arquivomp3.mp3 |Tamanho:

 

Warning: filesize() [function.filesize]: stat failed for arquivomp3.mp3 in C:\AppServ\www\template\phpdesigner_tmp96.php on line 31

No.: 4 |Nome: mypage.tpl |Tamanho: 331

No.: 5 |Nome: teste.php |Tamanho: 558

Tamanho da pasta 'teste' é: 3784

 

 

10.418

o script eh esse

 

$dir = "teste";
function dire($dire){
	$abre = opendir($dire);
$sacn = scandir($dire);
foreach($sacn as $pos => $nome){
	if($nome != "." && $nome != ".."){
	echo "<b>No.:</b> ".$pos." |<b>Nome:</b> ".$nome." |Tamanho: ".filesize($nome)."<br>";
	$tamanho[$pos] = filesize($nome);
}
}
$total = array_sum($tamanho);
echo "Tamanho da pasta '".$dire."' &eacute: ".round($total, 3);
}
dire($dir);

 $soma = round(filesize($dir."/arquivomp3.mp3")/1048576, 3);
 $soma2 = 1024*1024;
 echo "<br>".$soma;

o arquivo mp3 usado sozinho com filesize nao da erro, como mostra akele 10.418, que eh o tamanho dele em mb, mas la emcima nao da quando kero juntar o tamanho dele com o tod outros arquivo...

 

 

essa funcao estou desenvolvendo para determinar o tamanho de uma pasta, procurei na net e nao encontrei....

 

o q eu faço?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pow, deu certo agora, mas nao esta arredondando no final.... =/

 

aproveitando que você, Beraldo, esta respondendo esse topico, como eu faria pra tornar funcao recursiva? afinal, ela so ira "ler" um diretorio... =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

não está arredondando pois você, ao atribuir o valor a $tamanho[], não usou a variável $dire.

 

 

Para tornar recursivo, faça um if usando is_dir(). Se retornar TRUE, chame a função dire() passando o arquivo corrente como parâmetro

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu fiz...

 

$dir = "teste";
function dire($dire){
$sacn = scandir($dire);
foreach($sacn as $pos => $nome){
	if($nome != "." && $nome != ".."){
	echo "<b>No.:</b> ".$pos." |<b>Nome:</b> ".$nome." |<b>Tamanho:</b> ".filesize($dire."/".$nome)."<br>";
	if(is_dir($dire)){
	dire($dire);
	}
	$tamanho[$pos] = filesize($dire ."/". $nome);
}
}
$total = array_sum($tamanho);
echo "Tamanho da pasta '".$dire."' &eacute: ".round($total, 3);
}
dire($dir);

so t esta dando loop infinito e o phpdesigner esta cancelando a operacao, so da pra ver que o nome dos mesmos arquivos esta se repetindo....

Compartilhar este post


Link para o post
Compartilhar em outros sites

erro de logica... =S =)

 

$dir = "teste";
function dire($dire){
$sacn = scandir($dire);
foreach($sacn as $pos => $nome){
	if($nome != "." && $nome != ".."){
	echo "<b>No.:</b> ".$pos." |<b>Nome:</b> ".$nome." |<b>Tamanho:</b> ".filesize($dire."/".$nome)."<br>";
  [b]  if(is_dir($dire)){
	dire($dire);
	}[/b]
	$tamanho[$pos] = filesize($dire ."/". $nome);
}
}
$total = array_sum($tamanho);
echo "Tamanho da pasta '".$dire."' &eacute: ".round($total, 3);
}
dire($dir);

por

 

$dir = "teste";
function dire($dire){
$sacn = scandir($dire);
foreach($sacn as $pos => $nome){
	if($nome != "." && $nome != ".."){
	echo "<b>No.:</b> ".$pos." |<b>Nome:</b> ".$nome." |<b>Tamanho:</b> ".filesize($dire."/".$nome)."<br>";
	[b]if(is_dir($nome)){
	dire($nome);
	}[/b]
	$tamanho[$pos] = filesize($dire ."/". $nome);
}
}
$total = array_sum($tamanho);
echo "Tamanho da pasta '".$dire."' &eacute: ".round($total, 3);
}
dire($dir);

e mesmo assim nao esta arredondando...

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui deixar recursiva, mas nao esta arredondando e so soma o tamanho dos arquivos dos subdiretorio, nao soma o total do subdiretorio com o do diretorio... =/

 

$dir = "teste";
function dire($dire){
$sacn = scandir($dire);
foreach($sacn as $pos => $nome){
	if($nome != "." && $nome != ".."){
	echo "<br><b>No.:</b> ".$pos." |<b>Nome:</b> ".$nome." |<b>Tamanho:</b> ".filesize($dire."/".$nome)."<br>";
	if(is_dir($dire."/".$nome)){
		echo "<br>Pasta: <b>".$dire."/".$nome."</b><br>";
	dire($dire."/".$nome);
	}
	$tamanho[$pos] = filesize($dire ."/". $nome);
}
}
$total = array_sum($tamanho);
echo "<br>Tamanho da pasta '<b>".$dire."</b>' &eacute: ".round($total, 3);
}
dire($dir);

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui isso

 

 

$dir = "teste";
function dire($dire){
$sacn = scandir($dire);
foreach($sacn as $pos => $nome){
	if($nome != "." && $nome != ".."){
		if(is_dir($nome)){
			echo "<br><font color='red'>Pasta: <b>".$nome."</b></font><br>";
		}else{
			echo "<br><b>No.:</b> ".$pos." |<b>Nome:</b> ".$nome." |<b>Tamanho:</b> ".filesize($dire."/".$nome)."<br>";
			$tamanho1[$pos] = filesize($dire ."/". $nome);
		}
	if(is_dir($dire."/".$nome)){
		echo "<br><font color='red'>Pasta: <b>".$dire."/".$nome."</b></font><br>";
		dire($dire."/".$nome);
	}
	$tamanho2[$pos] = filesize($dire ."/". $nome);
	//$tamanho3 = array_sum($tamanho1) + array_sum($tamanho2);
	
}
}
$total = array_sum($tamanho1) / 1048576;// array_sum($tamanho2);
echo "<br><font color='blue'>Tamanho da pasta '<b>".$dire."</b>' &eacute: ".round($total, 5)."</font><br>";
}
dire($dir);

porem nao esta somnado o valor do subdiretorio com o do diretorio acima....

Compartilhar este post


Link para o post
Compartilhar em outros sites

seis posts seguidos??? Tá louco, você poderia ter editado os posts, não feito outros. :P

 

Não está somando os valores dos sub-diretórios pois, ao chamar a função novamente, o valor de $tamanho é zerado.

Você pode usar uma variável global ou passar como parâmetro a variável que somará os tamanhos dos arquivos

Compartilhar este post


Link para o post
Compartilhar em outros sites

$dir = "teste";
function dire($dire){
$sacn = scandir($dire);
foreach($sacn as $pos => $nome){
	if($nome != "." && $nome != ".."){
		if(is_dir($nome)){
			echo "<br><font color='red'>Pasta: <b>".$nome."</b></font><br>";
		}else{
			echo "<br><b>No.:</b> ".$pos." <br><b>Nome:</b> ".$nome." <br><b>Tamanho:</b> ".filesize($dire."/".$nome)."<br>";
			$tamanho1[$pos] = filesize($dire ."/". $nome);
		}
	if(is_dir($dire."/".$nome)){
		echo "<br><font color='red'>Pasta: <b>".$dire."/".$nome."</b></font><br>";
		dire($dire."/".$nome);
	}
	$tamanho2[$pos] = array_sum($tamanho1);
	//$tamanho3 = array_sum($tamanho1) + array_sum($tamanho2);
	
}
}
$tamanho3 = array_sum($tamanho2);
$total = array_sum($tamanho2) / 1048576;// array_sum($tamanho2);
echo "<br><font color='blue'>Tamanho da pasta '<b>".$dire."</b>' &eacute: ".round($total, 5)."</font><br>";
}
dire($dir);

consegui isso, que esta somando, so q tem subdiretorio q da como 3mb e nao soma com o diretorio q kero que determine o tamanho....

Compartilhar este post


Link para o post
Compartilhar em outros sites

dei uma melhorada na funcao, mas esta dizendo alem do erro citado acima, esta apresentando outro tb, eis a bendita:

 

function dire($dire){
$sacn = scandir($dire);
foreach($sacn as $pos => $nome){
	if($nome != "." && $nome != ".."){
		$path = $dire."/".$nome;
		if(is_dir($path)){
			echo "<ul>";
			echo "<br><li><font color='red'>Pasta: <b>".$nome."</b></font></li><br>";
			dire($path);
		}else{
			echo "<br><li><b>No.:</b> ".$pos." <br><b>Nome:</b> ".$nome." <br><b>Tamanho:</b> ".filesize($path)."</li><br>";
			$tamanho1[$pos] = filesize($path);
			if(is_array($tamanho1)){
			$tamanho1[$pos] = filesize($path);
			}else{
				$tamanho[$pos] = filesize($path);
				array_push($tamanho1, $tamanho);
			}
		}

	$tamanho2[$pos] = array_sum($tamanho1);
	//$tamanho3 = array_sum($tamanho1) + array_sum($tamanho2);
	
}
}
$tamanho3 = array_sum($tamanho2);
$total = $tamanho3 / 1048576;// array_sum($tamanho2);
echo "</ul>";
echo "<br><font color='blue'>Tamanho da pasta '<b>".$dire."</b>' &eacute: ".round($total, 5)."</font><br>";
}
dire($dir);

sua mensagem de agradecimento por existir

 

Warning: array_sum() [function.array-sum]: The argument should be an array in C:\AppServ\www\template\phpdesigner_tmp15.php on line 29

 

e a linha citada eh

 

$tamanho2[$pos] = array_sum($tamanho1);

Compartilhar este post


Link para o post
Compartilhar em outros sites

exemplo retirado dos comentarios do manual funciona pra arquivo ou pasta

http://www.php.net/filesize

 

 

<?php

function getsize($path){

if (!is_dir($path))

return filesize($path);

$size=0;

foreach (scandir($path) as $file){

if ($file=='.' or $file=='..')

continue;

$size+=getsize($path.'/'.$file);

}

return $size;

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.