Initial commit

This commit is contained in:
2026-09-03 11:24:19 +02:00
commit 6ed3153f36
1897 changed files with 538007 additions and 0 deletions
+176
View File
@@ -0,0 +1,176 @@
<?php
/* ============================================================================
* SoftSPM - skrypt diagnostyczny polaczenia z usluga SOAP systemu SYNDIS.
*
* PLIK JEDNORAZOWY - po zakonczonej diagnostyce NALEZY GO USUNAC z serwera.
*
* Uruchomienie:
* - z przegladarki: http://<serwer>/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 '<meta charset="utf-8"><style>body{font-family:Consolas,monospace;font-size:12px;background:#f6f9fb;color:#26323a;margin:16px}'
. 'h2{font-family:"Segoe UI",Arial;font-size:16px;color:#0c7491;border-bottom:2px solid #29abe2;padding-bottom:4px;margin:22px 0 8px}'
. 'h3{font-family:"Segoe UI",Arial;font-size:13px;margin:14px 0 4px;color:#26323a}'
. 'pre{background:#fff;border:1px solid #dfe6ea;border-radius:6px;padding:10px;white-space:pre-wrap;word-break:break-all;max-height:340px;overflow:auto;margin:4px 0}'
. '.ok{color:#1f8a53;font-weight:bold}.bad{color:#c1272d;font-weight:bold}.warn{color:#b3760a;font-weight:bold}</style>';
}
function out($s='') { global $isCli; echo $isCli ? strip_tags($s)."\n" : $s."<br>\n"; }
function head2($s) { global $isCli; echo $isCli ? "\n=== $s ===\n" : "<h2>$s</h2>\n"; }
function head3($s) { global $isCli; echo $isCli ? "\n--- $s ---\n" : "<h3>$s</h3>\n"; }
function dump($s) { global $isCli; echo $isCli ? $s."\n" : "<pre>".htmlspecialchars($s, ENT_QUOTES, 'UTF-8')."</pre>\n"; }
function verdict($ok,$t) { return $ok ? '<span class="ok">OK</span> '.$t : '<span class="bad">BLAD</span> '.$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 = '<?xml version="1.0" encoding="UTF-8"?>'."\n"
. '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" '
. 'xmlns:ns1="http://www.mikronika.com.pl/2014/11/24/spm/types">'
. '<SOAP-ENV:Body><ns1:GetUserInfosRequest/></SOAP-ENV:Body></SOAP-ENV:Envelope>';
$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), '<?xml') !== false || strpos(substr($wsdl, 0, 400), '<definitions') !== false);
out(verdict($isXml, strlen($wsdl).' B, '.($isXml ? 'wyglada na XML' : 'to NIE jest XML')));
if (!$isXml) dump(substr($wsdl, 0, 600));
}
// ---------------- 3. surowy POST bez SoapClient ----------------
head3('3. Surowy POST z koperta SOAP [z pominieciem SoapClient]');
$req = "POST / HTTP/1.1\r\n";
$req .= "Host: {$ip}:{$port}\r\n";
$req .= "Content-Type: text/xml; charset=utf-8\r\n";
$req .= "SOAPAction: \"{$soapAction}\"\r\n";
$req .= "User-Agent: SoftSPM-diag\r\n";
$req .= "Content-Length: ".strlen($envelope)."\r\n";
$req .= "Connection: close\r\n\r\n";
$req .= $envelope;
stream_set_timeout($fp, 20);
fwrite($fp, $req);
$raw = '';
while (!feof($fp))
{
$chunk = fread($fp, 8192);
if ($chunk === false || $chunk === '') break;
$raw .= $chunk;
if (strlen($raw) > 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, '<?xml') !== false || stripos($raw, 'SOAP-ENV:Envelope') !== false);
out(verdict($hasXml, strlen($raw).' B | '.$status));
dump(substr($raw, 0, 4000));
}
// ---------------- 4. SoapClient w kilku wariantach ----------------
head3('4. SoapClient - warianty opcji transportu');
if (!extension_loaded('soap')) { out('Rozszerzenie soap niezaladowane - test pominiety.'); continue; }
$wsdlSrc = is_file($localWsdl) ? $localWsdl : 'http://'.$ip.'/SyndisSpm.wsdl';
$variants = array(
'domyslne' => 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('&nbsp;&nbsp;&nbsp;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.');
?>