FAQ
•
Поиск
Вход
•
Регистрация
Список форумов newssoft.ru
->
PHP
Ответить
Имя
Тема
Сообщение
Смайлики
Дополнительные смайлики
Цвет шрифта:
По умолчанию
Тёмно-красный
Красный
Оранжевый
Коричневый
Жёлтый
Зелёный
Оливковый
Голубой
Синий
Тёмно-синий
Индиго
Фиолетовый
Белый
Чёрный
Размер шрифта:
Размер шрифта
Очень маленький
Маленький
Обычный
Большой
Огромный
Закрыть теги
[quote="admin"]Выполнение [b]параллельного процесса[/b] в [b]PHP[/b]-[i]скрипте [/i]с контролем времени: [code] <? echo date('H:i:s')."<br />"; $domain = 'domain1254'; $zone = 'com'; $descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("file", "error-output.txt", "a") // stderr is a file to write to ); $cwd = './'; $env = array(lookupResult => ''); $process = proc_open('php', $descriptorspec, $pipes, $cwd, $env); if (is_resource($process)) { // $pipes now looks like this: // 0 => writeable handle connected to child stdin // 1 => readable handle connected to child stdout // Any error output will be appended to /tmp/error-output.txt fwrite($pipes[0], '<?php '. 'session_start(); '. 'require_once("_rootconfig.php"); '. 'global $include_path, $domain, $zone; '. 'include $include_path."/newfunctions.php"; '. '$whoiseMaster1 = $include_path."2/whois-master/Domaintools.php"; '. 'if(file_exists($whoiseMaster1)) require_once($whoiseMaster1); '. 'else exit("cannot lookup selected domains"); '. 'unset($whoiseMaster1); '. '$lookup = new Domaintools(); '. '$_ENV["lookupResult"] = $lookup->whois("'.$domain.'", "'.$zone.'"); '. 'print_r($_ENV); '. '?>'); /* fwrite($pipes[0], '<?php '. 'session_start(); '. 'require_once("_rootconfig.php"); '. 'global $include_path; '. 'include $include_path."/newfunctions.php"; '. '$domain = iconv("UTF-8", "windows-1251", "'.$domain.'"); '. '$zone = iconv("UTF-8", "windows-1251", "'.$zone.'"); '. '$d2 = new domain($domain.".".$zone); '. 'unset($d2->servers); '. '$_ENV["lookupResult"] = array("domain" => $domain, "zone" => $zone); '. 'if($d2->is_available()) { '. ' if($d2->last_error != "") { '. ' if($d2->my_whois_server != "") { '. ' $_ENV["lookupResult"]["status"]=$d2->last_error; '. ' $_ENV["lookupResult"]["code"]=-4; '. ' } '. ' if(strpos($d2->last_error,"Query rate of")) { '. ' $_ENV["lookupResult"]["status"]="error"; '. ' $_ENV["lookupResult"]["code"]=-3; '. ' } '. ' $isDomainOnlyLatin1 = (preg_match("/^[\w\d\s.,-]*$/", $domain))?true:false; '. ' $isZoneOnlyLatin1 = true; '. ' if( '. ' ($isZoneOnlyLatin1 && !$isDomainOnlyLatin1) || '. ' (!$isZoneOnlyLatin1 && $isDomainOnlyLatin1) '. ' ) { '. ' $_ENV["lookupResult"]["status"]="Domain name not valid"; '. ' $_ENV["lookupResult"]["code"]=-2; '. ' } '. ' if(strlen($domain)<2) { '. ' $_ENV["lookupResult"]["status"]="Domain name to short"; '. ' $_ENV["lookupResult"]["code"]=-1; '. ' } '. ' } else { '. ' if($d2->premium_domain) { '. ' $_ENV["lookupResult"]["status"]="premium"; '. ' $_ENV["lookupResult"]["code"]=2; '. ' } else { '. ' $_ENV["lookupResult"]["status"]="success"; '. ' $_ENV["lookupResult"]["code"]=1; '. ' } '. ' } '. '} else { '. ' $_ENV["lookupResult"]["status"]="warning"; '. ' $_ENV["lookupResult"]["code"]=0; '. '} '. 'print_r($_ENV); '. '?>'); */ fclose($pipes[0]); for( $ic = 5; $ic > 0; $ic-- ) { echo "check, wait $ic seconds...<br />"; sleep(1); } $etat = proc_get_status($process); // It is important that you close any pipes before calling // proc_close in order to avoid a deadlock if($etat['running'] == true) { echo "To long wait...<br />"; fclose($pipes[1]); $return_value = proc_terminate($process); } else { echo "Complete intime...<br />"; $arrresult = stream_get_contents($pipes[1]); fclose($pipes[1]); $return_value = proc_close($process); } //echo "command returned $return_value<br />"; foreach(explode("[", trim(trim(trim(trim($arrresult, "Array")), "()"))) as $key => $val) { $tvar = explode("] => ", trim($val)); if(!empty($tvar[1])) $arrresult2[$tvar[0]] = $tvar[1]; } unset($arrresult2["lookupResult"]); $arrresult2["code"] = trim(trim($arrresult2["code"], ") ")); $lookupResult = $arrresult2; unset($arrresult); unset($arrresult2); } echo "<br />".date('H:i:s')."<br />"; ?> [/code] [Ссылки] 1: [url=https://habr.com/ru/post/278755/]Асинхронное параллельное исполнение в PHP[/url] 2: [url=https://www.php.net/manual/en/function.proc-open.php]proc_open[/url] 3: [url=https://www.php.net/manual/en/function.stream-get-contents.php]stream_get_contents[/url][/quote]
Настройки
HTML
ВЫКЛЮЧЕН
BBCode
ВКЛЮЧЕН
Смайлики
ВКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Отключить в этом сообщении смайлики
Часовой пояс: GMT + 3
Перейти:
Выберите форум
Сервера linux
----------------
Серверные команды
english support
План работ
----------------
В работе
Разработка
----------------
PHP
JS
HTML5 и CSS3
Perl и Ruby
Обзор темы
Автор
Сообщение
admin
Добавлено: Пт Янв 10, 2020 8:32 pm
Заголовок сообщения:
С помощью pthreads:
Статья
Мануал
Код:
class Request1 extends Thread {
$username = 'xxxxx';
$api_onfleet = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$url_onfleet = "https://onfleet.com/api/v2/tasks";
public function run() {
curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
$request = $this->url.'api/mail.send.json';
// Generate curl request
$session = curl_init($request);
// Tell curl to use HTTP POST
curl_setopt ($session, CURLOPT_POST, true);
// Tell curl that this is the body of the POST
curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
// Tell curl not to return headers, but do return the response
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// obtain response
$response = curl_exec($session);
curl_close($session);
}
}
class Request2 extends Thread {
$username = 'xxxxx';
$api_onfleet = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$url_onfleet = "https://onfleet.com/api/v2/tasks";
public function run() {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_onfleet);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERPWD, $this->api_onfleet);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"destination":{"address":{"unparsed":"'.$pickup_address.'"},"notes":"'.$comments.'"},"recipients":[{"name":"'.$name.'","phone":"+61'.$phone.'","notes":"Number of riders: '.$riders.'"}],"completeBefore":'.$timestamp.',"pickupTask":"yes","autoAssign":{"mode":"distance"}}');
$result_pickup = curl_exec($ch);
curl_close($ch);
// Post the Dropoff task to Onfleet
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->url_onfleet);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERPWD, $this->api_onfleet);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_ENCODING, "");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, '{"destination":{"address":{"unparsed":"'.$dropoff_address.'"},"notes":"'.$comments.'"},"recipients":[{"name":"'.$name.'","phone":"+61'.$phone.'","notes":"Number of riders: '.$riders.'"}],"autoAssign":{"mode":"distance"}}');
$result_dropoff = curl_exec($curl);
curl_close($curl);
}
}
$req1 = new Request1();
$req1->start();
$req2 = new Request2();
$req2->start();
admin
Добавлено: Пт Янв 10, 2020 6:17 pm
Заголовок сообщения: Параллельные процессы в PHP с Apache
Выполнение
параллельного процесса
в
PHP
-
скрипте
с контролем времени:
Код:
<?
echo date('H:i:s')."<br />";
$domain = 'domain1254';
$zone = 'com';
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("file", "error-output.txt", "a") // stderr is a file to write to
);
$cwd = './';
$env = array(lookupResult => '');
$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {
// $pipes now looks like this:
// 0 => writeable handle connected to child stdin
// 1 => readable handle connected to child stdout
// Any error output will be appended to /tmp/error-output.txt
fwrite($pipes[0], '<?php '.
'session_start(); '.
'require_once("_rootconfig.php"); '.
'global $include_path, $domain, $zone; '.
'include $include_path."/newfunctions.php"; '.
'$whoiseMaster1 = $include_path."2/whois-master/Domaintools.php"; '.
'if(file_exists($whoiseMaster1)) require_once($whoiseMaster1); '.
'else exit("cannot lookup selected domains"); '.
'unset($whoiseMaster1); '.
'$lookup = new Domaintools(); '.
'$_ENV["lookupResult"] = $lookup->whois("'.$domain.'", "'.$zone.'"); '.
'print_r($_ENV); '.
'?>');
/*
fwrite($pipes[0], '<?php '.
'session_start(); '.
'require_once("_rootconfig.php"); '.
'global $include_path; '.
'include $include_path."/newfunctions.php"; '.
'$domain = iconv("UTF-8", "windows-1251", "'.$domain.'"); '.
'$zone = iconv("UTF-8", "windows-1251", "'.$zone.'"); '.
'$d2 = new domain($domain.".".$zone); '.
'unset($d2->servers); '.
'$_ENV["lookupResult"] = array("domain" => $domain, "zone" => $zone); '.
'if($d2->is_available()) { '.
' if($d2->last_error != "") { '.
' if($d2->my_whois_server != "") { '.
' $_ENV["lookupResult"]["status"]=$d2->last_error; '.
' $_ENV["lookupResult"]["code"]=-4; '.
' } '.
' if(strpos($d2->last_error,"Query rate of")) { '.
' $_ENV["lookupResult"]["status"]="error"; '.
' $_ENV["lookupResult"]["code"]=-3; '.
' } '.
' $isDomainOnlyLatin1 = (preg_match("/^[\w\d\s.,-]*$/", $domain))?true:false; '.
' $isZoneOnlyLatin1 = true; '.
' if( '.
' ($isZoneOnlyLatin1 && !$isDomainOnlyLatin1) || '.
' (!$isZoneOnlyLatin1 && $isDomainOnlyLatin1) '.
' ) { '.
' $_ENV["lookupResult"]["status"]="Domain name not valid"; '.
' $_ENV["lookupResult"]["code"]=-2; '.
' } '.
' if(strlen($domain)<2) { '.
' $_ENV["lookupResult"]["status"]="Domain name to short"; '.
' $_ENV["lookupResult"]["code"]=-1; '.
' } '.
' } else { '.
' if($d2->premium_domain) { '.
' $_ENV["lookupResult"]["status"]="premium"; '.
' $_ENV["lookupResult"]["code"]=2; '.
' } else { '.
' $_ENV["lookupResult"]["status"]="success"; '.
' $_ENV["lookupResult"]["code"]=1; '.
' } '.
' } '.
'} else { '.
' $_ENV["lookupResult"]["status"]="warning"; '.
' $_ENV["lookupResult"]["code"]=0; '.
'} '.
'print_r($_ENV); '.
'?>');
*/
fclose($pipes[0]);
for( $ic = 5; $ic > 0; $ic-- ) {
echo "check, wait $ic seconds...<br />";
sleep(1);
}
$etat = proc_get_status($process);
// It is important that you close any pipes before calling
// proc_close in order to avoid a deadlock
if($etat['running'] == true) {
echo "To long wait...<br />";
fclose($pipes[1]);
$return_value = proc_terminate($process);
} else {
echo "Complete intime...<br />";
$arrresult = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$return_value = proc_close($process);
}
//echo "command returned $return_value<br />";
foreach(explode("[", trim(trim(trim(trim($arrresult, "Array")), "()"))) as $key => $val) {
$tvar = explode("] => ", trim($val));
if(!empty($tvar[1])) $arrresult2[$tvar[0]] = $tvar[1];
}
unset($arrresult2["lookupResult"]);
$arrresult2["code"] = trim(trim($arrresult2["code"], ") "));
$lookupResult = $arrresult2;
unset($arrresult);
unset($arrresult2);
}
echo "<br />".date('H:i:s')."<br />";
?>
[Ссылки]
1:
Асинхронное параллельное исполнение в PHP
2:
proc_open
3:
stream_get_contents
Powered by
phpBB
© 2001, 2005 phpBB Group
AllSat 22 -
photographe de mariage
- 2006