запуск скрипта из другого (не екзеком и без крона)

  • Автор темы Автор темы vafel
  • Дата начала Дата начала

vafel

Новичок
запуск скрипта из другого (не екзеком и без крона)

народ ктонить знает как моджно пустить другой скрипт на параллельное выполнение ?

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

как это обойти ?
 
просто интересно есть ли иной выход.

чтобы не изменять настройки серевера, он в сейв моде.
 
Но больше нечем. если всякого рода екзеки и системы отключены, меняй хостинг.
 
Форками и threads ещё можно поиграться. Но как я поняла, это тебе тоже не дадут.
 
Попробуй "блохой" запустить.
<img src="test.php?par1=value" width="1" height="1">
 
см. socket_set_blocking

или из JavaScript используя XmlHttpRequest
 
moxnatiy
пхп пересобирать надо
идея была чтобы не изменять настроек сервера
 
а если в файле http://localhost/1.php
написать

<?

...

$f = fopen("http://localhost/2.php", "r");
if($f)
echo "It's ok";
else
echo "Oblom";
fclose($f);

...

?>

?
 
если ты знаешь, то перед тем, как вывести что запускается скрипт. мы запрашиваем пхпшник по такому-то адресу, если он запускается, то мы об это узнаем, потому $f не false. скрипт запустился - результаты, видимо, качать не надо, поэтому закрываем ресурс. в противном случае получаем ошибку.
 
nighthunter
да это тот же самый exec
tolya
нито ни то не помогает (
от XMLHTTPREQUEST также вешается браузер на время выполнения скрипта

придется екзеком делать
 
Автор оригинала: vafel
tolya
нито ни то не помогает (
от XMLHTTPREQUEST также вешается браузер на время выполнения скрипта

придется екзеком делать
Не пойму чего у тебя не получается?
Вот пример с использованием socket_set_blocking
test.php запускается из index.php. index.php только запускает test.php, не дожидаясь ответа от него.

index.php
PHP:
<?
echo "begin<br>";
$fp = httpGet("localhost", "/new/blocked/test.php");
socket_set_blocking($fp, 1);
echo "end";

function httpGet($host, $path, $port=80)
{
	$full_path = "http://$host$path";

	$query = "GET $full_path HTTP/1.0\r\n".
		"Host: $host:$port\r\n".
		"User-agent: tolya\r\n".
		"\r\n";

	$fp = fsockopen($host, $port);
	fputs($fp, $query);
	return($fp);
}
?>

test.php
PHP:
<?

echo "begin<br>";
for ($i=0; $i<1000; $i++)
{	
	$fp = fopen("d:/wwwserver/www/new/blocked/testing.dat", "w");
	fwrite($fp, "call: $i");

	fclose($fp);
}
echo "end<br>";

?>


Можно также сделать с помощью XmlHttpRequest, не дожидаясь ответа и отработки скрипта.
 
Сверху