Я пытался эхо-переменные во время работы скрипта. У меня есть эта часть для работы. Однако я хочу удалить все на странице, а затем повторить и повторить. Я искал в stackoverflow и пробовал их решения, но у меня это все еще не работает. Пример:
$i
$i += 1
Версия PHP: 7.2.10 Работает на: XAMPP
скрипт.php:
<?php
$i = 0;
while ($i < 999999999) {
echo $i;
flush();
ob_flush();
sleep(1);
$i += 1;
}
Что происходит, так это то, что страница не удаляет все на странице, поэтому в итоге она выглядит так:
09:00:00
0
09:00:01
01
09:00:02
012
Я хочу, чтобы это было так:
09:00:00
0
09:00:01
1
09:00:02
2
@DerekPollard Есть ли какая-нибудь функция в php, которая могла бы это сделать?
Нет, это было бы чем-то для обработки javascript. Если у вас не было PHP, просто обновляющего страницу каждые X секунд, что я не рекомендую.
@DerekPollard извините, этот вопрос немного не по теме, но вы меня очень обеспокоили. Javascript выполняется на стороне клиента. Это означает, что с помощью Javascript я могу вызывать функции PHP. Означает ли это, что люди могут редактировать исходный код (используя Google Chrome, нажав F12
, а затем редактируя код в разделе элементов) и выполнять любые мои функции php, если они узнают имя моей функции php?
php работает на стороне сервера. Это означает, что клиент получает только то, что вы ему отправляете. обычный текст, файлы html, json или что угодно. Это означает, что когда контент отправляется один раз клиенту, сервер не может очистить отображение/страницу на стороне клиента. Если вы хотите изменить содержимое страницы, используйте вызовы ajax из js на ваш веб-сервер для получения нужного содержимого.
Любой клиент может выполнять любую функцию на стороне сервера что вы опубликовали, поэтому она явно доступна в качестве конечной точки. Он может нет как-то выполнять произвольные функции. Как это сделать? Он может отправлять только http-запросы, другого волшебного соединения между клиентом и сервером нет.
@ Марк говорит, что у меня есть функция с именем secret
, и она возвращает apples
. Если клиент выясняет, что моя функция называется secret
, может ли он сделать запрос ajex для вызова функции secret
и увидеть, что ответ apples
?
@arkascha Если я скажу пользователю, что моя функция называется secret
, они могут сделать почтовый запрос к секретной функции и узнать мои secret
результаты apples
?
@ross, это зависит от того, как вы создаете свою структуру API! то, что у вас есть функция php, не означает, что пользователь может вызывать ее через ajax.
Нет, скажите мне: как вы должны запросить функция, сделав http-запрос? Вы можете запросить URL только со стороны клиента. Если сервер отвечает на этот URL-адрес и как, зависит от сервера. Итак, ты решает, что делает ваш сервер, как он реагирует. Если вы сопоставите URL-адрес с функцией, то, конечно, эта функция будет выполнена.
Попробуйте это, используя JS для очистки страницы во время цикла while
$i = 0;
while ($i < 10) {
echo $i;
flush();
ob_flush();
sleep(1);
$i += 1;
echo "<script type='text/javascript'>";
echo "document.body.innerHTML = ''";
echo "</script>";
}
разве это не будет много печатать часть js, и html-код будет заполнен этим кодом? Следовательно, занимает много оперативной памяти?
@Росс Много оперативной памяти? Не на стороне сервера, совсем нет, а на стороне клиента, ну, современные компьютеры имеют много гигабайт оперативной памяти. Приведенный выше код будет составлять примерно 1 килобайт...
@Ross Я не знаю об этом ngl, но не думаю, что это займет слишком много времени, так как это очень простой код. То, о чем вы просите, странно, и я не вижу много других способов сделать это.
Я думаю, вы беспокоитесь о неправильных вещах, @Ross - в наши дни веб-сайты загружают больше javascript, чем когда-либо прежде.
Этот код покажет вам белый экран — php является серверным языком и показывает только результат.
@Максим ты тестировал код? Прекрасно работает на моем конце.
Да, тестировал - и увидел белый экран :)
если я не ошибаюсь, единственный способ добиться этого - javascript или CSS, потому что «вывод» в PHP всегда отображается на стороне клиента, а, как вы хорошо знаете, PHP ничего не меняет на стороне клиента.
<?php
$i = 0;
while ($i < 999999999) {
echo '<div style = "position:absolute;margin-left:0;margin-top:0;background:white;width:15px;"> </div>'; // to clean
echo '<div style = "position:absolute;margin-left:0;margin-top:0">'.$i.'</div>'; // to show in same place.
flush();
ob_flush();
sleep(1);
$i += 1;
}
?>
В любом случае, надеюсь, что эта помощь для вас.
Если я это сделаю, это довольно быстро сожрет оперативную память клиента.
этот вопрос выглядит как "домашнее задание", но это не моя забота. Куда угодно.. Я думаю, что это не достигается только с PHP, потому что вы знаете, только контролировать серверную часть, а не место вывода (клиентская сторона).
Росс - сбрасывание данных делает именно это - ничто в сценарии не очищает дисплей. Для этого вы можете захотеть изучить что-то вроде Javascript с ajax, чтобы вы могли общаться с вашим бэкэндом PHP.