Pergunta

Para um projeto específico que tenho, nenhum código do lado do servidor é permitido.Como posso criar o site em php (com inclusões, condicionais, etc) e depois convertê-lo em um site html estático que posso fornecer ao cliente?

Atualizar:Obrigado a todos que sugeriram o wget.Isso é o que eu usei.Eu deveria ter especificado que estava em um PC, então peguei a versão do Windows aqui: http://gnuwin32.sourceforge.net/packages/wget.htm.

Foi útil?

Solução

Se você tiver um sistema Linux disponível para usar wget:

wget -k -K  -E -r -l 10 -p -N -F -nH http://website.com/

Opções

  • -k:converter links em relativos
  • -K:mantenha as versões originais dos arquivos sem as conversões feitas pelo wget
  • -E:renomeie arquivos html para .html (se eles ainda não tiverem uma extensão htm(l))
  • -r:recursivo… claro que queremos fazer uma cópia recursiva
  • -l 10:o nível máximo de recursão.se você tiver um site muito grande, talvez seja necessário colocar um número maior, mas 10 níveis devem ser suficientes.
  • -p:baixe todos os arquivos necessários para cada página (css, js, imagens)
  • -N:Ative o carimbo de data/hora.
  • -F:Quando a entrada é lida de um arquivo, force-a a ser tratada como um arquivo HTML.
  • -nH:Por padrão, o wget coloca os arquivos em um diretório com o nome do host do site.Isso desabilitará a criação desses diretórios de nomes de host e colocará tudo no diretório atual.

Fonte: Blog de Jean-Pascal Houde

Outras dicas

Eu fiz isso no passado adicionando:

ob_start();

No topo das páginas e depois no rodapé:

$page_html = ob_get_contents();
ob_end_clean();
file_put_contents($path_where_to_save_files . $_SERVER['PHP_SELF'], $page_html);

Você pode querer converter extensões .php em .html antes de inserir o HTML nos arquivos.Se você precisar gerar múltiplas páginas com variáveis, uma opção bastante fácil é anexar o nome do arquivo com md5sum de todas as variáveis ​​GET, você só precisa alterá-las no HTML também.Então você pode converter:

somepage.php?var1=hello&var2=hullo

para

somepage_e7537aacdbba8ad3ff309b3de1da69e1.html

feio, mas funciona.

Às vezes você pode usar PHP para gerar javascript para emular alguns recursos, mas isso não pode ser automatizado com muita facilidade.

crie seu site e use uma ferramenta de espelhamento como wget ou espelho lwp para pegar uma cópia estática

Crie o site normalmente e use o software spidering para gerar uma cópia HTML.

HTTrack é um software que usei antes.

Uma maneira de fazer isso é criar o site em PHP normalmente e fazer com que um script capture as páginas da web (através de HTTP - você pode usar wget ou escrever outro script php que use apenas file() com URLs) e salvá-los no locais de sites públicos quando você terminar.Então você pode simplesmente executar o script novamente quando decidir alterar as páginas novamente.Este método é bastante útil quando você tem um banco de dados que muda lentamente e muito tráfego, pois pode eliminar todas as consultas SQL no site ativo.

Se você usar o modx, ele possui uma função integrada para exportar arquivos estáticos.

Se você tiver várias páginas, com todos os tipos de variáveis ​​de solicitação e outros enfeites, provavelmente uma das ferramentas de spidering mencionadas pelos outros comentaristas (wget, lwp-mirror, etc.) seria a solução mais fácil e robusta.

No entanto, se o número de páginas que você precisa obter for baixo, ou pelo menos gerenciável, você tem algumas opções que não requerem ferramentas de terceiros (não que você deva desconsiderá-las SÓ porque são de terceiros).

  1. Você pode usar php na linha de comando para que ele seja gerado diretamente em um arquivo.

    php myFile.php > myFile.html

    Usar esse método pode ser doloroso (embora você possa colocar tudo em um script de shell) e não permite passar variáveis ​​da mesma maneira (por exemplo: php myFile.php?abc=1 não vai funcionar).

  2. Você poderia usar outro arquivo PHP como um script de "construção" que contém uma lista de todos os URLs desejados e depois os captura via file_get_contents() ou file() e os grava em um arquivo local.Usando este método, você também pode verificar se o arquivo foi alterado (md5_file() deve funcionar para isso), então você saberá o que dar ao seu cliente, caso ele queira apenas atualizações.

  3. Seguindo o item 2, antes de gravar a saída no arquivo, verifique se há URLs locais e adicione-os à sua lista de arquivos para download.Enquanto estiver lá, altere esses URLs para vincular ao nome que você eventualmente nomeará para sua saída, para que você tenha uma web funcional no final.Nota de cautela aqui - se isso parece bom, você provavelmente poderia usar uma das ferramentas que já existem e fazer isso por você.

Alternativamente ao wget você pode usar (Win|Web)HTTrack (Local na rede Internet) para pegar a página estática.O HTTrack até corrige links para arquivos e documentos para corresponder à saída estática.

Eu faço isso em meu próprio site para certas páginas que certamente não serão alteradas - simplesmente executo um script de shell que pode ser transformado (aviso:pseudocódigo bash):

find site_folder -name \*.static.php -print -exec Staticize {} \;

com Staticize sendo:

# This replaces .static.php with .html
TARGET_NAME="`dirname "$1"`/"`basename "$1" .static.php`".html
php "$1" > "$TARGET_NAME"

wget é provavelmente o método mais completo.Se você não tiver acesso a isso e tiver um layout baseado em modelo, você pode querer usar o Savant 3.Eu recomendo o Savant 3 em vez de outros sistemas de template como o Smarty.

Savant é muito leve e usa PHP como linguagem de modelo, não como uma sublinguagem proprietária.O comando que você deseja procurar é fetch(), que irá "compilar" seu modelo e colocá-lo em uma variável que você pode gerar.

http://www.phpsavant.com/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top