Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá. Recentemente fiquei sabendo do SSI (Server Side Includes) e me veio uma dúvida: teria alguma vantagem em usar esse método de inclusão ao invés do PHP?
Suponhamos que eu tenha meu cabeçalho (header.htm) e rodapé (footer.htm) separados em seus respectivos arquivos. Qual seria a vantagem de usar algum desses dois métodos?
<body>
<!-- #include virtual="header.htm" -->
...
<!-- #include virtual="footer.htm" -->
</body>
<body>
<?php include "header.htm"; ?>
...
<?php include "footer.htm"; ?>
</body>
Obrigado pela atenção, e até mais.
Hm... foi o que imaginei. Mas eu acabei de reestruturar mentalmente a forma como vou organizar minhas páginas e vai ter no mínimo 4 includes de partes do layout, além dos includes de scripts php, então, acho que ficaria mais organizado usar o método do ssi para layout...
Ah, uma coisa: tenho uma página header.php; tenho a página index.php. Na header.php há includes para scripts php. Se eu fizer include da header.php na index através do ssi as funções incluídas no header vão estar disponíveis na index também?
header.php
<?php include "base.func.php"; ?>
<html>
<head>
<title>Teste</title>
</head>
index.php
<!-- #include virtual="header.php" -->
<body>
<?php algumafunçãodobase.func.php(); ?>
</body>Estou sem um servidor web no momento para testar isso, se alguém já tiver a resposta ou puder testar pra confirmar, agradeço :D
Que eu saiba SSI não funciona com arquivos com extensão PHP. Só .shtml. Essa página .shtml pode ser gerada por um outro programa, mas ela é estática, não há código nela interpretado no ar. Há também outras coisas que podem ser feitas com SSI, como mostrar a data atual ou criar instruções condicionais usando cabeçalhos HTTP do Apache. Mas processar código PHP, não.
Posso adicionar os .php na linha AddOutputFilter INCLUDES... :)
Então, seria possível o que falei no tópico anterior (após adicionar arquivos php na linha já citada...)?
Vou testar aqui.
Até agora o include PHP funcionou, mas apenas se o arquivo que chama estiver no diretório-raiz.
Fiz assim:
AddType application/x-httpd-php .php
AddOutputFilter INCLUDES .php
-
Teste aqui resultou que arrays super-globais nos arquivos inclusos eram acessíveis, comandos 'echo' e funções internas também, mas variáveis e funções definidas, não.
Códigos que utilizei abaixo.
index.php
<!--#include virtual='header.php' -->
<?php
echo $varBase;
echo $cabecalho;
diga(); // a execução é interrompida aqui
imprimaAlgo();
basefunc.php
<?php
echo "basefunc";
$varBase = "Variavel base";
function imprimaAlgo() {
echo "Algo!";
}
header.php
<?php
include "basefunc.php";
$cabecalho = "Variavel cabecalho";
function diga() {
echo "O que?";
}
?>
<header>
<h1><?php echo "Cabecalho"; ?></h1>
</header>
Retornou:
basefunc<header>
<h1>Cabecalho</h1>
</header>
Notice: Undefined variable: varBase in \htdocs\index.php on line 3
Notice: Undefined variable: cabecalho in \htdocs\index.php on line 5
Fatal error: Call to undefined function diga() in \htdocs\index.php on line 7
Obrigado :)
Então vou usar assim (acho que até melhor que o método anterior):
header.htm
<html>
<head>
<title>Título inserido por JS...</title>
</head>
index.php
<?php include "base.func.php"; ?>
<!-- #include virtual="header.htm" -->
<body>
...
</body>
...
Assim não tem motivo para falhar, a não ser que o base.func.php, por algum motivo, só seja incluído após o header.htm...
Resumindo: esse SSI só serve para conteúdo estático.
Obrigado aí, até mais :D
Não gosto de usar frameworks, perde-se muito tempo estudando-os, e não chega a ser tão complexa a forma de organização do layout que eu imaginei aqui a ponto de usar um framework dedicado a isso. Além disso, dezenas de comentários internet a fora de pessoas dizendo não terem entendido como smarty (se não me engano algo sobre o twing) funcionam zeraram as chances de eu usá-los :unsure:
Smarty e Twig não são frameworks, mas sim template engines.
Você terá que aprender a usá-los mais cedo ou mais tarde. São fáceis de usar, tenho certeza que em meia hora você já estará acostumado.
:thumbsup:
Ah, algum dia estudo sobre eles, mas nesse projeto aqui não pretendo usar nada pronto, quero fazer tudo do 0.
Em tese, SSI é mais rápido pois não é preciso chamar o interpretador PHP para processá-lo, o Apache já dá conta do recado. Mas creio que a diferença é mínima e é mais prático usar php include, além de que o mod_include pode não estar ativado no servidor e você pode não ter acesso a administração (em uma hospedagem compartilhada, por exemplo).