• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Knitter

Alternativa ao scandir() para php 4?

10 mensagens neste tópico

Boas!

Tenho um pequeno script para criar uma galeria de imagens que se basea no número de imagens existentes na pasta. Estava a usar a função scandir() do php 5 mas o meu hosting actual apenas disponibiliza php 4 e agora o script não funciona. Tentei alterar a função base que conta o número de ficheiros de:

function countFiles($dir) {
    $files=scandir("{$dir}/thumbs");
    $count = 0;

    foreach($files as $file) {
      if(strcasecmp(substr($file,-4), ".jpg") == 0)
        $count++;
    }

    return $count;
    }

para

  function countFilesNoScandir($dir) {
$dh  = opendir($dir);
$count = 0;

while (false !== ($filename = readdir($dh))) {
	if(strcasecmp(substr($file,-4), ".jpg") == 0)
		$count++;
}

return $count;
  
  }

Mas enquanto o primeiro script aceitava caminhos relativos, no novo não consigo passar caminhos relativos, o que estou a fazer mal?

O segundo script devolve sempre zero, não dá erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta assim...

function countFiles($dir) {

$dir = dir($dir);
$count= '';

while (false !== ($ficheiros = $dir->read())) {
   if(eregi( "\.(jpg|gif|png)$", $ficheiros )) {
                    $count++;
      }
}
$dir->close();

return $count;
}

Não experimentei o código por isso não sei se vai funcionar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A diferença do teu script para o meu é fundamentalmente teres trocado a função opendir() pela função dir()...

Porque fizeste a troca?

Hum... tenho de experimentar mas pelo que vejo penso que vou ter os mesmos problemas. A descrição das duas funções é a mesma...

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois mas tenho o mesmo problema, não consigo usar caminhos relativos...

Warning: dir(../sys) [function.dir]: failed to open dir: Invalid argument in C:\System\Temporary\Working\CitroGarageWeb\sys\util.php on line 33

Fatal error: Call to a member function read() on a non-object in C:\System\Temporary\Working\CitroGarageWeb\sys\util.php on line 36

Se em vez de andar pasta para trás apenas indicar a pasta "sys" a função devolve sempre zero. 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que estive a ver no manual não encontrei nada que sugerisse que a função readdir() seja mais lenta que o método read() da classe 'dir' e as funções fazem a mesma coisa...

Como eu gosto da função scandir() :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok estou estive a ver os exemplos do w3c schools e penso que já resolvi o problema. Vou fazer mais uns testezitos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não disse que a função readdir(); é mais lenta que read(); :)  É mais rapido utilizar uma classe que abre e lê os ficheiros de um directorio do que utilizar duas funções diferentes uma para abrir e outra para ler os ficheiros de um directorio... :)

Quando ao teu problema... se não funcionou utiliza a função scandir(); :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema é que scandir() é de php 5 e o host actual só tem php 4 :)

Mas já está resolvido, reestruturei o script e apercebi-me que estava a cometer um erro, está a funcionar.

Obrigado pela ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora