Mecanismos de construção das páginas públicas e restritas

O funcionamento do SPIP baseia-se em dois pontos de entrada para o site:

  1. Público: index.php alias spip.php na raiz
  2. Restrito: ecrire/index.php

A página solicitada é definida, em ambos os casos, pelos argumentos GET ou POST associados à requisição. Veremos mais à frente quais são os principais.

Com raras exceções (a priori personalização), todos os outros scripts presentes na árvore de diretórios não são executáveis diretamente, mas apenas incluíveis. Geralmente, eles estão "protegidos" por um teste inicial:

// proteger
if (!defined("_ECRIRE_INC_VERSION")) {
	return;
}

Isto verifica se a constante _ECRIRE_INC_VERSION está definida, o que não seria o caso se o script fosse carregado diretamente.

Esta constante é definida por ecrire/inc_version.php que constitui a pedra fundamental da arquiterua do SPIP. Este script é efetivamente incluído praticamente no início pelos index public ou privé.

Para o index público, isso ocorre pela inclusão inicial de ecrire/public.php: à parte desta inclusão, pode-se verificar que o index está praticamente vazio.

ecrire/inc_version.php

Este script é comum a todos os componentes do SPIP. É ele que realiza as definições, inicializações e inclusões básicas que determinam o funcionamento de todo o resto. Ele inicializa as constantes e as variáveis globais necessárias ao funcionamento do SPIP, nomeadamente as que garantem a sua portabilidade nas diferentes plataformas.

Bem cedo ao ser carregado, ele inclui os ficheiros:

  • inc/utils.php, que contém as funções indispensáveis ao SPIP (ver mais à frente)
  • o script opcional, que não consta da distribuição, chamado
    mes_options.php
    que permite modular esta inicialização sem ter que alterar o ficheiro
    inc_version.php.

Desenrolar do código:

  • definição da constante "chave" _ECRIRE_INC_VERSION apresentada acima
  • definição das constantes que representam os diretórios básicos do SPIP, particularmente _DIR_RACINE, raiz do site, e _DIR_RESTREINT, diretório ecrire/ nos quais todas as outras constantes de diretório serão baseadas, ver o detalhe no código.
  • busca, sem ainda o incluir, o script mes_options.php historicamente em ecrire/ e, numa instalação normalizada, em config/
  • Inicialização de todas as variáveis globais básicas do SPIP, incluindo as variáveis de personalização, ver index técnico de spip.net
  • inclusão de inc/utils.php
  • inclusão de mes_options.php opcional
  • chamada de spip_initialisation() se mes_options ainda não o tenha feito (ao particularizar eventualmente esta inicialização). Ela recebe como parâmetro os quatro diretórios básicos do SPIP : config/, IMG/, tmp/ e local/ e:
    • define, a partir deles, todos os diretórios necessários ao SPIP e as autorizações que lhes são atribuídas.
    • recupera e desinfecta todos os argumentos da requisição: GET, POST, COOKIES e ambiente do servidor.
    • Instala o módulo de leitura/escrita/exclusão de ficheiros necessários, entre outros, a todos os caches
    • comanda o carregamento dos metas, a configuração do SPIP, a partir da base de dados... e incidentalmente, a conexão a esta base.
  • carrega os plugins a partir do cache tmp/charger_plugins_options.php, se necessário, gerando esse script.

Se estiver a proceder à instalação, inc_version.php tem um funcionamento particular que não será abordado aqui.

inc/utils.php

Este script não realiza nenhuma ação mas define as funções utilitárias fundamentais do SPIP. São mais de cinquenta! Abaixo, as mais importantes:

  • find_in_path(): para permitir a personalização do site, a maioria dos ficheiros, sejam scripts, templates ou ficheiros servidos, como as imagens, são buscados no "path", pela ordem dos diretórios:
    • templates: os definidos opcionalmente em $GLOBALS['dossier_squelettes'] e squelettes/
    • plugins ativos
    • ecrire/
    • dist/
    • raiz do site
  • include_spip(): permite incluir um script PHP de acordo com o esquema anterior, podendo assim substituí-lo, fornecendo uma alternativa (normalmente chamada de "fork")
  • charger_fonction(): cenário idêntico, mas adaptado a uma função, podendo esta ser definida não importa onde. O mecanismo busca a função pelo seu nom() e, se não a encontrar, pelo seu nom_dist() como feito historicamente (todos os ficheiros do Spip são cerregados por essas duas últimas funções).
  • spip_log(): utilitário que permite registar os logs, tipicamente em tmp/spip.log, para o desenvolvimento e acompanhamento de um site. Note que, sendo baseado num var_export(), pode-se passar qualquer tipo de parâmetro a ser rastreado.
  • spip_query(): todas as consultas SQL devem passar por esta função. Importante, é preciso especificar os nomes das tabelas como spip_nometabela, a função encarrega-se de trocar "spip_" pelo verdadeiro prefixo das tabelas da instalação.
  • _q(): esta função protege as variáveis inclusas numa consulta SQL (escapamento). É fundamental passar qualquer variável usada numa consulta SQL para evitar ataques por injeção.
  • _request(): permite recuperar variáveis de argumento da consulta, sem se preocupar que elas se originem de um GET, POST ou COOKIE e ficar assegurado de que elas estão corretamente "limpas".
  • spip_initialisation() citado acima.

config/mes_options.php

Este script opcional permite configurar as constantes, variáveis de personalização e funções do SPIP "à sua maneira".
Ver a matéria dedicada.

Argumento principal da requisição

Como vimos, os únicos acessos ao SPIP fazem-se pelo index.php na raiz, ou em ecrire/. A página solicitada é determinada pelos argumentos que acompanham a requisição, podem ser GET ou POST. Estes argumentos podem ser explícitos ou gerados pelo URL rewriting, se usar os URLs limpos.

Trata-se de:

  • page: é o único argumento para o espaço público. Ele especifica a página solicitada, como sommaire (o padrão), article ... É interpretado por ecrire/public.php para determinar o fundo principal (o template.html de mesmo nome que o argumento page) a ser enviado após "preenchido" em função dos outros parâmetros da requisição, como id_article.
  • action: embora este parâmetro também seja interpretado por ecrire/public.php, trata-se aqui de uma requisição que realiza (se tudo correr bem) uma alteraçãonos dados do servidor. O SPIP fornece um mecanismo que permite securizar tal requisição. O script usado é action/xxx.php onde xxx é o valor de action
  • exec: é tipicamente o argumento de um URL "restrito". O seu valor xxx indica o script ecrire/exec/xxx.php que será usado.

Ver Expandir o SPIP

Autor Ricardo Porto Publié le :

Traductions : English, français, Português