Ir ao conteúdo

PHP Erro ao tentar conectar BD com Xampp


Ir à solução Resolvido por ArThDsL,

Posts recomendados

Postado

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!

Postado

@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");

 

Postado
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 👍

  • Solução
Postado

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.

Postado

@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.

Postado
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...👍.

Postado
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).👍

Postado

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!😁

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!