2008-09-15 20 views
16

Para un proyecto en particular que tengo, no se permite el código del lado del servidor. ¿Cómo puedo crear el sitio web en php (con includes, condicionales, etc.) y luego convertirlo en un sitio html estático que puedo darle al cliente?¿Cómo puedo crear un sitio en php y hacer que genere una versión estática?

Actualización: Gracias a todos los que sugirieron wget. Eso es lo que usé. Debería haber especificado que estaba en una PC, así que agarré la versión de Windows desde aquí: http://gnuwin32.sourceforge.net/packages/wget.htm.

Respuesta

38

Si tiene un sistema Linux disponible para usted usar wget:

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

Opciones

  • -k: convertir vínculos de relación
  • -K: mantener un versiones originales de los archivos sin las conversiones realizadas por wget
  • -E: renombrar archivos html a .html (si es que Don ya tiene una extensión htm (l)
  • -r: recursivo ... por supuesto, queremos hacer una copia recursiva
  • -l 10: el nivel máximo de recursividad. si tienes un sitio web realmente grande, es posible que necesites poner un número más alto, pero 10 niveles deberían ser suficientes.
  • -p: descargue todos los archivos necesarios para cada página (css, js, imágenes)
  • -N: active el sellado de tiempo.
  • -F: Cuando se lee la entrada de un archivo, forzarlo a tratarse como un archivo HTML.
  • -nH: De manera predeterminada, wget coloca los archivos en un directorio con el nombre del nombre de host del sitio. Esto desactivará la creación de esos directorios de nombre de host y pondrá todo en el directorio actual.

Fuente: Jean-Pascal Houde's weblog

+0

Con apache y RewriteRule todavía puede encontrar las páginas antiguas sin extensión html (como http://www.example.com/hello, que se convierte en http://www.example.com/hello.html). Por ejemplo, "RewriteRule^hello $ /hello.html [PT]" – Pietro

+0

Consulte aquí para obtener ideas sobre cómo agregar la extensión .html a todas las solicitudes entrantes: http://stackoverflow.com/questions/5745490/rewrite-rule-to -add-html-extension – pfrenssen

1

Cree el sitio de forma normal, luego use el software spidering para generar una copia HTML.

HTTrack es un software que he usado anteriormente.

3

construir su sitio, a continuación, utilizar una herramienta para descargar como wget o lwp-mirror hacerse con una copia estática

1

Una forma de hacer esto es crear el sitio en PHP como normal, y tienen un guión realmente agarrar las páginas web (a través de HTTP: puede usar wget o escribir otro script php que solo use file() con URL) y guardarlos en las ubicaciones del sitio web público cuando esté "hecho". Luego puede ejecutar el script nuevamente cuando decide cambiar las páginas nuevamente. Este método es bastante útil cuando tiene una base de datos que cambia lentamente y mucho tráfico, ya que puede eliminar todas las consultas SQL en el sitio en vivo.

0

lo hago en mi propio sitio web para ciertas páginas que están garantizados para no cambiar - que sólo tiene que ejecutar un script de shell que podrían ser hervida a (advertencia: pseudocódigo bash):

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

con Staticize siendo:

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

he hecho esto en el pasado mediante la adición:

ob_start(); 

En la parte superior de las páginas y luego en el pie de página:

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

Usted Es posible que desee convertir extensiones .php a .html antes de copiar el HTML en los archivos. Si necesita generar varias páginas con variables, una opción bastante fácil es agregar el nombre de archivo con md5sum de todas las variables GET, solo necesita cambiarlas en el HTML también. Lo que puede convertir:

somepage.php?var1=hello&var2=hullo 

a

somepage_e7537aacdbba8ad3ff309b3de1da69e1.html 

feo, pero funciona.

A veces puede usar PHP para generar javascript para emular algunas características, pero eso no se puede automatizar muy fácilmente.

1

Si usa modx tiene una función incorporada para exportar archivos estáticos.

1

Si tiene varias páginas, con todo tipo de variables de solicitud y demás, probablemente una de las herramientas de spidering que los otros comentaristas han mencionado (wget, lwp-mirror, etc.) sería la solución más fácil y más robusta.

Sin embargo, si el número de páginas que hay que conseguir es baja, o al menos manejable , tienes algunas opciones que no requieren ninguna herramienta de terceros (no es que se debe descontar sólo porque son terceros).

  1. Puede usar php en la línea de comandos para que salga directamente a un archivo.

    php myFile.php > myFile.html

    uso de este método podría conseguir dolorosa (aunque se puede poner todo en un script de shell), y que no le permite pasar variables de la misma manera (por ejemplo: php myFile.php?abc=1 no funcionará)

  2. Se podría utilizar otro archivo PHP como un guión de "acumulación", que contiene una lista de todas las URL que desee y luego agarra a través file_get_contents() o file() y los escribe en un archivo local. Al usar este método, también puede hacer que verifique si el archivo ha cambiado (md5_file() debería funcionar para eso), así sabrá qué darle a su cliente, en caso de que solo quiera actualizaciones.

  3. Además de la n. ° 2, antes de escribir la salida en el archivo, escanee las direcciones URL locales y luego agréguelas a su lista de archivos para descargar. Mientras esté allí, cambie esas URL para vincularlas con lo que eventualmente nombrará su salida para que tenga una web funcional al final. Nota de precaución: si esto suena bien, probablemente pueda usar una de las herramientas que ya existen y hacer esto por usted.

0

wget es probablemente el método más completo. Si no tiene acceso a eso, y tiene un diseño basado en plantilla, es posible que desee examinar el uso de Savant 3.Recomiendo Savant 3 altamente sobre otros sistemas de plantillas como Smarty.

Savant es muy liviano y utiliza PHP como lenguaje de plantilla, no como sublengua patentada. El comando que desea buscar es fetch(), que "compilará" su plantilla y la colocará en una variable que puede mostrar.

http://www.phpsavant.com/

1

Como alternativa a WGET podría utilizar (Win | web) HTTrack (Website) para agarrar la página estática. HTTrack incluso corrige los enlaces a archivos y documentos para que coincidan con la salida estática.

Cuestiones relacionadas