возникают трудности с использованием usleep (); - PullRequest
1 голос
/ 21 октября 2011

У меня есть это:

echo "<font color=\"#000000\">text</font>";
usleep(2000000);
header("location:/otherpage.php");
 ?>`

Обратите внимание, что это будет включено в iframe ...

Проблема в том, что это не выводит эхо-операторспать в течение двух секунд, а затем перенаправить (что все правильно, кроме эхо-части) ...

У кого-нибудь есть идея, почему это происходит ??Это не iframe, потому что когда вы идете прямо к файлу (отдельно от iframe), происходит то же самое.Может ли это быть спящим ??

Спасибо

Ответы [ 6 ]

5 голосов
/ 21 октября 2011

То, что вы делаете выше, не сработает.Во-первых, вам необходимо выполнить очистку, чтобы убедиться, что данные были отправлены.Во-вторых, что более важно, вы не можете изменить заголовок после сброса, что приведет к тому, что заголовок не будет отправлен или текст не будет отправлен.

Если все, что вы хотите сделать, это изменитьданные после задержки, вы думаете, сделать следующее:

header('Refresh: 2; url=http://my.site.com/otherpage.php);
echo "<font color=\"#000000\">text</font>";

Это отправит информацию в браузере, инструктируя браузер перейти на новый URL через 2 секунды.

3 голосов
/ 21 октября 2011

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

Но проблема вывода, которую вы можете решить, очистив буфер, но тогда перенаправление невозможно, как я упоминал ранее.*

Еще одна очень важная вещь: НЕ ИСПОЛЬЗУЙТЕ ИСПОЛЬЗОВАТЬ ДЛЯ ТАКИХ ВЕЩЕЙ.Зачем?Потому что когда ваш скрипт сильно загружен, каждый запрос, который требует слишком много времени, очень плох, и у вас закончатся потоки php (в зависимости от реализации вашего php-сервера).Таким образом, для таких таймаутов вы должны использовать клиентский код (если это возможно).

0 голосов
/ 21 октября 2011

То, что все остальные сказали. Просто добавив, что usleep () заставит клиентов держать соединения открытыми на вашем сервере - это очень неэффективное использование ограниченных ресурсов сервера. Ваш PHP всегда должен посылать все, что может, как можно быстрее, чтобы ваш веб-сервер мог закрыть соединение.

0 голосов
/ 21 октября 2011

Расширение моего комментария в ответ:

Невозможно перенаправить как этот (вывод некоторого контента и затем попытка отправить в заголовке), потому что заголовки должны быть отправлены до всего контента.PHP также будет жаловаться на это, используя настройки по умолчанию, вы должны увидеть предупреждение.

Во-вторых, задержка usleep может не наблюдаться из-за того, что сервер буферизует содержимое во время сна и отправляет его только в одном большомпотом кусокВ целом, ненадежно заставить браузер отображать контент «поэтапно», как это, хотя его можно заставить работать более или менее, если вы накапливаете хаки достаточно высоко.

Могу ли я предположить, что еслиэтот тип поведения - то, что вам нужно, вы должны подумать о том, чтобы сделать (серию?) соответствующий вызов AJAX, который можно идеально организовать.

0 голосов
/ 21 октября 2011

Вы не можете к этому.У меня такое ощущение, что вы неправильно понимаете назначение PHP и его роль в качестве языка сервера.

Если вы хотите «перенаправить» на другую страницу в PHP, вы делаете это с помощью заголовков HTTP, которые высделал.Дело в том, что это заголовки , поэтому их нужно отправлять перед любым текстовым телом (например, оператором echo).Вы пытаетесь сделать что-то, что должно быть выполнено на стороне клиента на сервере.

Вместо этого создайте HTML-страницу с некоторым кодом JavaScript для выполнения перенаправления, например:

<script>
    setTimeout(function() {
        window.location = "otherpage.html";
    }, 2000);
</script>
0 голосов
/ 21 октября 2011

Он спит на сервере, а затем отправляет вывод.Также вы не можете отправлять заголовки после повторения чего-либо.

Вы должны использовать javascript или мета-редирект, это позволит вам подождать несколько секунд, прежде чем перенаправлять, а также можно сгенерировать время и URL для обоих из них.по вашему php скрипту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...