3l3tr1c 1 Denunciar post Postado Fevereiro 3, 2012 Olá! Estava desenvolvendo normalmente até que hoje deu uma "lepra" nos meus arquivos (ou servidor, nao sei). O dito cujo é o seguinte: Quando faço uma inclusão por meio do "comando" INCLUDE (e.g: include "tratamentoErros.php";) o servidor local não acha o arquivo no diretório corrente (local). Se eu fizer assim: include "./tratamentoErros.php";, ou seja, por um PONTO e uma BARRA INVERTIDA antes do nome do arquivo para referenciar o diretório local o servidor local reconhece o include, MASSSS, se eu incluir o arquivo tratamentoErros.php em outro arquivo que está em um diretório diferente (e.g: include "outroDiretorio/algumaCoisa.php"), o servidor vai "achar" que o include que está no arquivo tratamentoErros.php é para "outroDiretorio". Ou seja, se eu por "./" em um algum include, e incluir o arquivo que contém o include em outro diretorio ele vai sempre buscar no diretorio corrente, e se eu tirar essa m***** ele nao reconhece include algum. E agora? O que eu estou usando: .HTACCESS RewriteEngine On RewriteCond ${REQUEST_FILENAME} !-f RewriteCond ${REQUEST_FILENAME} !-d #ErrorDocument 404 /login.php #se o endereço é /@Testando, o servidor troca implicitamente por index.php?pg=testando RewriteRule ^\@([a-zA-Z0-9]+)$ index.php?pg=$1 [L,QSA] INDEX.PHP <?php if(isset($_GET['pg'])) $pg = $_GET['pg']; else $pg = NULL; switch($pg){ case 'login': default: include "login.php"; //<<<<<<< ESSA PORCARIA NAO ESTÁ FUNCIONANDO, TEM QUE POR ISTO "./" ANTES DA PÁGINA, MAS SE POR ISSO E EU INCLUIR ESSE ARQUIVO (INDEX.PHP) EM OUTRO ARQUIVO QUE NAO ESTÁ NESSE DIRETORIO DÁ ERRO, POR QUE ELE "ACHA" QUE O INCLUDE É SEMPRE NO DIRETORIO CORRENTE. break; case 'control': include "painel.php"; break; case 'painel': include "painel.php"; break; case 'Painel': include "painel.php"; break; case 'user': include "login.php"; break; case 'Galeria': include "galeria.php"; break; case 'galeria': include "galeria.php"; break; case 'Artigos': include "artigos.php"; break; case 'artigos': include "artigos.php"; break; case 'sair': include "sair.php"; break; case 'logout': include "sair.php"; break; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Fevereiro 3, 2012 Experimente include/require com caminhos absolutos. No primeiro script da aplicação, que fique na raiz da mesma, seja innex.php ou config.php (que normalmente é incçuído no index), defina uma constante de diretório base: define( 'ROOT', __DIR__ . DIRECTORY_SEPARATOR ); E todo include/require(_once) que fizer, ao invés de chamar só o arquivo, preceda-o com essa constante: include ROOT . 'galeria.php'; Supondo que galeria.php também esteja na raiz da aplicação e o servidor online seja baseado em Linux, essa instrução quivalerá a: include '/public_html;galeria.php'; No windows: C:\xampp\htdocs\teste\galeria.php Supondo que esteja usando o XAMPP e a aplicação resida num diretório chamado teste, dentro de htdocs, que o diretório padrão do Apache configurado durante a instalação do pacote. Compartilhar este post Link para o post Compartilhar em outros sites
3l3tr1c 1 Denunciar post Postado Fevereiro 3, 2012 Olá Augusto! Antes de tudo, sou grato por sua atenção. Confesso-lhe que havia pensado nisso, na declaração absoluta dos arquivos. Mas, além dos diretórios locais serem diferentes dos diretórios remotos ainda há a possibilidade de realocação de arquivos. Imagine ter que abrir 10 arquivos, por exemplo, para trocar a instrução para o diretório raiz sempre que se precise realocar os arquivos. No servidor remoto isso não ocorre, mas eu preciso fazer os testes locais antes de envia os arquivos, por isso me preocupo em rodar localmente. Até ontem nada disso acontecia, todos os includes estavam funcionando numa boa, hoje o problema começou. Eu até instale o XAMPP, eu usava do WAMP, mas o problema persistiu. Se nada disso ocorria e nem ocorre no servidor remoto, porque isso agora, porque o servidor local nao reconhece a inclusao de um arquivo no mesmo diretório dele? As mensagens de erros que aparecem são: Warning: include(\\LOGIN.PHP) [function.include]: failed to open stream: No such file or directory in C:\xampp\htdocs\med\php\painel_\index.php on line 16 Warning: include() [function.include]: Failed opening 'login.php' for inclusion (include_path='/') in C:\xampp\htdocs\med\php\painel_\index.php on line 16 O que eu achei estranho foi isso: "include(\\LOGIN.PHP)", porque o servidor local reportou "\\" no endereço do arquivo se eu nos pus isso? Mais uma coisa, eu fiz o que voce disse, Augusto. Na index eu defini ROOT e precedi os includes com essa definicao. Mas ele nao reconhece o direitório "raiz da raiz", no caso local o "localhost" e no remoto o "public_html". O que diabos pode está acontecendo??? :cry: Compartilhar este post Link para o post Compartilhar em outros sites
3l3tr1c 1 Denunciar post Postado Fevereiro 4, 2012 [RESOLVIDO] Solução: Uma instrução errado no .HTACCESS que se encontrava no diretório padrao manda procurar todos os includes em um diretório que nao correspondia ao correto. No .HTACCESS havia essa instrução, eu a removi e deu certo: php_value include_path "/" Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Fevereiro 4, 2012 Eu até iria responder ontem que o include_path afeta include/require(_once), mas minha Internet estava caindo toda hora, daí desisti. Mas que bom que, diferente da maioria, você tentou pescar sozinho, ao invés de esperar o peixe limpo e assado pronto pra comer. Compartilhar este post Link para o post Compartilhar em outros sites