/syndis_test.php [wymaga zalogowania do SoftSPM]
* - z wiersza polecen: C:\Programy\xampp_old\php\php.exe syndis_test.php
*
* Skrypt NICZEGO NIE ZAPISUJE - wykonuje wylacznie operacje odczytu.
*
* Testuje kolejno:
* 1. osiagalnosc portu TCP [fsockopen]
* 2. pobranie pliku WSDL przez HTTP
* 3. surowy POST z gotowa koperta SOAP - z pominieciem klasy SoapClient
* 4. wywolanie przez SoapClient w kilku wariantach opcji transportu
* ========================================================================== */
$isCli = (php_sapi_name() == 'cli');
if (!$isCli)
{
session_start();
if (empty($_SESSION['user'])) die('Brak dostepu - zaloguj sie najpierw do SoftSPM.');
header('Content-Type: text/html; charset=utf-8');
echo '';
}
function out($s='') { global $isCli; echo $isCli ? strip_tags($s)."\n" : $s."
\n"; }
function head2($s) { global $isCli; echo $isCli ? "\n=== $s ===\n" : "
$s
\n"; }
function head3($s) { global $isCli; echo $isCli ? "\n--- $s ---\n" : "$s
\n"; }
function dump($s) { global $isCli; echo $isCli ? $s."\n" : "".htmlspecialchars($s, ENT_QUOTES, 'UTF-8')."
\n"; }
function verdict($ok,$t) { return $ok ? 'OK '.$t : 'BLAD '.$t; }
// --------------------------------------------------------------------------
// Adresy do sprawdzenia - wszystkie wystepujace w kodzie importerow soap_*.php.
// Mozna dopisac wlasny, np. array('192.168.1.50', 3615).
// --------------------------------------------------------------------------
$hosts = array(
array('172.22.64.101', 3615, 'soap_of_while.php, soap_importwells.php - aktualnie skonfigurowany'),
array('172.22.64.134', 3615, 'soap_importwells_migracja.php'),
array('172.21.11.101', 3615, 'soap_update5min.php, soap_importusers.php'),
array('172.20.43.10', 3615, 'adres zakomentowany w importerach'),
);
$soapAction = 'http://www.mikronika.com.pl/2014/11/24/spm/GetUserInfos';
$envelope = ''."\n"
. ''
. '';
$localWsdl = dirname(__FILE__).DIRECTORY_SEPARATOR.'SyndisSpm.wsdl';
out('SoftSPM - diagnostyka polaczenia z SYNDIS');
out('Data: '.date('Y-m-d H:i:s').' | PHP '.phpversion().' | SOAP: '.(extension_loaded('soap') ? 'zaladowany' : 'BRAK ROZSZERZENIA'));
out('Lokalny plik WSDL: '.$localWsdl.' - '.(is_file($localWsdl) ? 'jest' : 'BRAK'));
foreach ($hosts as $h)
{
list($ip, $port, $desc) = $h;
head2($ip.':'.$port.' ['.$desc.']');
// ---------------- 1. osiagalnosc portu ----------------
head3('1. Port TCP');
$t0 = microtime(true);
$errNo = 0; $errStr = '';
$fp = @fsockopen($ip, $port, $errNo, $errStr, 5);
$ms = round((microtime(true) - $t0) * 1000);
if (!$fp)
{
out(verdict(false, "port nieosiagalny po {$ms} ms - {$errStr} [{$errNo}]"));
out('Dalsze testy dla tego adresu pominiete.');
continue;
}
out(verdict(true, "polaczono w {$ms} ms"));
// ---------------- 2. WSDL przez HTTP ----------------
head3('2. Pobranie WSDL przez HTTP [port 80]');
$ctx = stream_context_create(array('http' => array('timeout' => 8, 'ignore_errors' => true)));
$wsdl = @file_get_contents('http://'.$ip.'/SyndisSpm.wsdl', false, $ctx);
if ($wsdl === false)
out(verdict(false, 'nie udalo sie pobrac'));
else
{
$isXml = (strpos(substr($wsdl, 0, 200), ' 400000) break;
}
$meta = stream_get_meta_data($fp);
fclose($fp);
if ($meta['timed_out']) out(verdict(false, 'przekroczono czas oczekiwania na odpowiedz'));
if ($raw === '')
out(verdict(false, 'serwer nie zwrocil ANI JEDNEGO bajtu'));
else
{
$status = strtok($raw, "\r\n");
$hasXml = (stripos($raw, ' array(),
'keep_alive=false' => array('keep_alive' => false),
'keep_alive=false + SOAP 1.2' => array('keep_alive' => false, 'soap_version' => SOAP_1_2),
'kompresja gzip' => array('keep_alive' => false, 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP),
);
foreach ($variants as $name => $opt)
{
$opt = array_merge(array('trace' => 1, 'exceptions' => 1, 'cache_wsdl' => WSDL_CACHE_NONE, 'connection_timeout' => 15), $opt);
try
{
$cl = new SoapClient($wsdlSrc, $opt);
$cl->__setLocation('http://'.$ip.':'.$port.'/');
$r = $cl->GetUserInfos(array());
$cnt = 0;
if (isset($r->users)) { $u = is_array($r->users) ? $r->users : array($r->users); $cnt = count($u); }
out(verdict(true, $name.' - odebrano kont: '.$cnt));
if ($cnt > 0)
{
$first = is_array($r->users) ? $r->users[0] : $r->users;
out(' pierwszy rekord: '.$first->login.' / '.$first->fullName);
}
}
catch (Exception $e)
{
out(verdict(false, $name.' - '.$e->getMessage()));
if (isset($cl))
{
$resp = $cl->__getLastResponse();
dump("NAGLOWKI ODPOWIEDZI:\n".$cl->__getLastResponseHeaders()
."\nODPOWIEDZ (".strlen($resp)." B):\n".($resp === '' ? '[pusto]' : substr($resp, 0, 2000)));
}
}
}
}
head2('Koniec');
out('Po zakonczeniu diagnostyki USUN ten plik z serwera.');
?>