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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
19
0
10 123
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

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

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

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

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

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

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

с существом Staticize:

# This replaces .static.php with .html
TARGET_NAME = "`dirname ""`/"`basename "" .static.php`".html
php "" > "$TARGET_NAME"
Ответ принят как подходящий

Если у вас есть доступная система 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, изображения)
  • -N: включить отметку времени.
  • -F: когда ввод считывается из файла, принудительно обрабатывать его как файл HTML.
  • -nH: по умолчанию wget помещает файлы в каталог, названный по имени хоста сайта. Это отключит создание этих каталогов с именами хостов и поместит все в текущий каталог.

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

С помощью apache и RewriteRule вы все еще можете найти старые страницы без расширения html (как example.com/hello, который конвертируется в example.com/hello.html). Например, «RewriteRule ^ hello $ /hello.html [PT]»

Pietro 08.01.2013 14:20

Здесь можно найти идеи о том, как добавить расширение .html ко всем входящим запросам: stackoverflow.com/questions/5745490/…

pfrenssen 06.12.2013 14:11

Это решение, похоже, не ждет завершения запросов ajax, поэтому оно не видит никакого содержимого, загруженного ajax. Это серьезная проблема, учитывая, что большая часть содержимого моего сайта динамически загружается из базы данных.

Paul Chris Jones 04.04.2019 14:51

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

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

Если вы используете 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, вероятно, является наиболее полным методом. Если у вас нет доступа к этому, и у вас есть макет на основе шаблонов, вы можете изучить использование Savant 3. Я настоятельно рекомендую Savant 3 по сравнению с другими системами шаблонов, такими как Smarty.

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

http://www.phpsavant.com/

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

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