Ir para conteúdo

POWERED BY:

Arquivado

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

Junior Gabolli

PROBLEMAS COM PHP Warning: unlink(../../): Is a direc

Recommended Posts

 

Boa Tarde Galera,

Estou montando uma parte de admin para meu site porém estou tendo problemas com esta mensagem na qual estou tentando de inicio excluir uma foto de uma pasta do servidor porém esta me retornando este erro:

PHP Warning: unlink(../../): Is a directory in .... linha10;
Alguem poderia me dar uma ajuda ????
Vlws....
<?php
if (isset($_POST['alterarFoto'])):

    if (isset($_POST['id'])):
        $id = (int) $_POST['id'];
        $dados = pegaPeloId('produto', 'produto_id', $id);
        $fotoInicio = $dados['produto_foto_inicio'];
        $fotoDetalhes = $dados['produto_foto_detalhes'];

        if (unlink("../../" . $fotoInicio)): //erro ocorre aqui
            echo "DELETOU A FOTO COM SUCESSO";
        else:
            echo "ERRO AO DELETAR A FOTO";
        endif;

    else:
        $erro = "NÃO FOI POSSIVEL PEGAR O ID DO PRODUTO";
    endif;
endif;
?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde, sim isso eu sei porém o diretório que estou fazendo o teste não esta vazio ele contem fotos, as quais eu quero deletar através desse código. Não quero deletar o diretório e sim só os arquivos dentro dele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$fotoInicio está com um nome de diretório ou com valor vazio, que resulta na tentativa de remover "../../"

De um echo nela e veja o valor recebido

 

Também pode usar a função is_file() para garantir que está tentando remover um arquivo, não diretório

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou novo nesta área, o que estou fazendo no inicio ele faz uma consulta no banco e pega pela id do produto o qual quero deletar a foto, ele faz a leitura no banco onde esta esta imagem porém eu preciso voltar dois diretórios pois as pastas não estão no mesmo diretório, por isso o ../../ porém mesmo ele lendo no banco ele diz que estou tentando deletar um diretório, você poderia me passar um exemplo de como usar esse is_file ???? Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho eu que você deveria verificar se a foto existe.

 

 

 

 

Boa Tarde Galera,

Estou montando uma parte de admin para meu site porém estou tendo problemas com esta mensagem na qual estou tentando de inicio excluir uma foto de uma pasta do servidor porém esta me retornando este erro:

PHP Warning: unlink(../../): Is a directory in .... linha10;
Alguem poderia me dar uma ajuda ????
Vlws....
<?php
if (isset($_POST['alterarFoto'])):

    if (isset($_POST['id'])):
        $id = (int) $_POST['id'];
        $dados = pegaPeloId('produto', 'produto_id', $id);
        $fotoInicio = $dados['produto_foto_inicio'];
        $fotoDetalhes = $dados['produto_foto_detalhes'];

        if (unlink("../../" . $fotoInicio)): //erro ocorre aqui
            echo "DELETOU A FOTO COM SUCESSO";
        else:
            echo "ERRO AO DELETAR A FOTO";
        endif;

    else:
        $erro = "NÃO FOI POSSIVEL PEGAR O ID DO PRODUTO";
    endif;
endif;
?> 

 

 

acho eu que você deveria verificar se a foto/arquivo existe:

<?php
if (isset($_POST['alterarFoto'])):

    if (isset($_POST['id'])):
        $id = (int) $_POST['id'];
        $dados = pegaPeloId('produto', 'produto_id', $id);
        $fotoInicio = $dados['produto_foto_inicio'];
        $fotoDetalhes = $dados['produto_foto_detalhes'];


        $a_foto = "../../" . $fotoInicio;


        //depois de verificado se o arquivo existe ele deleta
        if (file_existe($a_foto) and unlink($a_foto)): 
            echo "DELETOU A FOTO COM SUCESSO";
        else:
            echo "ERRO AO DELETAR A FOTO";
        endif;

    else:
        $erro = "NÃO FOI POSSIVEL PEGAR O ID DO PRODUTO";
    endif;
endif;
?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou novo nesta área, o que estou fazendo no inicio ele faz uma consulta no banco e pega pela id do produto o qual quero deletar a foto, ele faz a leitura no banco onde esta esta imagem porém eu preciso voltar dois diretórios pois as pastas não estão no mesmo diretório, por isso o ../../ porém mesmo ele lendo no banco ele diz que estou tentando deletar um diretório, você poderia me passar um exemplo de como usar esse is_file ???? Att.

Você deu um echo em $fotoInicio, como eu sugeri? Qual foi o resultado?

 

Um simples exemplo usando is_file

 

$foto = "../../" . $fotoInicio;
 
if ( is_file( $foto ) )
{
    if (unlink( $foto )): //erro ocorre aqui
        // ...
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, também estou achando porém eu uso ela em outro link e este funciona normalmente, segue a função:

function pegaPeloId($tabela, $campoTabela, $id) {
    $pdo = conectar();
    try {
        $listarDados = $pdo->prepare("SELECT * FROM" . $tabela . "WHERE" . $campoTabela . "=" . $id);
        $listarDados->execute();

        if ($listarDados->rowCount() > 0):
            $dados = $listarDados->fetch(PDO::FETCH_ASSOC);
            return $dados;
        else:
            return false;
        endif;
    } catch (PDOException $e) {
        echo"ERRO: " . $e->getMessage();
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Diminui o código para fazer os teste, esta desta maneira, agora retornou o seguinte:

if (isset($_POST['alterarFoto'])):

    if (isset($_POST['id'])):
        
        $id = (int) $_POST['id'];
        $dados = pegaPeloId('produtos', 'produto_id', $id);
        var_dump($dados);
else:
    $erro = "NÃO FOI POSSIVEL PEGAR O ID DO PRODUTO";
endif;
endif; 

Resultado:

 

boolean false

Compartilhar este post


Link para o post
Compartilhar em outros sites

PDOStatement::errorInfo(): Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROMprodutosWHEREproduto_id=34' at line 1 )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde, finalmente agora sim esta funcionando.....

 

Quero agradecer a todos pela paciência e atenção em especial ao Beraldo.....

 

o código ficou assim:

 

foto.php

<?php
if (isset($_POST['alterarFoto'])):

    if (isset($_POST['id'])):
        $id = (int) $_POST['id'];
        $dados = pegaPeloId('produtos', 'produto_id', $id);
        $fotoInicio = $dados['produto_foto_inicio'];
        $fotoDetalhes = $dados['produto_foto_detalhes'];

        if (unlink("../../" . $fotoDetalhes)):

            $mensagem = "DELETOU A FOTO COM SUCESSO";
        else:
            $erro = "ERRO AO DELETAR A FOTO";
        endif;

    else:
        $erro = "NÃO FOI POSSIVEL PEGAR O ID DO PRODUTO";
    endif;
endif;
?>

functions.php

function pegaPeloId($tabela, $campoTabela, $id) {
    $pdo = conectar();
    try {
        $listarDados = $pdo->prepare(" SELECT * FROM " . $tabela . " WHERE " . $campoTabela . " = " . $id);
        $listarDados->execute();

         //Função para verificar erro
         /* echo "\nPDOStatement::errorInfo():\n";
          $arr = $listarDados->errorInfo();
          print_r($arr);*/
         
            if ($listarDados->rowCount() > 0):
            $dados = $listarDados->fetch(PDO::FETCH_ASSOC);
            return $dados;
        else:
            return false;
        endif;
    } catch (PDOException $e) {
        echo"ERRO: " . $e->getMessage();
    }
}

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.