У нас Zend PHP 7.2 работает на IBM i OS 7.2.
При выполнении программных вызовов или выполнении команд с помощью инструментария XMLSERVICE их выполнение выполняется в профиле QTMHHTTP, а не для аутентифицированного пользователя дляподключение.Это вызывает все виды проблем с правами доступа.
Следующий код завершается ошибкой с ошибкой аутентификации, как и должно быть.Если я заменю значения профиля пользователя и пароля реальными, выходные данные будут созданы правильно, а в выводе DSPJOB будет показан текущий пользователь задания XMLSERVICE - QTMHHTTP, а не указанный пользователь.
<code><html>
<head>
<title>Connection Test</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<body>
<div class="container m-4">
<h1>Connection Test</h1>
<?php
include_once zend_deployment_library_path('PHP Toolkit for IBMI i') . DIRECTORY_SEPARATOR . 'ToolkitService.php';
$user = 'MYID'; $passwd = 'MYPWD';
$options = array('i5_naming'=>DB2_I5_NAMING_ON);
try { $connection = db2_connect('*LOCAL', $user, $passwd, $options); }
catch (Exception $e) { echo $e->getMessage(), "\n"; print db2_conn_errormsg(); exit(); }
try { $toolkit = ToolkitService::getInstance($connection, DB2_I5_NAMING_ON); }
catch (Exception $e) { echo $e->getMessage(), "\n"; exit(); }
$output = $toolkit->CLInteractiveCommand('DSPJOB');
echo"<div class='alert alert-info alert-dismissible'>";
echo "<button type='button' class='close' data-dismiss='alert'>×</button>";
echo "<pre>"; print_r($output); echo "
"; echo"";?>
Ясно, что аутентификация происходит, так как при вводе учетных данных они должны быть правильными. Однако я могу получить тот же вывод:просто пропуская поля профиля пользователя и пароля, используя режим подключения по умолчанию «QTMHHTTP».
Чего не хватает, чтобы заставить функции запускаться под аутентифицированным пользователем?
Обратите внимание, что проблемабыл обнаружен, когда мы пытались вызвать системный API и получали ошибки авторизации, которые не должны происходить для аутентифицированного пользователя (работал тот же API, который был вызван из 5250 тем же пользователем).