Как я могу создать сайт на PHP и создать статическую версию?
Вопрос
Для моего конкретного проекта код на стороне сервера запрещен.Как я могу создать веб-сайт на 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 и т. д.), будет самым простым и надежным решением.
Однако если количество страниц, которые вам нужно получить, невелико или, по крайней мере, управляемый, у вас есть несколько вариантов, которые не требуют каких-либо сторонних инструментов (это не значит, что вы должны сбрасывать со счетов их ТОЛЬКО потому, что они сторонние).
Вы можете использовать php в командной строке, чтобы вывести его непосредственно в файл.
php myFile.php > myFile.html
Использование этого метода может оказаться болезненным (хотя вы можете поместить все это в сценарий оболочки), и он не позволяет передавать переменные одинаковым способом (например:
php myFile.php?abc=1
не получится).Вы можете использовать другой файл PHP в качестве сценария «сборки», который содержит список всех нужных вам URL-адресов, а затем получает их через
file_get_contents()
илиfile()
и записывает их в локальный файл.Используя этот метод, вы также можете заставить его проверить, изменился ли файл (md5_file()
должно подойти), чтобы вы знали, что дать вашему клиенту, если ему нужны только обновления.В дополнение к пункту 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(), которая «скомпилирует» ваш шаблон и поместит его в переменную, которую вы сможете вывести.