/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.'); ?>