Ir para conteúdo

Arquivado

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

Dian Carlos

Como fazer include com $SERVER_ROOT?

Recommended Posts

Olá amigos do iMasters.

 

Hoje estava vendo um código de um fórum em php e lá eu vi que os includes eram no estilo:

 

require_once $forum_root_path . 'inc/db.php';

 

Eu queria saber como eu posso fazer isso também, pois meus códigos quando tem um include fica com vários '../../../../inc/db.php', já tentei de várias formas só que não dá certo..

A que eu estou usando agora é:

 

define('SERVER_ROOT', $_SERVER['DOCUMENT_ROOT'] . '/');

require_once SERVER_ROOT . 'inc/db.php';

 

Onde ela está errada?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O diretório 'inc' esta na raiz, porque o $_SERVER['DOCUMENT_ROOT'] informa a raiz do seu projeto sendo assim você tem que informa os subdiretórios onde eles estão senão não funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites

O diretório 'inc' esta na raiz, porque o $_SERVER['DOCUMENT_ROOT'] informa a raiz do seu projeto sendo assim você tem que informa os subdiretórios onde eles estão senão não funciona

 

Mas como assim Wesley, como definir os subdiretórios? Você pode me dar um exemplo?

 

Meu esquema está assim:

define('SERVER_ROOT', $_SERVER['DOCUMENT_ROOT'] . '/');

require_once SERVER_ROOT . 'ni10/inc/db.php';
require_once SERVER_ROOT . 'ni10/inc/functions.php';

 

E o seguinte erro é retornado:

Warning: require_once(C:/xampp/htdocs/desenvolvimento/ni10/inc/db.php) [function.require-once]: failed to open stream: No such file or directory in C:\xampp\htdocs\desenvolvimento\ni10\admin\inc\conf.php on line 17

 

Acho que mesmo que esse documento 'conf.php' esteja no diretório onde esses includes estão 'na pasta inc/' devia dar certo..

 

Onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A partir da raiz você tem que adicionar todos os subdiretórios até o arquivo, $_SERVER['DOCUMENT_ROOT'] lhe informa a raiz do projeto. Se o arquivo que você quer esteja em outros diretórios você deve informar o nome dos mesmos.

 

No seu exemplo se o arquivo que esta fazendo o require esta no mesmo diretório dos demais arquivos tente usar:

 dirname(__FILE__) . '/db.php'; 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Wesley, resolvido..

 

Agora o php ficou da seguinte maneira:

define('SERVER_ROOT', dirname(__FILE__) . '\\');

require_once SERVER_ROOT . 'db.php';
require_once SERVER_ROOT . 'functions.php';

 

Isso funciona pra um include que esteja na mesma pasta do arquivo.

 

Agora pra um include das subpastas na pasta 'inc' eu usei o código:

 

define('INCLUDE_PATH', dirname(__FILE__) . '\\');
$siteadmin_root_path = substr(INCLUDE_PATH, 0, -17) . '\\'; //Volta 17 caracteres que é o número dos caracteres do caminho da pasta, com as barras.

require_once $siteadmin_root_path . 'inc\conf.php';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega você fez muitas voltas para uma coisa simples.

 

define('SERVER_ROOT', dirname(__FILE__) . '\\');

Não defina isto como o SERVER_ROOT, pois dirname(__FILE__) irá lhe informar o caminho da pasta onde esta sendo feito o include.

 

Exemplo: o arquivo db.php esta localizado dentro de inc/dados/db.php , sendo que o diretório 'inc' está na raiz

O arquivo que esta fazendo o require esta dentro da pasta 'inc/' , então você utiliza

 require_once(dirname(__FILE__) .'/dados/db.php');

 

Com $_SERVER['DOCUMENT_ROOT'] você faria da seguinte forma:

require_once($_SERVER['DOCUMENT_ROOT'].'/inc/dados/db.php') 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Wesley, eu entendi, mas no meu sistema existem arquivos em subpastas, e esses arquivos fazem o include na pasta 'inc' que fica na raiz da aplicação.

 

Ex >

- A pagina 'index.php' está na raiz da aplicação.

- Para dar o include no arquivo 'conf.php' que está na pasta 'inc' na raiz do site eu usei:

 

define('INCLUDE_PATH', dirname(__FILE__) . '\\');

require_once INCLUDE_PATH . 'inc\conf.php';

 

Que também poderia ser simplesmente:

 

require_once dirname(__FILE__) . '\inc\conf.php';

 

ou só:

 

require_once 'inc/conf.php'

 

- A página 'uHome.php' que está na pasta 'raiz > layout > elements', ela faz um include dentro da pasta 'inc' que esta na raiz. Eu poderia simplesmente por:

 

$siteadmin_root_path = $_SERVER['DOCUMENT_ROOT'] . '/ni10/admin/';

require_once $siteadmin_root_path . 'inc/conf.php';

 

Mas a questão é que esse caminho 'ni10/admin' não é definitivo, pois eu estou desenvolvendo em servidor local, onde há várias pastas com sites, e essa pasta é um deles. Então pra quando eu mandar pra internet eu não ter que mudar as pastas para somente '/admin' eu fiz esse esquema do substr().

 

E também no caso de essa área administrativa não ser instalada em uma pasta chamada '/admin'. Pode ser instalado numa pasta com o nome de 'adm', 'administração', 'ipwpainel', etc. Então o sistema não vai ficar limitado a somente uma pasta.

 

Eu não sei se tem uma maneira mais fácil de fazer isso, mas se tiver eu vou aprender...

 

Mas obrigado pela ajuda ai.

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.