Ir ao conteúdo
  • Cadastre-se
fspjonny

PHP RESOLVIDO Erro ao tentar conectar BD com Xampp

Posts recomendados

Boa noite a todos!

 

Tem um site que montei há alguns 2 anos e recentemente estou dando manutenção novamente nele e me foi solicitado algumas alterações, tudo correu bem a não ser por este erro aqui.

 

Warning: include_once(../BD/conecta_bd.php): failed to open stream: No such file or directory in C:\xampp\htdocs\FARMA\idioma\lang_br.php on line 2
Warning: include_once(): Failed opening '../BD/conecta_bd.php' for inclusion (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\FARMA\idioma\lang_br.php on line 2

 

image.png.77434283b2038efa177727cc6710ca74.png

A pasta de idioma contém o arquivo lang_br.php que solicita um include_once ao BD/conecta_bd.php, veja que a pasta está no mesmo nível da pasta BD que contém o arquivo de conexão ao banco de dados(conecta_bd.php).

image.png.329cb5a53737e837476d22e1fc2ecf72.png

Todas as demais páginas estão acessando o banco de dados dessa forma(caminho relativo), somente o arquivo lang_br.php que está na pasta idioma, não consegue voltar e entrar em BD e acessar o conecta_bd.php

 

Já alterei para o caminho absoluto usando __DIR__ ."\BD\conecta_bd.php", e o erro é o mesmo.

 

Já dei uma olhada no Google e diversas pessoas tiveram este problema seja usando Xampp, EasyPHP, MVC, a solução deles não me serviu.

Tentei configurar no php.ini o include_path=C:\xampp\php\PEAR, mas ele já estava desmarcado para uso

Não mexi nisso, deixei como está abaixo e não sei se tem que configurar algo, porque nunca precisou ser usado

; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"

O Xampp está na versão mais recente V3.2.3, mas na versão V3.2.2, já estava com o mesmo problema antes de atualizar.

 

Se alguém tiver alguma luz, agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@fspjonny 

 

Pode ser um erro no formato de codificação dos caracteres utilizado no documento, verifica se o arquivo está em UTF-8.

Recomendo a você escrever o arquivo de novo, e também recomendo a troca do "include_once" para require_once.

 

Você pode colocar a direção usando /\ para melhorara a compatibilidade com linux

require_once("../\BD/\conecta_bd.php");

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, GabrielSennaMs disse:

@fspjonny 

 

Pode ser um erro no formato de codificação dos caracteres utilizado no documento, verifica se o arquivo está em UTF-8.

Recomendo a você escrever o arquivo de novo, e também recomendo a troca do "include_once" para require_once.

 

Você pode colocar a direção usando /\ para melhorara a compatibilidade com linux


require_once("../\BD/\conecta_bd.php");

 

Bom dia!

Sim toda codificação está em utf-8 sem BOM.

O problema do require_once é que se der algum rolo na página quando em produção o site todo ficará fora do ar, ao passo que usando include_once, o erro vai aparecer, mas o site vai ser utilizável ainda nas seções em que nada teve problema..o ruim é o aspecto visual daquele código de erro ou warning.

 

Eu usei o DIRECTORY_SEPARATOR,(serve tanto para windows como Linux) para que ele próprio determine a posição das barras, mesmo assim não resolve.

include_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "BD/conecta_bd.php");

O que eu tô abismado é que somente este novo módulo lang_br.php que criei está com isso, os demais antigos não estão, todos usam a mesma sintaxe e todos conseguem acessar o BD.

 

Se pesquisar na internet por : include_once(): Failed opening for inclusion (include_path='C:\xampp\php\PEAR') in, é gigante a lista de pessoas que tiveram o mesmo problema, só que as soluções ainda não me serviram.

 

Obrigado pela ajuda @GabrielSennaMs 👍

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde amigo,

 

Já tentou usar $_SERVER['DOCUMENT_ROOT'] para referenciar a partir da raiz?

 

no caso ficaria assim:

include_once($_SERVER['DOCUMENT_ROOT'].'/BD/conecta_bd.php');

 

Grande abraço.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@fspjonny

 

O seu include_once com o dirname(__FILE__), está apontando para mesma pasta que o arquivo lang_br, e não para a pasta raiz.

 

Caso ainda não tenha resolvido o seu problema utilize esse código.

$x = 0;

function preg_ls ($path=".", $rec=false, $pat="/.*/") {
    $pat = preg_replace("|(/.*/[^S]*)|s", "\\1S", $pat);
    while (substr($path,-1,1)=="/") $path=substr($path,0,-1);
    if (!is_dir($path)) $path=dirname($path);
    if ($rec!==true) $rec=false;
    $d = dir($path);
    $ret = Array();
    while (false !== ($e = $d->read())) {
        if (($e == ".") || ($e == "..")) continue;
        if ($rec && is_dir($path."/".$e)) {
            $ret = array_merge($ret,preg_ls($path."/".$e,$rec,$pat));
            continue;
        }
        if (!preg_match($pat,$e)) continue;
        $ret[]=$path."/".$e;
    }
    return $ret;
}

foreach (preg_ls("../BD", true, "/.*\.php/i") as $file){
	$x++;
	echo "Arquivo [".$x."]: ".$file." ";
	if(file_exists($file)){
		echo "encontrado.";
	}else{
		echo "não encontrado.";
	}
	if($file == "../BD/conecta_bd.php"){
		include_once($file);
	}
}

Ele vai verificar todos os arquivo com .php dentro da pasta BD, e caso ele tenha achado o arquivo conecta_bd.php ele vai incluir.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
43 minutos atrás, ArThDsL disse:

Boa tarde amigo,

 

Já tentou usar $_SERVER['DOCUMENT_ROOT'] para referenciar a partir da raiz?

 

no caso ficaria assim:


include_once($_SERVER['DOCUMENT_ROOT'].'/BD/conecta_bd.php');

 

Grande abraço.

Boa sugestão!!!, Não tinha me tocado de testar o Server document root, eu tentarei a noite e aviso, pois agora o servidor está em produção, então é melhor que eu tente a noite que tem menos gente, menos risco, etc...👍.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@fspjonny Opa, Tranquilo amigo!

 

Depois posta aqui pra gente saber se deu certo! :)

 

Grande abraço!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
29 minutos atrás, GabrielSennaMs disse:

@fspjonny

 

O seu include_once com o dirname(__FILE__), está apontando para mesma pasta que o arquivo lang_br, e não para a pasta raiz.

 

Caso ainda não tenha resolvido o seu problema utilize esse código.


$x = 0;

function preg_ls ($path=".", $rec=false, $pat="/.*/") {
    $pat = preg_replace("|(/.*/[^S]*)|s", "\\1S", $pat);
    while (substr($path,-1,1)=="/") $path=substr($path,0,-1);
    if (!is_dir($path)) $path=dirname($path);
    if ($rec!==true) $rec=false;
    $d = dir($path);
    $ret = Array();
    while (false !== ($e = $d->read())) {
        if (($e == ".") || ($e == "..")) continue;
        if ($rec && is_dir($path."/".$e)) {
            $ret = array_merge($ret,preg_ls($path."/".$e,$rec,$pat));
            continue;
        }
        if (!preg_match($pat,$e)) continue;
        $ret[]=$path."/".$e;
    }
    return $ret;
}

foreach (preg_ls("../BD", true, "/.*\.php/i") as $file){
	$x++;
	echo "Arquivo [".$x."]: ".$file." ";
	if(file_exists($file)){
		echo "encontrado.";
	}else{
		echo "não encontrado.";
	}
	if($file == "../BD/conecta_bd.php"){
		include_once($file);
	}
}

Ele vai verificar todos os arquivo com .php dentro da pasta BD, e caso ele tenha achado o arquivo conecta_bd.php ele vai incluir.

Ok, dou uma olhada no seu código mais tarde!👍

 

Posso estar errado mas, pelo que me lembro o dirname(__FILE__) ou o __DIR__, ambos pegam o diretório completo do arquivo em execução, como no caso eu chamo o conecta_bd.php, eu teria o caminho completo dele, o que não resultou positivamente, como expliquei.

 

A título de curiosidade para outros programadores, já que mencionei aqui, o  __DIR__ é igual ao dirname(__FILE__) , só que __DIR__ está presente a partir das versões 5.3 ou maiores do PHP, então por isso dependendo do provedor é mais seguro usar dirname(__FILE__) devido a alguns hosts rodarem a versão 5.2 do PHP ainda(poucos mas tem).👍

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo @ArThDsL, isso resolveu o problema de forma pontual, obrigado pela dica!👍

Agradeço também ao @GabrielSennaMs pela ajuda!👍

 

Encerrei este tópico com o problema resolvido!😁

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde amigo,

 

Fico feliz que deu certo! Qualquer coisa estamos aí!

 

Grande abraço :)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!