php выполнение скрипта без перехода

Как отправить форму обработчику PHP без перехода на нее?

Суть в том, что при отправке формы открывает белую и чистую страницу PHP.

Можно как-то этого избежать, чтобы после отправки оставаться на этой же странице?

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

Cделал все как указано в мануалке. www.poseti.net/otpravka-formyi.html

jQuery, наверно неправильно подключили.

Либо так подключайте:

Либо скачайте jQuery и поместите рядом с вашими скриптами (естественно путь параметре «src» придётся поменять)

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

Вот так должно работать:

В целях отладки код обработчика приведите к виду:

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

Вот теперь, когда на 100% ясно, AJAX работает можно заняться обработчиком.
Вот тебе мануал по функции mail()

Например можешь пока потренироваться и обработчик привести к виду:

Источник

Фоновое выполнение скрипта на PHP без crontab

Озадачили меня тут написать демона на PHP. Т.е. скрипт, который будет заданное количество раз в заданное количество часов в случайное время (всегда случайное) выполнять определенные действия, и все это без использования cron’a.

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

Первая мысль — отключить ограничение времени выполнения скрипта. Запрещено хостером.

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

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

1. Пачка сигарет, ночь, гугл, доки, книги, мануалы….
goto 1…

На выходе получаю:
Задача_1:
Реализовать генератор времен выполнения скрипта, исходя из заданных количества раз и количества часов. Хранить где-то эти времена.

Задача_2:
Работать после закрытия браузера

Задача_3:
Не вылетать после окончания ограничения времени выполнения скрипта

Задача_4:
Выполнять в нужное время какие-то действия.

Итак…
Пишем в конфиге исходные данные:

Далее пишем функцию, которая поможет нам сгенерировать времена запуска.
В ней мы генерируем случайное число от 0 до количества секунд в исходном интервале.

Далее сгенерируем и запишем в сессию массив времен запуска. Предварительно отсортируем массив по возрастанию, чтобы сначала шло раннее время (машину времени я еще не успел создать).

Теперь надо заставить скрипт работать, не обращая внимания на максимальное время выполнения, установленное сервером.
Принцип таков:
1) Определяем время начала работы скрипта;
2) Определяем установленное ограничение на время выполнения.
3) Запускаем цикл, внутри которого считаем текущее время и вычисляем общее время работы скрипта, сверяем текущее время со значениями в массиве времен запуска, и если совпадение есть, выполняем заданные действия (у меня они в файле exec.php). Для запуска файлов используем сокеты.
4) Повторяем цикл пока время работы скрипта не приблизится к максимально разрешенному. Я поставил — пока до максимального времени не останется 5 секунд.

Итак… считаем начальные данные по времени:

Собственно, цикл. Комментарии в коде.

Ну и, если разрешенное время подходит к концу, то завершаем цикл и благополучно запускаем этот же скрипт другие процессом (в 5 секунд точно уложимся)

Собственно, готово.
Далее у меня много заморочек было в выполнении тех самых действий — там надо было робота написать для поиска ссылок по заданным ссылкам.

Когда дописал все, озадачился полезным применением…Использовать его можно как службу. Он может следить за чем-то в сети и уведомлять Вас, например, по почте. И не надо никаких cron’ов.

Скрипт можно еще оптимизировать — доработкой не занимался.
Кстати, вот от чего я не смог оторваться — браузер все же придется открыть, чтобы изначально запустить скрипт.

Источник

Форум PHP программистов ► PHP основы ► Формы + регулярные выражения

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без переходаphp выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без переходаphp выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

Новичок
php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

Профиль
Группа: Пользователь
Сообщений: 21
Пользователь №: 20132
На форуме:
Карма:

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

О, боже, куда катится мир. JS еще куда не шло, но флэш для отправки форм.

Отправить форму на mail. php а потом (если всё прошло нормально) сделать редирект обратно на исходную страницу никак было?

Цитата
О, боже, куда катится мир. JS еще куда не шло, но флэш для отправки форм.
Цитата
Нормально катится. smile.gif Мне флэш очень нравится, возможности там действительно фантастические. После флэш работать с JS так же противно, как после 600 мерседеса сесть в запорожец. Обидно, что пока он считается изгоем. Вот когда (если) браузеры по дефолту будут иметь флэш-плэер, тогда мы прикатимся в волшебный мир действительно интерактивных сайтов. smile.gif

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без переходаphp выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без переходаphp выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без переходаphp выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без переходаphp выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

Подписаться на тему
Уведомление на e-mail об ответах в тему, во время Вашего отсутствия на форуме.

Подписка на этот форум
Уведомление на e-mail о новых темах на форуме, во время Вашего отсутствия на форуме.

Скачать/Распечатать тему
Скачивание темы в различных форматах или просмотр версии для печати этой темы.

Источник

Асинхронное выполнение PHP скрипта на подпроцессах

php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

Добрый день, уважаемые хабровчане.

Сегодня я хотел бы поговорить о таких нетривиальных вещах, как асинхронные (параллельные) расчеты в языке PHP.
Сам по себе PHP — это скриптовый язык, который никогда и не претендовал на многопоточность. Но чем дальше в лес, тем более серьезные задачи стоят перед разработчиками, и тем больше приходится «извращаться» с пыхом, потому что мигрировать на более приспособленный под эти задачи язык программирования многие компании попросту боятся и не хотят. Следовательно, приходится работать с тем, что дают.
Подробности под катом…

Какое-то время назад передо мной стояла достаточно нетривиальная задача.
Если вкратце, то в проекте было реализовано примерно 20 очень тяжеловесных модулей по расчету стоимости товара.
Всё это висело на нескольких реляционных таблицах, каждый из модулей содержал свои собственные правила расчета и тп. Но выдавать на клиент всё это нужно было единым пакетом. И это должно было выполняться быстро. Очень быстро. Кеширование спасало, но в очень ограниченных объемах, совсем недостаточных для выполнения технических требований.

Алгоритм был довольно прост: на вход подавались необходимые аргументы, потом инстанцировались в массив все модули, и в цикле всё это дело просчитывалось. Ответ собирался в единый объект и выплёвывался на клиент для постобработки.

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

Как вы сами уже догадались, было предложено каким-либо образом распараллелить процесс. Но с PHP это непросто, потому что он этого не умеет делать из коробки.

К сожалению, так в итоге ни к чему и не пришли. Было решено свернуть проект.

Но для меня вопрос остался открыт, потому что решение быть должно. И ещё тогда мы задумывались о некоем подобии “подпроцессов”, которые порождает основной скрипт (аналог exec() функции).

С тех пор прошло довольно много времени, из проекта я давно ушел. Но вот буквально на прошлой неделе у меня появилась одна очень нетривиальная задача: написать скрипт, который определенным образом залогирует текущее состояние некоей entity и часть её тяжелых реляционных зависимостей. Для этого используется 2 класса, правильно подготавливающих данные и сохраняющих это в БД. Проблема в том, что таких объектов примерно 2800. Мой скрипт отваливается по

На каждый пакет из 50 entities тратится, в среднем, 190мб памяти, с каждым новым пакетом кол-во использованной памяти росло. При полном отключении ограничений на использование оперативки, я получил такую же ошибку плюс Segmentation Fault.

Т.е. так или иначе, нужно было придумать как избежать переполнения оперативной памяти в скрипте, и постараться сделать его “чуточку” побыстрее. Сперва попытались разобраться, почему увеличивается потребление памяти из итерацию в итерацию. Оказалось, что ноги растут из особенностей работы симфового ServiceContainer и EventDispatcher. Там в event подпихивается весь контейнер, и потом это делается рекурсивно. Обходить нам это всё было, честно говоря, лень, и мой коллега предложил довольно изящное решение.

В наборе компонентов Symfony2 есть такая замечательная штука, как Symfony Process Component.
Эта вундервафля позволяет в ходе выполнения скрипта породить подпроцесс и запустить его в CLI-режиме (как обычную консольную команду).

Сперва мы просто попробовали “отпочковывать” по одному процессу для ограничения использования RAM. Но потом в доках вычитали, что эта штука умеет работать асинхронно.

Было решено опробовать это в деле. В итоге получилось нечто вроде этого(Ниже пример с Example-репозитория на GitHub. Логика самих подпроцессов очень простая, но утяжеленная):

В итоге имеем примерно вот такую картину:
php выполнение скрипта без перехода. Смотреть фото php выполнение скрипта без перехода. Смотреть картинку php выполнение скрипта без перехода. Картинка про php выполнение скрипта без перехода. Фото php выполнение скрипта без перехода

Скажу откровенно, я был очень впечатлён такими возможностями.
Надеюсь, некоторым эта статья будет в помощь. В качестве дополнительного материала оставлю тут ссылку на репозиторий, где был реализован пример, приведенный выше.

Спасибо за внимание. Буду рад отзывам и комментариям.

Обновил скриншот htop. Теперь есть данные по процессам. Спасибо hell0w0rd

Источник

Проблемы «долгих» скриптов PHP

Внешний таймаут

В первую очередь нужно установить подходящее значение параметра max_execution_time в конфиге PHP.

Веб-сервер может также проксировать запросы на другой веб-сервер, который и запустит PHP скрипт (не редкий пример, nginx — фронтенд, apache — бэкэнд). В этом случае на проксирующем веб-сервере необходимо также настраивать таймаут проксирования. Для apache ProxyTimeout, для nginx proxy_read_timeout.

Прерывание пользователем

Если скрипт запускается в ответ на HTTP-запрос, то пользователь может остановить выполнение запроса в своем браузере, в этом случае прекратит свою работу и PHP скрипт. Если же требуется, чтобы скрипт продолжил свою работу даже после остановки запроса, установите в TRUE параметр ignore_user_abort в конфиге PHP.

Потеря открытых соединений

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

Параллельный запуск

В таких случаях можно использовать блокировку используемых ресурсов, но эта задача всегда решается индивидуально. Либо можно просто проверять, не запущена ли другая копия этого скрипта, и либо подождать завершения его работы, либо завершить текущий запуск. Для этого можно просматривать список запущенных процессов, либо использовать блокировку запуска самого скрипта, что то вроде:

Нагрузка на веб-сервер

В случаях, когда долгие скрипты запускаются через веб-сервер, соединение клиента с этим самым веб-сервером остается открытым до тех пор, пока не отработает скрипт. Это не есть хорошо, т.к. задача веб-сервера как можно быстрее обработать запрос и отдать результат. Если же соединение остается висеть, то один из воркеров (процессов) веб-сервера на долгое время будет занят. А если одновременно будет запущено достаточно много таких скриптов, то они могут занять все (ну или почти все) свободные воркеры (для apache см. MaxClients), и веб-сервер просто не сможет обрабатывать другие запросы.

Поэтому следует при обработке запроса пользователя, запускать скрипт в фоновом режиме через php-cli, чтобы не нагружать веб-сервер, а пользователю отвечать что его запрос обрабатывается. При необходимости можно периодически проверять состояние обработки при помощи AJAX запросов.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *