Ir para conteúdo

POWERED BY:

Arquivado

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

Sttranho

[Resolvido] Ler o próprio diretório com restricoes de extensão

Recommended Posts

Salve pessoal,

 

Eu gostaria de fazer o seguinte,

 

O php vai ler o próprio diretório onde ele se encontra...

tentei

$dir = opendir('/');

mas não deu certo.

 

bom, ele vai ler o mesmo diretório onde se encontra o aquivo php que está sendo processado. e como resultado ele dará todos os arquivos JPG, na pasta tem vários tipos de arquivo, mas o resultado será apenas os JPG.

 

irá listar os nomes.

 

tem como?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ler o mesmo diretório onde se encontra o aquivo php que está sendo processado. e como resultado ele dará todos os arquivos JPG

 

Com DirectoryIterator fica mais fácil:

 

$dir = new DirectoryIterator( getcwd() );

foreach ( $dir as $finfo ) if ( $finfo->isFile() ){
    if ( preg_replace( '/.*\.(\w+)/e' , 'strtolower($1)' , $finfo ) == 'png' )
        printf( "O arquivo %s é JPG\n" , $finfo );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

ler o mesmo diretório onde se encontra o aquivo php que está sendo processado. e como resultado ele dará todos os arquivos JPG

 

Com DirectoryIterator fica mais fácil:

 

$dir = new DirectoryIterator( getcwd() );

foreach ( $dir as $finfo ) if ( $finfo->isFile() ){
    if ( preg_replace( '/.*\.(\w+)/e' , 'strtolower($1)' , $finfo ) == 'png' )
        printf( "O arquivo %s é JPG\n" , $finfo );
}

Valeu Fera deu certo... a única coisa que tive que mudar era o png por jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, me vi obrigado a ter que reabrir o tópico...

 

nos teste local deu tudo certo... porém quando eu upei p servidor... eis o problema...

 

Segue o código já com mais coisas, para visualizar e o erro dado.

 

<?
$codigo = '818.jpg';
// Le diretorio e exibe os arquivos JPG
$dir = new DirectoryIterator( getcwd() );
foreach ( $dir as $finfo ) if ( $finfo->isFile() ){
    if ( preg_replace( '/.*\.(\w+)/e' , 'strtolower($1)' , $finfo ) == 'jpg' )
       // echo $finfo.'<br>';
	$arquivo .= $finfo.',';
}
$peca = explode(',', $arquivo);
$n_total = count($peca);
$n = 0;
$img = 'nao';
while($n_total > $n){
	if($codigo == $peca[$n]){
	$img = $codigo;
	}
	$n++;
}
echo $img;
?>

Eis o erro:

 

Fatal error: Cannot instantiate non-existent class: directoryiterator in /var/www/dynvhost/www.zm.com.br/htdocs/img/catalogo/array_comaprar_listar.php on line 4

 

e outro detalhe, vi que em outro código, o tal foreach o servidor também não reconhece,

 

E agora??? quem poderá me ajudar????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Confira a versão do servidor. Provavelmente a classe não está disponível nesta versão.

 

Carlos Eduardo

 

e com relação do foreach ??

 

é possível eu fazer o mesmo processo de outra forma, caso o servidor não me disponibilize a possibilidade de instalar a classe?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O foreach sim,

 

De fato, o foreach é uma estrutura de controle do PHP e estará disponível para você

 

mas o problema é que nao tem classe no servidor.

 

Bom....

 

:P

 

Se não existe, criamos....

if ( !class_exists( 'DirectoryIterator' ) ){
    class FileInfo {
        private $pathName;
        private $fileName;

        public function __construct( $file_name ){
            if ( is_readable( $file_name ) ) $this->pathName = $file_name;
            else throw new Exception( sprintf( 'O arquivo %s não foi encontrado' , $file_name ) );

            $this->fileName = str_replace( dirname( $file_name ) , '' , $file_name );
        }

        public function __toString(){ return $this->pathName; }
        public function getATime(){ return fileatime( $this->pathName ); }
        public function getBasename( $suffix = null ){ return basename( $this->pathName , $suffix ); }
        public function getCTime(){ return filectime( $this->pathName ); }
        public function getFileInfo( $class_name = null ){
            $class = null;

            if ( class_exists( $class_name ) ) $class = new $class_name( $this->pathName );

            if ( $class && ( $class instanceOf FileInfo ) ) return $class;
            else throw new Exception( sprintf( 'A classe %s deve derivar a classe FileInfo' , $class_name ) );
        }
        public function getFilename(){ return $this->fileName; }
        public function getGroup(){ return filegroup( $this->pathName ); }
        public function getInode(){ return fileinode( $this->pathName ); }
        public function getLinkTarget(){ return readlink( $this->pathName ); }
        public function getMTime(){ return filemtime( $this->pathName ); }
        public function getOwner(){ return fileowner( $this->pathName ); }
        public function getPath(){ return dirname( $this->pathName ); }
        public function getPathInfo( $class_name = null ){
            $class = null;

            if ( class_exists( $class_name ) ) $class = new $class_name( $this->getPath() );

            if ( $class && ( $class instanceOf FileInfo ) ) return $class;
            else throw new Exception( sprintf( 'A classe %s deve derivar a classe FileInfo' , $class_name ) );
        }
        public function getPathname(){ return $this->pathName; }
        public function getPerms(){ return fileperms( $this->pathName ); }
        public function getRealPath(){ return realpath( $this->pathName ); }
        public function getSize(){ return filesize( $this->pathName ); }
        public function getType(){
            if ( is_link( $this->pathName ) ) $ret = 'link';
            elseif ( is_dir( $this->pathName ) ) $ret = 'dir';
            elseif ( is_file( $this->pathName ) ) $ret = 'file';
            else throw new Exception( 'Tipo desconhecido.' );

            return $ret;
        }
        public function isDir(){ return is_dir( $this->pathName ); }
        public function isExecutable(){ return is_executable( $this->pathName ); }
        public function isFile(){ return is_file( $this->pathName ); }
        public function isLink(){ return is_link( $this->pathName ); }
        public function isReadable(){ return is_readable( $this->pathName ); }
        public function isWritable(){ return is_writable( $this->pathName ); }
    }

    class DirectoryIterator extends FileInfo implements Iterator {
        private $opendir;
        private $current;
        private $key = 0;

        public function __construct( $path ){
            parent::__construct( $path );

            if ( !( $this->opendir = opendir( $path ) ) )
                throw new Exception( sprintf( 'Não foi possível abrir o caminho %s' , $path ) );

            $this->current = readdir( $this->opendir );
        }

        public function __destruct(){
            closedir( $this->opendir );
        }

        public function current(){ return new FileInfo( $this->current ); }
        public function isDot(){ return $this->current == '.' || $this->current == '..'; }
        public function key(){ return $this->key; }
        public function next(){ $this->current = readdir( $this->opendir ); ++$this->key; }
        public function rewind(){ rewinddir( $this->opendir ); $this->key = 0; }
        public function valid(){ return $this->current ? true : false; }
    }
}

Agora que ela está disponível, o uso continua o mesmo:

$dir = new DirectoryIterator( getcwd() );

foreach ( $dir as $finfo ) if ( $finfo->isFile() ){
    if ( preg_replace( '/.*\.(\w+)/e' , 'strtolower($1)' , $finfo ) == 'jpg' )
        printf( "O arquivo %s é JPG\n" , $finfo );
}

Agora, heheheh, se você não quiser tudo isso para uma simples iteração, hehhhe

Você pode utilizar dois outros métodos:

 

1. opendir

if ( $dir = opendir( getcwd() ) ){
    while ( $file = readdir( $dir ) ) if ( is_file( $file ) ){
        if ( preg_replace( '/.*\.(\w+)/e' , 'strtolower($1)' , $finfo ) == 'jpg' )
            printf( "O arquivo %s é JPG\n" , $finfo );
    }

    closedir( $dir );
}

2. glob

foreach ( glob( '*.jpg' ) as $file )
    printf( "O arquivo %s é JPG\n" , $file );

Tanto o opendir quanto glob estão disponíveis desde o PHP 4 (o glob do PHP4.3+)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vixe... tentei criar a classe... e deu isso

 

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /var/www/dynvhost/www.zm.com.br/htdocs/img/catalogo/index.php on line 4

 

 

a principio achei que fosse falta de fechar chave, mas... acho que o código tá certo.

 

<?
if ( !class_exists( 'DirectoryIterator' ) ){
    class FileInfo {
        private $pathName;
        private $fileName;

        public function __construct( $file_name ){
            if ( is_readable( $file_name ) ) $this->pathName = $file_name;
            else throw new Exception( sprintf( 'O arquivo %s não foi encontrado' , $file_name ) );

            $this->fileName = str_replace( dirname( $file_name ) , '' , $file_name );
        }

        public function __toString(){ return $this->pathName; }
        public function getATime(){ return fileatime( $this->pathName ); }
        public function getBasename( $suffix = null ){ return basename( $this->pathName , $suffix ); }
        public function getCTime(){ return filectime( $this->pathName ); }
        public function getFileInfo( $class_name = null ){
            $class = null;

            if ( class_exists( $class_name ) ) $class = new $class_name( $this->pathName );

            if ( $class && ( $class instanceOf FileInfo ) ) return $class;
            else throw new Exception( sprintf( 'A classe %s deve derivar a classe FileInfo' , $class_name ) );
        }
        public function getFilename(){ return $this->fileName; }
        public function getGroup(){ return filegroup( $this->pathName ); }
        public function getInode(){ return fileinode( $this->pathName ); }
        public function getLinkTarget(){ return readlink( $this->pathName ); }
        public function getMTime(){ return filemtime( $this->pathName ); }
        public function getOwner(){ return fileowner( $this->pathName ); }
        public function getPath(){ return dirname( $this->pathName ); }
        public function getPathInfo( $class_name = null ){
            $class = null;

            if ( class_exists( $class_name ) ) $class = new $class_name( $this->getPath() );

            if ( $class && ( $class instanceOf FileInfo ) ) return $class;
            else throw new Exception( sprintf( 'A classe %s deve derivar a classe FileInfo' , $class_name ) );
        }
        public function getPathname(){ return $this->pathName; }
        public function getPerms(){ return fileperms( $this->pathName ); }
        public function getRealPath(){ return realpath( $this->pathName ); }
        public function getSize(){ return filesize( $this->pathName ); }
        public function getType(){
            if ( is_link( $this->pathName ) ) $ret = 'link';
            elseif ( is_dir( $this->pathName ) ) $ret = 'dir';
            elseif ( is_file( $this->pathName ) ) $ret = 'file';
            else throw new Exception( 'Tipo desconhecido.' );

            return $ret;
        }
        public function isDir(){ return is_dir( $this->pathName ); }
        public function isExecutable(){ return is_executable( $this->pathName ); }
        public function isFile(){ return is_file( $this->pathName ); }
        public function isLink(){ return is_link( $this->pathName ); }
        public function isReadable(){ return is_readable( $this->pathName ); }
        public function isWritable(){ return is_writable( $this->pathName ); }
    }

    class DirectoryIterator extends FileInfo implements Iterator {
        private $opendir;
        private $current;
        private $key = 0;

        public function __construct( $path ){
            parent::__construct( $path );

            if ( !( $this->opendir = opendir( $path ) ) )
                throw new Exception( sprintf( 'Não foi possível abrir o caminho %s' , $path ) );

            $this->current = readdir( $this->opendir );
        }

        public function __destruct(){
            closedir( $this->opendir );
        }

        public function current(){ return new FileInfo( $this->current ); }
        public function isDot(){ return $this->current == '.' || $this->current == '..'; }
        public function key(){ return $this->key; }
        public function next(){ $this->current = readdir( $this->opendir ); ++$this->key; }
        public function rewind(){ rewinddir( $this->opendir ); $this->key = 0; }
        public function valid(){ return $this->current ? true : false; }
    }
}
?>
<?
$codigo = $_POST['peca'].'.jpg';
// Le diretorio e exibe os arquivos JPG
$dir = new DirectoryIterator( getcwd() );
foreach ( $dir as $finfo ) if ( $finfo->isFile() ){
    if ( preg_replace( '/.*\.(\w+)/e' , 'strtolower($1)' , $finfo ) == 'jpg' )
       // echo $finfo.'<br>';
	$arquivo .= $finfo.',';
}
$peca = explode(',', $arquivo);
$n_total = count($peca);
$n = 0;
$img = 'sem_foto_pqna.png';

while($n_total > $n){
	if($codigo == $peca[$n]){
	$img = $codigo;
	}
	$n++;
}

echo $img;

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a versão do PHP do servidor?

 

Carlos Eduardo

 

 

Pior que não sei... tem como eu saber através de algum script?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim. Cria um script com o seguinte conteudo e roda ele.

<?php
phpinfo();
?>

 

Carlos Eduardo

 

Bah, pior que fiz o código acima, e a página ficava em branco, não trouxe nenhuma informação... :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você fez alguma coisa errada ou o teu provedor desabilitou esta função... Coloque este conteúdo...

 

<?php
echo 'Estou aqui... tem suporte a PHP.'.
phpinfo();
?>

 

Veja se imprime a mensagem.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você fez alguma coisa errada ou o teu provedor desabilitou esta função... Coloque este conteúdo...

 

<?php
echo 'Estou aqui... tem suporte a PHP.'.
phpinfo();
?>

 

Veja se imprime a mensagem.

 

Carlos Eduardo

 

 

Opa, Luz no fim do túnel...

 

PHP Version 4.4.4-8+etch4

Compartilhar este post


Link para o post
Compartilhar em outros sites

PHP Version 4.4.4-8+etch4

 

Sugestão: se você estiver usando o serviço de um servidor pago, troque de servidor ou faça um upgrade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

PHP Version 4.4.4-8+etch4

 

Sugestão: se você estiver usando o serviço de um servidor pago, troque de servidor ou faça um upgrade.

 

Vixe... dai agora complicou então... é um servidor dedicado... bom... terei que estudar outras formas de conseguir fazer oque quero, pois mexer no servidor... sem chance!!!

 

Valeu pela força...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vixe... dai agora complicou então... é um servidor dedicado... bom... terei que estudar outras formas de conseguir fazer oque quero, pois mexer no servidor... sem chance!!!

Com o glob() não deu certo também ???

 

foreach ( glob( '*.jpg' ) as $file ){
    printf( "O arquivo %s é JPG\n" , $file );
}

O glob() está disponível desde o PHP 4.3

 

http://br2.php.net/manual/en/function.glob.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

João, o problema são os identificadores de visibilidade (public, private...) que não estão disponíveis antes do PHP 5.

 

Não tem a possibilidade de atualizar esta versão do PHP, já que é dedicado?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

João, o problema são os identificadores de visibilidade (public, private...) que não estão disponíveis antes do PHP 5.

 

Na verdade, o buraco é ainda mais embaixo, ele não conseguirá iterar a classe implementando a interface Iterator uma vez que interfaces também não estão disponíveis no PHP4, talvez removendo a implementação da interface e utilizando apenas um método "getIterator", ele consiga alguma coisa...

 

Agora, se ele está pagando um servidor dedicado seria realmente interessante atualizar o PHP.

;)

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.