Для конкретного проекта, который у меня есть, код на стороне сервера не разрешен. Как я могу создать веб-сайт на php (с включениями, условиями и т. д.), А затем преобразовать его в статический html-сайт, который я могу передать клиенту?
Обновление: спасибо всем, кто предложил wget. Вот что я использовал. Я должен был указать, что я был на ПК, поэтому я взял версию для Windows отсюда: http://gnuwin32.sourceforge.net/packages/wget.htm.






Создайте сайт как обычно, а затем используйте программное обеспечение для обнаружения пауков, чтобы создать копию 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/
Опции
Источник: Интернет-блог Жана-Паскаля Худе
Здесь можно найти идеи о том, как добавить расширение .html ко всем входящим запросам: stackoverflow.com/questions/5745490/…
Это решение, похоже, не ждет завершения запросов ajax, поэтому оно не видит никакого содержимого, загруженного ajax. Это серьезная проблема, учитывая, что большая часть содержимого моего сайта динамически загружается из базы данных.
Я делал это раньше, добавляя:
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 и т. д.), Будет самым простым и надежным решением.
Однако, если количество страниц, которые вам нужно получить, невелико, или, по крайней мере, управляемый, у вас есть несколько вариантов, для которых не требуются какие-либо сторонние инструменты (не то чтобы вы не должны сбрасывать со счетов их ПРОСТО, потому что они сторонние).
Вы можете использовать php в командной строке, чтобы выводить его прямо в файл.
php myFile.php > myFile.html
Использование этого метода может быть болезненным (хотя вы можете поместить все это в сценарий оболочки), и он не позволяет вам передавать переменные таким же образом (например: php myFile.php?abc=1 не будет работать).
Вы можете использовать другой PHP-файл в качестве сценария «сборки», который содержит список всех URL-адресов, которые вам нужны, а затем захватывает их через file_get_contents() или file() и записывает их в локальный файл. Используя этот метод, вы также можете заставить его проверять, изменился ли файл (md5_file() должен работать для этого), чтобы вы знали, что дать вашему клиенту, если ему нужны только обновления.
В дополнение к пункту 2, прежде чем записывать вывод в файл, просканируйте его на предмет локальных URL-адресов, а затем добавьте их в свой список файлов для загрузки. Пока вы там, измените эти URL-адреса, чтобы они ссылались на то, что вы в конечном итоге назовете своим выводом, чтобы в конце у вас была работающая сеть. Обратите внимание: если это звучит хорошо, вы, вероятно, можете использовать один из уже существующих инструментов и сделать это за вас.
wget, вероятно, является наиболее полным методом. Если у вас нет доступа к этому, и у вас есть макет на основе шаблонов, вы можете изучить использование Savant 3. Я настоятельно рекомендую Savant 3 по сравнению с другими системами шаблонов, такими как Smarty.
Savant очень легкий и использует PHP в качестве языка шаблонов, а не какой-то проприетарный подъязык. Команда, которую вы хотели бы найти, - это fetch (), которая «скомпилирует» ваш шаблон и поместит его в переменную, которую вы можете вывести.
В качестве альтернативы wget вы можете использовать (Win | Web) HTTrack (Интернет сайт) для захвата статической страницы. HTTrack даже исправляет ссылки на файлы и документы в соответствии со статическим выводом.
С помощью apache и RewriteRule вы все еще можете найти старые страницы без расширения html (как example.com/hello, который конвертируется в example.com/hello.html). Например, «RewriteRule ^ hello $ /hello.html [PT]»