Как я могу создать сайт на PHP и создать статическую версию?

StackOverflow https://stackoverflow.com/questions/66610

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

Параметры

  • -к:конвертировать ссылки в относительные
  • -К:сохранять оригинальные версии файлов без преобразований, выполненных wget
  • -Э:переименуйте html-файлы в .html (если у них еще нет расширения htm(l))
  • -р :рекурсивный… конечно, мы хотим сделать рекурсивную копию
  • -л 10 :максимальный уровень рекурсии.Если у вас действительно большой веб-сайт, возможно, вам придется указать большее число, но 10 уровней должно быть достаточно.
  • -п :скачать все необходимые файлы для каждой страницы (css, js, изображения)
  • -Н:Включите отметки времени.
  • -Ф:Когда ввод считывается из файла, принудительно обрабатывайте его как файл HTML.
  • -нХ:По умолчанию wget помещает файлы в каталог, названный в честь имени хоста сайта.Это отключит создание этих каталогов имен хостов и поместит все в текущий каталог.

Источник: Блог Жан-Паскаля Уда

Другие советы

Я делал это раньше, добавляя:

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 для эмуляции некоторых функций, но это не так легко автоматизировать.

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

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

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

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

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

Если у вас есть несколько страниц со всевозможными переменными запроса и тому подобным, вероятно, один из инструментов поиска, упомянутых другими комментаторами (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-адреса, чтобы они ссылались на то, что вы в конечном итоге назовете своим результатом, чтобы в конце у вас была работающая сеть.Обратите внимание: если это звучит хорошо, вы, вероятно, могли бы использовать один из уже существующих инструментов и сделать это за вас.

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

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

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

со Staticize:

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

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

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

http://www.phpsavant.com/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top