Сохранить текущую страницу как HTML на сервере
Какой подход может предложить кто-то предложить сохранить текущую страницу в виде HTML файла на сервер? В этом случае также обратите внимание, что проблема безопасности не. Я потратил бесконечные часы на поиски этого и не нашел ни одной вещи. Ваша помощь очень ценится, спасибо! Edit Спасибо всем за вашу помощь, это очень понравилось.
Вы задали тот же вопрос всего 14 часов назад: [Сохранение источника себя (PHP)] — почему бы вам не попытаться получить ответ вместо того, чтобы публиковать его снова? ( stackoverflow.com/questions/3769504/saving-source- of-self-php )
oezi — Похоже, я был прав в создании этого нового вопроса. Я получил правильный ответ . Новый вопрос, разные люди, разные ответы. Вы можете пойти дальше и закрыть этот вопрос сейчас.
Эти вопросы не совсем то же самое. Они очень похожи, но различаются по цели: здесь это сервер, а другой вопрос — это сам браузер.
6 ответов
Если вы хотели сохранить вывод страницы в файле, вы можете использовать буферизацию для этого. Функция, которую вам нужно использовать, ob_start и ob_get_contents.
Your page content bla bla bla bla .
Это сохранит содержимое страницы в файле yourpage.html .
У меня тоже был такой же вопрос. Спасибо за ответ. НО где этот yourpage.html сохраняется? Я не смог найти файл в моей директории
@Walahh Если chdir не был вызван, он должен находиться в той же папке запрошенного скрипта. Если вы не уверены, что это такое, вы можете вызвать getcwd .
Я думаю, что мы можем использовать Функции контроля вывода PHP, вы можете сначала сохранить содержимое в переменную, а затем сохранить их в новом файл, в следующий раз вы можете протестировать его html файл, а затем визуализировать, чтобы еще раз сгенерировать страницу.
time()) ) < $content = file_get_contents($cacheFile); echo $content; >else < ob_start(); // write content echo 'Hello world to cache
'; $content = ob_get_contents(); ob_end_clean(); file_put_contents($cacheFile,$content); echo $content; > ?>
Если вы хотите сохранить полную html-страницу вместе с css, изображениями и сценариями в одном html файле, вы можете использовать этот класс, который я написал:
Этот класс может сохранять HTML-страницы в комплекте с изображениями, CSS и JavaScript.
Он берет URL-адрес данной страницы и извлекает ее для хранения в заданном файл.
Класс может анализировать HTML и определять, какие изображения, CSS и Файлы JavaScript, которые ему нужны, поэтому эти файлы также загружаются и сохранен внутри HTML-страницы, сохраненной в локальном файле.
Возможно, он может пропустить код JavaScript, сохранить только страницу содержимое и сжатие результирующей страницы, удаляющей пробелы.
Используйте JavaScript для отправки document.getElementsByTagName(‘html’)[0].innerHTML в виде скрытого входного значения или ajax на сервер. Это более полезно, чем выходная буферизация, если содержимое впоследствии перемещается/модифицируется JavaScript, что на стороне сервера может не иметь никакого понятия.
Спасибо, BalusC. Так что, если я использую var $ s = document.getElements . (в php), я могу записать весь var в файл на сервере?
JavaScript работает на веб-браузере, а не на веб-сервере. Вы знаете JS? В любом случае, учитывая ваш комментарий, я думаю, что этот ответ, в конце концов, не тот, который вам нужен 🙂 Вы, вероятно, скорее хотите сохранить сгенерированную PHP-страницу HTML, а не текущую открытую HTML-страницу (во всем ее текущем состоянии на стороне клиента). Проверьте ответ Холивира.
Как вывести страницу через php?
Только начал работу с php. Как вывести страницу через php? Не писать же echo ‘%длинный html-код%’ ? Как это по-хорошему делается?
Оценить 1 комментарий
Все ответы какие-то путаные.
Хотя на самом деле всё очень просто.
Если ХТМЛ пишется в том же самом файле, то тупо закрываем тег РНР и пишет HTML как есть
2. Если в другом файле — то readfile:
Вот это как раз дикость. Ни подсветки кода, ни инструментов редактирования. HTML в пхп надо выводить как есть, а не с помощью костылей.
FanatPHP: Если мы рассматриваем вариант, когда все в одном файле, то меня, как раз таки, напрягает, если php смешан с html. А в вышенаписанном варианте все отдельно (в рамках одного файла), и подсветку можно попеременно включать для php/html. В прочем, это на вкус и цвет, а по-хорошему, лучше в отдельных файлах держать 🙂
Речь не о твоих субъективных вкусах, а об объективной разнице. Ничего попеременно включать не надо. Если HTML предназначен для вывода — он пишется как есть. Единственное предназначение хередока — это получить текст в переменную, которую потом тем или иным образом обработать. Не путай на будущее.
FanatPHP: Я опираюсь на субъективный вкус, меня напрягает смешанный код, держу все в отдельных файлах, а пример был приведен «как вариант», что уже намекает на «костыльность». Я понял, что вы имеете ввиду, продолжать далее эту дискуссия считаю бесполезным. Спокойной ночи.
Тебя правильно напрягает смешанный код. Именно поэтому нет ни одной причины использовать хередок для вывода. И ответ писать про это не стоило.
Как HTML-результат работы PHP сохранить в файл?
Я не шибко знаю PHP, помогите!
Результат работы PHP передается Броузеру.
А как мне этот HTML-результат перенаправить (сохранить) в файл на Web-сервере под своим именем?
PS. Пример кода приветствуется!
chulim
Ты не совсем понимаешь что делает PHP.
ничего сохранять на сервере не надо. В двух словах PHP генерит HTML и этот результат сервер отдает в браузер клиенту.
Подробнее о принципах читать
GROMILA
Да знаю я это.
Мне нужно, чтобы он генерил страницу в файл, а не броузеру отдавал.
Нужно это для повышения быстродействия.
Я лично выполню один раз скрипт, а результат из файла уже пользователи сайта будут
много раз просматривать.
Перенаправить поток в файл.
Как?
jaunty
если тебе нужна статическая станица делай ее в редакторе
советую Notepad
для новичка лучший вариант
jaunty
если тебе нужна статическая станица делай ее в редакторе
советую Notepad
для новичка лучший вариант
Guest
jaunty похоже, вы не понимаете вопроса, поэтому не стоит так упорно объяснит вашу точку зрения
GROMILA, очнеь просто. В самом начале скрипта делаем ob_start();, в конце $output = ob_get_content();
и сохраняем содержимое $output в файл.
В результате, в браузер не будет выведено ничего, и на выходе получим файл text.txt с содержимым hello, world
jaunty
ob_start();
echo «hello, world»;
$output = ob_get_content();
?
$file = fopen(«text.txt»,»wt») or die(«err»);
fputs($file,$output);
fclose($file);
?>
Guest ты думаешь открыл америку?
тут не в программировании вопрос, а в сути серверных технологий
PHP не для того чтобы создавать статические страницы хотя можно и так извращаться
если тебе нужно создать большое колличество однотипных страниц воспользуйся HomeSite или чем-то подобным
О понял — это экстремальное программирование
Guest
jaunty, не прав, однозначно. Сразу видно, не разработаывал ты web систем, работающих под большой нагрузкой
Знаешь ли ты, что и в shop.by и в том же list.ru используется генерация статических страниц (по крайней мере использовалась не так давно, как сейчас понятия не имею). Если у сайта большая база и множество sql запросов, то нельзя делать динамические страницы — лучший выход это генерить из них статические, например, раз в сутки скриптом, работающим из крона.
По поводу открытия америки — человек, IMHO, задал конкретный вопрос, а вы сразу начинаете, мол, ты лох, и зачем это тебе в 99% случаев так поступают те, кто не знает верного ответа на заданный вопрос.
ЗЫ в моем коде есть ошибка — забыл кой чего.
chulim
Guest
Скорее это говорит о неправильном проектировании. Есть примеры в нете с десятками тысяч хитов на динамическом контенте.
jaunty
Если у сайта большая база и множество sql запросов, то нельзя делать динамические страницы — лучший выход это генерить из них статические, например, раз в сутки скриптом, работающим из крона.
file_get_contents
Данная функция похожа на функцию file() с той лишь разницей, что file_get_contents() возвращает содержимое файла в строке, начиная с указанного смещения offset и до length байт. В случае неудачи, file_get_contents() вернёт false .
Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в память (memory mapping), если она поддерживается вашей операционной системой.
Замечание:
Если вы открываете URI, содержащий спецсимволы, такие как пробел, вам нужно закодировать URI при помощи urlencode() .
Список параметров
Замечание:
Можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path. Только помните, что если вы используете строгую типизацию, то так сделать не получится, поскольку FILE_USE_INCLUDE_PATH имеет тип int . В таком случае используйте true .
Корректный ресурс контекста, созданный с помощью функции stream_context_create() . Если в использовании особого контекста нет необходимости, можно пропустить этот параметр передав в него значение null .
Смещение, с которого начнётся чтение оригинального потока. Отрицательное значение смещения будет отсчитываться с конца потока.
Поиск смещения ( offset ) не поддерживается при работе с удалёнными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но результат будет непредсказуемым, так как функция работает на буферизованном потоке.
Максимальный размер читаемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла. Учтите, что этот параметр применяется и к потоку с фильтрами.
Возвращаемые значения
Функция возвращает прочтённые данные или false в случае возникновения ошибки.
Эта функция может возвращать как логическое значение false , так и значение не типа boolean, которое приводится к false . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Ошибки
Будет сгенерирована ошибка уровня E_WARNING в случаях, если не удастся найти filename , задан length меньше нуля, или поиск по смещению offset в потоке завершится неудачно.
Когда file_get_contents() вызывается в каталоге, в Windows ошибка генерируется E_WARNING , а с PHP 7.4 также в других операционных системах.
Список изменений
Версия | Описание |
---|---|
8.0.0 | Параметр length теперь допускает значение null . |
7.1.0 | Добавлена поддержка отрицательных значений offset . |
Примеры
Пример #1 Получить и вывести исходный код домашней страницы сайта
Пример #2 Поиск файлов в include_path
// Если включены строгие типы, то есть объявлено (strict_types=1);
$file = file_get_contents ( ‘./people.txt’ , true );
// Иначе
$file = file_get_contents ( ‘./people.txt’ , FILE_USE_INCLUDE_PATH );
?>?php
Пример #3 Чтение секции файла
// Читаем 14 символов, начиная с 21 символа
$section = file_get_contents ( ‘./people.txt’ , FALSE , NULL , 20 , 14 );
var_dump ( $section );
?>?php
Результатом выполнения данного примера будет что-то подобное:
Пример #4 Использование потоковых контекстов
// Создаём поток
$opts = array(
‘http’ =>array(
‘method’ => «GET» ,
‘header’ => «Accept-language: en\r\n» .
«Cookie: foo=bar\r\n»
)
);
?php
$context = stream_context_create ( $opts );
// Открываем файл с помощью установленных выше HTTP-заголовков
$file = file_get_contents ( ‘http://www.example.com/’ , false , $context );
?>
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers. Смотрите более подробную информацию об определении имени файла в описании функции fopen() . Смотрите также список поддерживаемых обёрток URL, их возможности, замечания по использованию и список предопределённых констант в разделе Поддерживаемые протоколы и обёртки.
При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify . PHP сообщит об этом как «SSL: Fatal Protocol Error» в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP умеет определять, что на стороне сервера находится проблемный IIS при открытии потока с помощью обёртки https:// и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.
Смотрите также
- file() — Читает содержимое файла и помещает его в массив
- fgets() — Читает строку из файла
- fread() — Бинарно-безопасное чтение файла
- readfile() — Выводит файл
- file_put_contents() — Пишет данные в файл
- stream_get_contents() — Читает оставшуюся часть потока в строку
- stream_context_create() — Создаёт контекст потока
- $http_response_header