Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, boa tarde, tenho constantes no meu projeto que de uma para outra perdem seu valor quando são acessadas de outro arquivo, e depois de pesquisar no google sem conseguir resolver decidi postar a dúvida, deem uma olhada no erro:
Warning: require_once(DIR_SYSTEMstartup.php) [function.require-once]: failed to open stream: No such file or directory in C:\wamp\www\contribuinte\santacruz\index.php on line 157
Fatal error: require_once() [function.require]: Failed opening required 'DIR_SYSTEMstartup.php' (include_path='.;C:\php5\pear') in C:\wamp\www\contribuinte\santacruz\index.php on line 157
DIR_SYSTEM é uma constante definida no arquivo config_padrao.php, ao invés de imprimir o valor da constante, imprimiu o seu nome!!
session_cache_expire(10);
setlocale(LC_ALL, "pt_BR", "ptb");
require_once('config.php');
libxml_use_internal_errors(true); //nao exibir erros xml
$_SERVER['PAGE_ERROR'] = false;
// Nessa linha está chamando a constante sem valor
require_once(DIR_SYSTEM . 'startup.php');
config.php
$_dominio = 'http://localhost/contribuinte/';
$_cidade = 'santacruz';
$_portal = 'http://localhost/contribuinte/';
$_oracle = 'http://201.43.6.22:8080/Cidadao/';
$_template = $_portal . 'source/view/template/';
include($_portal . "source/config_padrao.php");
<?php
if(!isset($_dominio)) {
exit('A Variavel "$_dominio" nao foi setada no config!');
}
if(!isset($_cidade)) {
exit('A Variavel "$_cidade" nao foi setada no config!');
}
if(!isset($_portal)) {
exit('A Variavel "$_portal" nao foi setada no config!');
}
if(!isset($_oracle)) {
exit('A Variavel "$_oracle" nao foi setada no config!');
}
// CIDADE
if(!defined('CIDADE')) {
define('CIDADE', $_cidade);
}
// HTTP HTTPS
if(!defined('HTTP_ORACLE')) {
define('HTTP_ORACLE', $_oracle);
}
if(!defined('DIR_SYSTEM')) {
define('DIR_SYSTEM', $_portal . 'source/system/');
}
A minha questão é por que as constantes perderam o valor? Como faço para resolver isso?
Alguem ai me ajuda por favor, tem como configurar o PHP de modo que as variáveis não tenham valor em outro arquivo?
$_portal = 'http://localhost/contribuinte/';
Você também está tentando incluir os arquivos através da URL. Somente será possível realizar esse include alterando algumas configurações do php.ini.
Para o PHP deve-se, preferencialmente, utilizar caminhos absolutos ou relativos.
Aqui você encontra mais informações sobre algumas "peculiaridades" dos servidores windows e linux:
http://forum.imasters.com.br/topic/469242-include-com-variavel-global/
Deixa eu te explica porque eu desconsiderei isso, se você conseguir entender. O arquivo config.php tem o seguinte código
$_dominio = 'portaldocontribuinte.micromap.com.br';
$_cidade = 'santacruz';
$_portal = 'http://localhost/contribuinte/';
$_oracle = 'http://201.43.6.22:8080/Cidadao/';
$_template = $_portal . 'source/view/template/';
include($_portal . "source/config_padrao.php");
No arquivo config_padrao.php tem a seguinte validação
if(!isset($_dominio)) {
exit('A Variavel "$_dominio" nao foi setada no config!');
} exit('A Variavel "$_cidade" nao foi setada no config!');
} exit('A Variavel "$_portal" nao foi setada no config!');
} exit('A Variavel "$_oracle" nao foi setada no config!');
}
Realmente faz sentido o que você disse porque as variáveis do arquivo config.php perdem o valor, e da esse erro tela:
A Variavel $_dominio nao foi setada no config!
E a execução é encerrada é encerrada pelo exit(), mas como estou usando include no arquivo config.php, o arquivo que o incluiu é continuado, o que faz com que as constantes não sejam definidas, e para solucionar isso usei uma gambiarra, copiei o código do arquivo config, onde defini as variaveis $_dominio, $_cidade, $_postal, etc... no arquivo config_padrao.
Então as contantes foram definidas no e não conseguem ser lidas em outro arquivo ou em outro escopo, e o que é mais patético ainda é a variável $_dominio perder seu valor, se estou usando include essa variável não precisa ser global, então nao faz sentido ela perder seu valor
>
Você também está tentando incluir os arquivos através da URL. Somente será possível realizar esse include alterando algumas configurações do php.ini.
Para o PHP deve-se, preferencialmente, utilizar caminhos absolutos ou relativos.
Aqui você encontra mais informações sobre algumas "peculiaridades" dos servidores windows e linux:
http://forum.imasters.com.br/topic/469242-include-com-variavel-global/
Esse é um erro muito difícil de detectar porque o arquivo config_padrao.php é executado e mostra o erro, o problema realmente é de que as variáveis perdem o valor, mas o fato de que incluir os arquivos colocando a URL tinha alguma coisa a ver com isso, não entendi porque isso acontece.
Mudei o valor de $_portal para 'C:/wamp/www/contribuinte/' e funcionou tudo corretamente.
Você sabe como alterar o PHP.ini pra funcionar includes colocando a URL como você falou?
provavelmente, este include:
include($_portal . "source/config_padrao.php");
falhou, por isso as tuas constantes perderam o valor.
sempre inicie teus scripts pedindo para q eles mostrem os erros
ini_set('display_errors', 1);
e error_reporting E~ALL