Domanda

Per un particolare progetto che ho, non è consentito alcun codice lato server.Come posso creare il sito web in php (con include, condizionali, ecc.) e poi convertirlo in un sito HTML statico da poter fornire al cliente?

Aggiornamento:Grazie a tutti coloro che hanno suggerito wget.Questo è quello che ho usato.Avrei dovuto specificare che ero su PC, quindi ho preso la versione per Windows da qui: http://gnuwin32.sourceforge.net/packages/wget.htm.

È stato utile?

Soluzione

Se hai un sistema Linux a tua disposizione usa wget:

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

Opzioni

  • -K :convertire i collegamenti in relativi
  • -K :mantenere le versioni originali dei file senza le conversioni effettuate da wget
  • -E:rinominare i file html in .html (se non hanno già un'estensione htm(l))
  • -R :ricorsivo... ovviamente vogliamo fare una copia ricorsiva
  • -l 10:il livello massimo di ricorsione.se hai un sito web molto grande potresti dover inserire un numero più alto, ma 10 livelli dovrebbero essere sufficienti.
  • -P :scarica tutti i file necessari per ogni pagina (css, js, immagini)
  • -N :Attiva la registrazione temporale.
  • -F :Quando l'input viene letto da un file, forzalo a essere trattato come un file HTML.
  • -nH:Per impostazione predefinita, wget inserisce i file in una directory denominata in base al nome host del sito.Ciò disabiliterà la creazione di quelle directory del nome host e inserirà tutto nella directory corrente.

Fonte: Il blog di Jean-Pascal Houde

Altri suggerimenti

L'ho fatto in passato aggiungendo:

ob_start();

Nella parte superiore delle pagine e poi nel footer:

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

Potresti voler convertire le estensioni .php in .html prima di inserire l'HTML nei file.Se devi generare più pagine con variabili, un'opzione abbastanza semplice è aggiungere al nome del file la somma md5 di tutte le variabili GET, devi solo modificarle anche nell'HTML.Quindi puoi convertire:

somepage.php?var1=hello&var2=hullo

A

somepage_e7537aacdbba8ad3ff309b3de1da69e1.html

brutto ma funziona.

A volte puoi utilizzare PHP per generare javascript per emulare alcune funzionalità, ma ciò non può essere automatizzato molto facilmente.

costruisci il tuo sito, quindi utilizza uno strumento di mirroring come wget O lwp-mirror per prendere una copia statica

Crea il sito normalmente, quindi utilizza il software di spidering per generare una copia HTML.

HTTrack è il software che ho usato prima.

Un modo per farlo è creare il sito in PHP normalmente e fare in modo che uno script catturi effettivamente le pagine web (tramite HTTP: puoi usare wget o scrivere un altro script php che usa solo file() con gli URL) e salvarli nel file posizioni pubbliche dei siti Web quando hai "finito".Quindi puoi semplicemente eseguire nuovamente lo script quando decidi di cambiare nuovamente le pagine.Questo metodo è molto utile quando si dispone di un database che cambia lentamente e molto traffico, poiché è possibile eliminare tutte le query SQL sul sito live.

Se usi modx ha una funzione integrata per esportare file statici.

Se hai un numero di pagine, con tutti i tipi di variabili di richiesta e quant'altro, probabilmente uno degli strumenti di spidering menzionati dagli altri commentatori (wget, lwp-mirror, ecc.) sarebbe la soluzione più semplice e robusta.

Tuttavia, se il numero di pagine che devi ottenere è basso, o almeno gestibile, hai alcune opzioni che non richiedono strumenti di terze parti (non che dovresti scartarle SOLO perché sono di terze parti).

  1. Puoi usare php sulla riga di comando per visualizzarlo direttamente in un file.

    php myFile.php > myFile.html

    L'uso di questo metodo potrebbe diventare doloroso (anche se potresti inserire tutto in uno script di shell) e non ti consente di passare variabili nello stesso modo (ad esempio: php myFile.php?abc=1 non funzionerà).

  2. Potresti utilizzare un altro file PHP come script "build" che contiene un elenco di tutti gli URL desiderati e poi li prende tramite file_get_contents() O file() e li scrive in un file locale.Usando questo metodo, puoi anche fargli controllare se il file è cambiato (md5_file() dovrebbe funzionare per quello), così saprai cosa offrire al tuo cliente, nel caso volessero solo aggiornamenti.

  3. Oltre al punto 2, prima di scrivere l'output su file, esegui la scansione degli URL locali e quindi aggiungili all'elenco dei file da scaricare.Già che ci sei, modifica gli URL per collegarli a ciò che alla fine chiamerai il tuo output in modo da avere una rete funzionante alla fine.Nota di cautela qui: se suona bene, potresti probabilmente utilizzare uno degli strumenti già esistenti e farlo per te.

In alternativa a wget potresti usare (Win|Web)HTTrack (Sito web) per catturare la pagina statica.HTTrack corregge anche i collegamenti a file e documenti per farli corrispondere all'output statico.

Lo faccio sul mio sito web per alcune pagine che è garantito che non cambieranno: eseguo semplicemente uno script di shell che potrebbe essere ridotto (avviso:pseudocodice bash):

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

con Staticize essendo:

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

wget è probabilmente il metodo più completo.Se non hai accesso a questo e disponi di un layout basato su modelli, potresti voler esaminare l'utilizzo di Savant 3.Consiglio vivamente Savant 3 rispetto ad altri sistemi di modelli come Smarty.

Savant è molto leggero e utilizza PHP come linguaggio modello, non un sottolinguaggio proprietario.Il comando che vorresti cercare è fetch(), che "compilerà" il tuo modello e lo inserirà in una variabile che puoi generare.

http://www.phpsavant.com/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top