Нужна помощь PHP

Maxouni
На сайте с 18.11.2008
Offline
119
523

Уважаемые прогеры, подскажите можно ли запустить в одном скрипте другой параллельно,не трогая выполняющийся, т.е. допустим идет выполнение скрипта №1, в нём вызывается скрипт №2, и при этом скрипт №1 не ждет выполнения скрипта №2(а просто даёт сигнал о начале выполнения, как по крону), возможно ли так сделать???

Создание, продвижение, поддержка сайтов и приложений.
FFFFx029A
На сайте с 01.09.2007
Offline
142
#1

Ну если скрипт 1 и скрипт 2 не взаимосвязаны (функции и переменные), то можно запустить выдав яваскрипт, а вообще для всего этого используют Ajax

<?

//...

echo "<script src='/script2.php'></script>";

//...

?>

http://www.youtube.com/watch?v=Gyl4E4EcPdc (http://www.youtube.com/watch?v=Gyl4E4EcPdc) - партнёрка от Мавроди и МММ))) http://miniwm.ru/soft.php?read=917 (http://miniwm.ru/soft.php?read=917) CMS MiniWM v2.8 - 49.99$
Djaarf
На сайте с 16.12.2008
Offline
15
#2

Можно попробовать с Zend'ом такое проделать:


<?php
require_once 'Zend/Http/Client.php';

$client = new Zend_Http_Client('http://example.org');
$response = $client->request();
?>

а нет. Он походу ждет, пока $client->request() не вернет результат.

Все таки многопоточность PHP не поддерживает - интерпретатор ведь.

iamlime
На сайте с 29.05.2009
Offline
2
#3

Можно реализовать это через неблокируемые сокеты.

Вкратце: скрипт через сокет открывает урл (другой скрипт), не дожидаясь ответа (неблокируемый сокет), откывает его снова. Псевдомногопоточность.

Вот пример



$host='domain.ru'; // наш хост
$max_threads = 10; // максимальное количество потоков
$threads = array(); // тут будем держать открытые потоки
$done = false;

while(!$done) {
// если количество запущенных потоков меньше максимального
if(count($threads) < $max_threads) {

// открываем сокет и формируем заголовок
$socket = fsockopen($host, 80);
//script.php - скрипт который выполняет задачу
$url="http://".$host."/script.php?parametr=value"; //GETом передаем параметры
fputs($socket, "GET $url HTTP/1.0\r\n");
fputs($socket, "Host: $host\r\n");
fputs($socket, "\r\n");
stream_set_blocking($socket, 0);
stream_set_timeout($socket, 3600);
// запоминаем запущенный сокет
$threads[] = $socket;
}

foreach ($threads as $key=>$socket) {
if(feof($socket)) {
// если поток отработал, убираем его
fclose($socket);
unset($threads[$key]);
} else {
echo fgets($socket, 1000); flush();
}
}
// делаем задержку иначе загрузка сервера приближается к 100%
sleep(1);
if (count($threads) == 0) $done = true;
}


Nothing is exactly as it seems. Nor is it otherwise… (http://limeblog.ru)
O3
На сайте с 17.11.2008
Offline
127
#4

fork

php manual

вроде подходит

[Удален]
#5

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

СКОРПИОН
На сайте с 05.01.2006
Offline
120
#6
• Контекстные ссылки с внутренних страниц навсегда (/ru/forum/370882) • Качественные сайты для заработка на контекстной рекламе и ссылках
FeoOne
На сайте с 27.12.2008
Offline
32
#7

pcntl + posix

погугли по запросу "pcntl_fork", в инете куча примеров. только есть одно но - pcntl не будет работать, если пхп стоит как модуль апача.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий