Как я могу создать сайт в php и создать статическую версию? - PullRequest
18 голосов
/ 16 сентября 2008

Для конкретного проекта у меня нет кода на стороне сервера. Как я могу создать веб-сайт в php (с включенными, условными и т. Д.), А затем преобразовать его в статический HTML-сайт, который я могу предоставить клиенту?

Обновление: спасибо всем, кто предложил wget. Это то, что я использовал. Я должен был указать, что я был на ПК, поэтому я взял версию Windows отсюда: http://gnuwin32.sourceforge.net/packages/wget.htm.

Ответы [ 10 ]

39 голосов
/ 16 сентября 2008

Если у вас есть доступная система Linux, используйте wget :

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

Опции

  • -k: преобразовать ссылки в относительные
  • -K: сохранить оригинальные версии файлов без преобразований, сделанных wget
  • -E: переименовать html-файлы в .html (если они еще не имеют расширения htm (l))
  • -r: рекурсивно… конечно, мы хотим сделать рекурсивную копию
  • -l 10: максимальный уровень рекурсии. если у вас действительно большой веб-сайт, вам может потребоваться указать большее число, но для этого достаточно 10 уровней.
  • -p: скачать все необходимые файлы для каждой страницы (css, js, images)
  • -N: включить отметку времени.
  • -F: при считывании ввода из файла принудительно обрабатывать его как файл HTML.
  • -nH: по умолчанию wget помещает файлы в каталог с именем хоста сайта. Это отключит создание этих каталогов имени хоста и поместит все в текущий каталог.

Источник: Интернет-журнал Жана-Паскаля Худа

3 голосов
/ 16 сентября 2008

Я делал это в прошлом, добавляя:

ob_start();

В верхней части страницы, а затем в нижнем колонтитуле:

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

Возможно, вы захотите конвертировать расширения .php в .html перед запуском HTML в файлы. Если вам нужно сгенерировать несколько страниц с переменными, один довольно простой вариант - добавить имя файла с md5sum всех переменных GET, вам просто нужно изменить их и в HTML. Так что вы можете конвертировать:

somepage.php?var1=hello&var2=hullo

до

somepage_e7537aacdbba8ad3ff309b3de1da69e1.html

некрасиво, но работает.

Иногда вы можете использовать PHP для генерации javascript для эмуляции некоторых функций, но это не может быть очень легко автоматизировано.

3 голосов
/ 16 сентября 2008

создайте свой сайт, затем используйте инструмент зеркалирования, например wget или lwp-mirror , чтобы получить статическую копию

1 голос
/ 16 сентября 2008

В качестве альтернативы wget вы можете использовать (Win | Web) HTTrack ( Website ) для захвата статической страницы. HTTrack даже исправляет ссылки на файлы и документы, чтобы соответствовать статическому выводу.

1 голос
/ 16 сентября 2008

Если у вас есть несколько страниц со всевозможными переменными запроса и еще много чего, возможно, один из инструментов-пауков, упомянутых другими комментаторами (wget, lwp-mirror и т. Д.), Будет самым простым и надежным решением.

Однако, если количество страниц, которое вам нужно получить, невелико или, по крайней мере, управляемо , у вас есть несколько вариантов, которые не требуют каких-либо сторонних инструментов (не то, что вам следует сбрасывать со счетов). их просто потому что они третьи лица).

  1. Вы можете использовать php в командной строке для вывода его непосредственно в файл.

    php myFile.php > myFile.html

    Использование этого метода может быть болезненным (хотя вы можете поместить все это в сценарий оболочки), и оно не позволяет передавать переменные таким же образом (например: php myFile.php?abc=1 не будет работать).

  2. Вы можете использовать другой файл PHP в качестве сценария «сборки», который содержит список всех URL-адресов, которые вы хотите, а затем захватывает их через file_get_contents() или file() и записывает их в локальный файл. Используя этот метод, вы также можете заставить его проверить, не изменился ли файл (md5_file() должен работать для этого), так что вы будете знать, что дать вашему клиенту, если он только хочет обновления.

  3. Далее # 2, прежде чем записать вывод в файл, отсканируйте его на наличие локальных URL-адресов, а затем добавьте их в список файлов для загрузки. Пока вы там, измените эти URL-адреса, чтобы они ссылались на то, что вы в конечном итоге назовете своими выходными данными, чтобы в конце вы получили работающую сеть. Обратите внимание на осторожность - если это звучит хорошо, вы, вероятно, можете использовать один из уже существующих инструментов и сделать это для вас.

1 голос
/ 16 сентября 2008

Если вы используете modx, он имеет встроенную функцию для экспорта статических файлов.

1 голос
/ 16 сентября 2008

Один из способов сделать это состоит в том, чтобы создать сайт на PHP в обычном режиме и заставить скрипт фактически захватывать веб-страницы (через HTTP - вы можете использовать wget или написать другой скрипт php, который просто использует file () с URL-адресами) и сохранить их на общедоступных сайтах, когда вы "сделали". Затем вы можете просто запустить скрипт снова, когда вы решите снова изменить страницы. Этот метод весьма полезен, когда у вас медленно меняющаяся база данных и много трафика, поскольку вы можете исключить все SQL-запросы на работающем сайте.

1 голос
/ 16 сентября 2008

Создайте сайт как обычно, затем используйте программное обеспечение spidering для создания копии HTML.

HTTrack - это программное обеспечение, которое я использовал ранее.

0 голосов
/ 16 сентября 2008

wget, вероятно, самый полный метод. Если у вас нет доступа к этому, и у вас есть макет на основе шаблонов, вы можете изучить использование Savant 3. Я рекомендую Savant 3 по сравнению с другими системами шаблонов, такими как Smarty.

Savant очень легок и использует PHP как язык шаблонов, а не какой-то проприетарный подъязык. Команда, которую вы хотели бы найти, - это fetch (), которая «скомпилирует» ваш шаблон и поместит его в переменную, которую вы можете вывести.

http://www.phpsavant.com/

0 голосов
/ 16 сентября 2008

Я делаю это на своем веб-сайте для определенных страниц, которые гарантированно не изменятся - я просто запускаю сценарий оболочки, в который можно закипеть (предупреждение: псевдокод bash):

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

со Статизацией:

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