Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi galera, queria uma ajudinha de voces!!
Estou tentando fazer um script que vai varrer uma pasta para ver os arquivos que esta tem (até aqui tudo bem):
<?php
echo'<table width="440" border="0" cellspacing="2" class="font12">';
$dir = "../../digital"; //pasta
$path = '../../digital'; //pasta
$path = $path;
$dh = opendir($path); //abre pasta
while (($file = readdir($dh)) !== false) {
if($file != "." && $file != "..") { // se ha ficheiro
if (substr($file, -4, -3) =="."){ // se � um ficheiro
echo'<tr><td align="left">'. $file .'</td><td align="left"><a href=../../digital/'.$file.'>Download</a></td></tr>';
}
}
}
echo'</table>';
closedir($dh); //fechar
?>
Depois como faço para fazer o upload desses ficheiros para o banco de dados MySQL?
Alguem me ajude... valeu
Oi Rogério, o problema é que quero inserir directamente no BD.
Então você quer ler todos os arquivos de um diretório e enviar para o mysql, é isso?
$iterator = new RecursiveDirectoryIterator($diretorio);
$recursiveIterator = new RecursiveIteratorIterator($iterator);
foreach ( $recursiveIterator as $arquivo ) {
mysql_query("
INSERT INTO tabela(nome_do_arquivo, conteudo_do_arquivo)
VALUES (
'" . $arquivo->getFilename() . "',
'" . file_get_contents(diretorio . DIRECTORY_SEPARATOR . $arquivo->getFilename() . "'
)"
);
}
você pode usar PDO para ficar mais fácil...
//mude
mysql_query("
INSERT INTO tabela(nome_do_arquivo, conteudo_do_arquivo)
VALUES (
'" . $arquivo->getFilename() . "',
'" . file_get_contents(diretorio . DIRECTORY_SEPARATOR . $arquivo->getFilename() . "'
)"
);
//para isso
$pdo = $conn->prepare(INSERT INTO tabela(nome_do_arquivo, conteudo_do_arquivo) VALUES (?,?));
$pdo->execute(array( $arquivo->getFilename(), file_get_contents(diretorio . DIRECTORY_SEPARATOR . $arquivo->getFilename() ));
mas faça de um jeito que você entenda...
OiRogério, me dá uma ajudinha por favor.
Meu código está assim:
<?php
echo'<table width="440" border="0" cellspacing="2" class="font12">';
$dir = "../../digital"; //pasta
$path = '../../digital'; //pasta
$path = $path;
$dh = opendir($path); //abre pasta
while (($userfile = readdir($dh)) !== false) {
if($userfile != "." && $userfile != "..") { // se ha ficheiro
if( is_file($path . '/' .$userfile) ){ // se � um ficheiro
echo'<tr><td align="left">'. $userfile .'</td><td align="left"></td></tr>';
mysql_query("
INSERT INTO documentos(assunto, ficheiro)
VALUES ($ficheiro->getFilename(), file_get_contents($path . DIRECTORY_SEPARATOR . $ficheiro->getFilename())"
);
//para isso
$pdo = $conn->prepare(INSERT INTO documentos(assunto, ficheiro) VALUES (?,?));
$pdo->execute(array( $ficheiro->getFilename(), file_get_contents($path . DIRECTORY_SEPARATOR . $ficheiro->getFilename() ));
}
}
echo'</table>';?>
Não estou conseguindo inserir os documentos no BD. Onde está mal?
Acho que o que você quer é isso...
<?php
echo'<table width="440" border="0" cellspacing="2" class="font12">';
$path = '../../digital'; //pasta
$path = $path;
$iterator = new RecursiveDirectoryIterator($path);
$recursiveIterator = new RecursiveIteratorIterator($iterator);
foreach ( $recursiveIterator as $ficheiro ) {
echo'<tr><td align="left">'. $ficheiro->getFilename() .'</td><td align="left"></td></tr>';
echo ("
INSERT INTO documentos(assunto, ficheiro)
VALUES ('{$ficheiro->getFilename()}', '" . file_get_contents($ficheiro->getPathname()) . "')"
);
}
echo'</table>';
?>
eu me expliquei mal quando falei do PDO...
O PDO teria que substituir suas linhas mysql_query, mysql_fetch_array, mysql_...
Mas você teria que mudar a sua conexão também, e pelo tópico o que você quer mesmo é só listar os arquivos... então desculpe a confusão...
Rogério, obrigado pela tua dica, mas a página fica "mastigando" e acaba bloqueando, não dá.
Alguém me ajude.....
Você quer gravar o arquivo inteiro no banco ou apenas o caminho para acessá-lo no servidor?
-----
Um dica...
Esse código não garante que $file é um arquivo... existem diretórios com ponto no nome, e arquivos com extenção com mais de 3 letras (.jpeg).
if (substr($file, -4, -3) =="."){
Use:
if( is_file($path . '/' .$file) ) {
Sugestão...
Use iterators da SPL-StandardPHPLibrary
como não é a primeira vez que falo isso aqui no fórum, escrevi isso no meu blog... http://phpdive.com/como-listar-arquivos-de-diretorio-recursivamente-com-php.html