Sttranho 0 Denunciar post Postado Setembro 2, 2009 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
João Batista Neto 448 Denunciar post Postado Setembro 2, 2009 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
Sttranho 0 Denunciar post Postado Setembro 2, 2009 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
Sttranho 0 Denunciar post Postado Setembro 3, 2009 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
Matias Rezende 50 Denunciar post Postado Setembro 3, 2009 Confira a versão do servidor. Provavelmente a classe não está disponível nesta versão. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Sttranho 0 Denunciar post Postado Setembro 3, 2009 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
André D. Molin 15 Denunciar post Postado Setembro 3, 2009 O foreach sim, mas o problema é que nao tem classe no servidor. Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Setembro 3, 2009 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
Sttranho 0 Denunciar post Postado Setembro 4, 2009 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
Matias Rezende 50 Denunciar post Postado Setembro 4, 2009 Qual a versão do PHP do servidor? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Sttranho 0 Denunciar post Postado Setembro 4, 2009 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
Matias Rezende 50 Denunciar post Postado Setembro 4, 2009 Sim. Cria um script com o seguinte conteudo e roda ele. <?php phpinfo(); ?> Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Sttranho 0 Denunciar post Postado Setembro 8, 2009 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
Matias Rezende 50 Denunciar post Postado Setembro 8, 2009 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
Sttranho 0 Denunciar post Postado Setembro 8, 2009 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
João Batista Neto 448 Denunciar post Postado Setembro 8, 2009 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
Sttranho 0 Denunciar post Postado Setembro 8, 2009 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
João Batista Neto 448 Denunciar post Postado Setembro 8, 2009 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
Matias Rezende 50 Denunciar post Postado Setembro 8, 2009 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 Batista Neto 448 Denunciar post Postado Setembro 8, 2009 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