Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2 / 2 / 0
Регистрация: 18.08.2013
Сообщений: 12

echo и цикл

18.08.2013, 22:33. Показов 1883. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Целью данного топика я ставлю вопрос о том,
можно в теле цикла (или в ходе выполнения php кода) вывести echo.
Причина, почему я задался этим вопросом заключается в том, что я использовал echo
для подключения javascript к php т.е.

PHP
1
2
3
echo '<script type="text/javascript">' . chr(13) . chr(10);
...
echo '</script>';
но если выполнять этот код в ходе выполнения каких-нибудь операций,
то он работать не будет, так как, насколько я понимаю, echo не выводится в теле кода, в принципе.

Например следующий код работать не будет:

PHP
1
2
3
4
5
while ($s == $s)
{
echo '<script type="text/javascript">' . chr(13) . chr(10);
echo 'window.location.href="http://s-library.com' . chr(34) . ';' . chr(13) . chr(10) . '</script>';
}
,

так как браузер "зависает", и до окончания выполнения естественно ничего не выводит.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.08.2013, 22:33
Ответы с готовыми решениями:

Вывести символы, используя только три ECHO. Echo '0', Echo '*', Echo '\n' (использовать цикл)
Вывести символы, используя только три ECHO. Echo '0', Echo '*', Echo '\n' (использовать цикл). Рисунок который нужно вывести: ...

Цикл внутри конструкции echo
Помогите понять, почему не работают циклы и конструкции языка в echo. Код типа такого: $buildform=&quot; &lt;form&gt;&lt;tr&gt;...

Как вставить цикл for в ПхпТег echo<<<_END
Всем привет, у меня возникла следующая ситуация: Задачи: 1- извлечь из одной таблицы &quot;данные№1&quot; 2- извлечь из второй...

11
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
18.08.2013, 23:24
PHP
1
while ($s == $s)
Как Вы себе это предстовляете?
Выполнять цикл до тех пор пока $s равно $s ???

Добавлено через 22 секунды
я бы тоже завис
0
2 / 2 / 0
Регистрация: 18.08.2013
Сообщений: 12
18.08.2013, 23:28  [ТС]
Sima175, это просто пример. Вы можете выполнить цикл 1000000 раз,
и он выведет все echo ТОЛЬКО после того, как закончится цикл.
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
18.08.2013, 23:35

Не по теме:

Цитата Сообщение от Sima175 Посмотреть сообщение
Выполнять цикл до тех пор пока $s равно $s ???
ну шоб наверняка... предположу, что это модифицированная программа с двумя goto подряд: http://govnokod.ru/414



Добавлено через 5 минут
Цитата Сообщение от matrix0001 Посмотреть сообщение
и он выведет все echo ТОЛЬКО после того, как закончится цикл.
сервер буферизирует вывод. попробуйте сделать flush и ob_get_flush (второй -- только если сами используете буферизацию, в противном случае он бесполезен). Но гарантий, что это будет выполняться всегда и на всех серверах -- нет. И здесь ничего не поделать. И да, хотя бы поэтому на пхп стараются избегать написания потоковых серверов. Если вы занимаетесь именно этим -- используйте ноду, или twisted, tornado, phpDaemon... да все что угодно, что реализует собственный управляемый приложением веб-сервер. В противном случае гарантий никаких нет и быть не может
0
:)
 Аватар для PlumBoom
134 / 134 / 31
Регистрация: 30.03.2013
Сообщений: 428
19.08.2013, 01:04
Цитата Сообщение от matrix0001 Посмотреть сообщение
можно в теле цикла вывести echo
Во время выполнения цикла - нет.
Цитата Сообщение от matrix0001 Посмотреть сообщение
(или в ходе выполнения php кода) вывести echo.
Можно (и не обязательно прибегать к таким технологиям, как tornado, Node, phpDeamon и т.п.)
0
2 / 2 / 0
Регистрация: 18.08.2013
Сообщений: 12
19.08.2013, 01:17  [ТС]
Можно (и не обязательно прибегать к таким технологиям, как tornado, Node, phpDeamon и т.п.)
А подробней можно? (желательно код)
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
19.08.2013, 01:24
Цитата Сообщение от PlumBoom Посмотреть сообщение
Можно
вы говорите что можно, а вот тут http://php.net/manual/ru/function.flush.php написано
Некоторые серверы, особенно под управлением Win32, будут по-прежнему продолжать буферизировать вывод вашего скрипта до передачи результатов в браузер.

Серверные модули для Apache, такие как mod_gzip, могут сами выполнять буферизацию, поэтому flush() не приводит к немедленной передаче данных клиенту.
и исходя из простой логики: сервер не обязан передавать данные клиенту потоком, тем более что почти все, что прикасается к пхп, любит часто исправлять подобные "ошибки" самостоятельно, без чьей либо помощи. Почему -- не знаю.
Если бы ни один из серверов не буферизировал вывод, таких вот тем не возникало бы: Влияет ли канал связи на время исполнения скрипта . Да, разумеется, flush может помочь, но никому ничего не должен, это всего лишь как указание, что вот надо бы отправить. Но на деле сервер сам может принять решение.
Вот такие вот аргументы. А вы можете показать, как это сделать "можно", чтобы работало всегда?
0
:)
 Аватар для PlumBoom
134 / 134 / 31
Регистрация: 30.03.2013
Сообщений: 428
19.08.2013, 01:25
Цитата Сообщение от matrix0001 Посмотреть сообщение
А подробней можно?
Сессии. Например, таким стандартным образом контролируется загрузка больших файлов.
Цитата Сообщение от matrix0001 Посмотреть сообщение
(желательно код)
Не сейчас - лень Позже как-нибудь.. Потом кину ссылку
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
19.08.2013, 01:25
Цитата Сообщение от matrix0001 Посмотреть сообщение
А подробней можно?
да, мне тоже интересно. flush не помог?
0
:)
 Аватар для PlumBoom
134 / 134 / 31
Регистрация: 30.03.2013
Сообщений: 428
19.08.2013, 01:29
Цитата Сообщение от NEbO Посмотреть сообщение
вы говорите что можно
Да, можно

Цитата Сообщение от NEbO Посмотреть сообщение
flush не помог?
Я его не использовал (в данном случае).

Добавлено через 1 минуту
Вот, для вашего интереса: http://php.net/manual/ru/sessi... ogress.php
1
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
19.08.2013, 01:59
балин. причем тут сессии? это просто какой-то очередной костыль от разработчиков, а вы на него ведетесь Вы хорошо знаете http? про то, что он stateless, про то что протоколы взаимосвязи между приложениями сервера не всегда так хорошо определены как хотелось бы?

далее, по во вашей ссылке, сразу отметается половина серверов:
Note, this feature doesn't work, when your webserver is runnig PHP via FastCGI. There will be no progress informations in the session array.
Unfortunately PHP gets the data only after the upload is completed and can't show any progress.

I hope this informations helps.
пхп не управляет потоком отдачи контента напрямую, он не является сервером. поэтому, гарантий нет никаких. Поставьте уже наконец апач с офф сайта, напишите скрипт аля
PHP
1
2
echo 'lalala'; 
header("location: http://www.google.com/");
убедитесь, что он работает и задайте себе вопрос "почему"? вы не пишите никакой буферизации, это делает за вас сервер. Да, не на всех серверах это так. Согласен. Иногда еще раз говорю, поможет flush. но он не предоставляет никаких гарантий , что это будет работать.

Цитата Сообщение от PlumBoom Посмотреть сообщение
Да, можно
и это весь ваш аргумент?

Добавлено через 18 минут
потоковые операции, comet-сервера, всякие лонгпулл и прочие дурацкие термины -- это все никак не относится к пхп. он добавляет еще один stateless уровень в и без того stateless протокол. на "обычном" пхп пишите скрипты в стиле -- есть запрос -- обработал -- отдал. В остальном никаких гарантий нет и никогда не будет, он просто для этого не предназначен. Я уж молчу про его утечки памяти (гуй делали-делали... и забили), тот же контакт написанный на пхп, до сих пор не применяет вебсокеты а отдает кривой какой-то реализацией фрейма... отсюда и глюки с обновлением, имхо, применили не ту технологию. Ну впрочем, им наверное, совместимость с разными браузерами важнее, поэтому я ничего не имею против их выбора...
Но блин, это потребует огромную массу ресурсов, несомвместимых со здравым смыслом.
Кажется, за последнюю неделю, все, чем я занимаюсь на форуме, так это уговариваю: "ну не используйте вы черствый батон для забивания гвоздей. ну не подходит он для этих целей...". надоело. почитайте подобные темы (про комет сервера, про чаты, про видеопотоки, еще что-то было) в которых я отвечал, мне уже действительно становится как-то не по себе, от повторения одного и того же.
если вот такой код
Цитата Сообщение от matrix0001 Посмотреть сообщение
PHP
1
2
3
4
5
6
7
$cntr = 1000000; while ($cntr--)
{
echo '<script type="text/javascript">' . chr(13) . chr(10);
echo 'window.location.href="http://s-library.com' . chr(34) . ';' . chr(13) . chr(10) . '</script>';
flush();
ob_flush();
}
ничего не выводит, или выводит все одним махом, значит в вашем сервере включена буферизация, которую на пхп убрать невозможно (так же например, как невозможно отформатировать диск ц), пользуясь только встроенными средствами. разумеется, вы можете написать свой модуль для пхп, который будет этим заниматься, влиять как-то на сервер и заставлять его отправлять ответ, или найти какие-то специальные уже готовые платформо-зависимые функции. и все равно для этой работы пхп не предназначен.
У меня все.

Не по теме:

Не хотите меня слушать -- делайте, как хотите. Я уже наспорился с парой умников, и честно, не в настроении. И извините, если кого обидел. Просто реально достало уже

0
2 / 2 / 0
Регистрация: 18.08.2013
Сообщений: 12
19.08.2013, 16:43  [ТС]
На самом деле задача может быть решена гораздо проще.
Для этого необходимо
1.создать цикл по такой схеме:
PHP[echo]-->Javascript[window.location.href = '...]-->PHP[echo] ... и т.д.
2.Далее необходимо подумать как эти данные вывести.

Чисто гипотетически может работать и такой код:

***001.php***
PHP
1
2
3
4
5
6
7
8
9
<?php
$s = $_GET[s];
$s = $s + 1;
 
echo '<script type="text/javascript">' . chr(13) . chr(10);
echo 'document.write(' . chr(34) . $s . chr(34) . ');'  . chr(13) . chr(10);
echo 'window.location.href="http://mysite.com/001.php?s=' . $s . chr(34) . ';' . chr(13) . chr(10) . '</script>';
 
?>
т.е. вы видите, что страница ссылается сама на себя, и иногда "успевает"
вывести некоторые данные с погрешностями.
Хотя код может и не работать в некоторых браузерах, и на некоторых серверах,
его можно доработать если выводить данные не напрямую, а в какой-нибуть элемент используя id.

Добавлено через 2 часа 30 минут
Усовершенствовать это можно следующим образом.
Создаем главную страницу main.php, и помещаем в нее фрейм:

PHP
1
2
3
4
5
6
7
8
9
10
<html>
<body>
<form name=form1>
<input type=text name=text1>
</form>
<iframe src="http://mysite.com/001.php?s=0" width="0" height="0">
</iframe>
</body>
 
</html>
А в файле 001.php обратимся к родительскому элементу через javascript:

PHP
1
2
3
4
5
6
7
8
9
<?php
$s = $_GET[s];
$s = $s + 1;
 
echo '<script type="text/javascript">' . chr(13) . chr(10);
echo 'parent.form1.text1.value=' . $s . ';' . chr(13) . chr(10);
echo 'window.location.href="http://mysite.com/001.php?s=' . $s . chr(34) . ';' . chr(13) . chr(10) . '</script>';
 
?>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.08.2013, 16:43
Помогаю со студенческими работами здесь

echo $kom1;// Вася27//; $i = 27; $kom = "Вася"; echo $kom.$i;//ERROR // почему?
почему может быть ошибка? при echo $kom1 работает а при втором варианте выдает ошибку неизвестная переменная?

if и echo
У меня код похож на этот : &lt;? session_start(); $login = $_SESSION; if (isset($login)) { echo &quot;Вы зарегестрированы !&quot;; ...

If в echo
Как воплотить функцию if по средине echo &lt;? echo 'asdasd'. if(1==1){ echo '1'}else{echo '2'} .'fuck';?&gt;

echo
в некоторых темах люди негативно сказывались на вывод через echo , но и толком не обьясняли почему , вот пример как я это использую ...

echo
Проблема такая: есть сайт.пользователь входит на него и ему пишет что то вроде echo &quot;Вы вошли как &quot;.$_SESSION; после...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru