PHP Classes

How Can PHP Get Hardware Device Information Using the Package OPC UA Client: Control devices that support the OPC UA protocol

Recommend this page to a friend!
  Info   Documentation   View files Files   Install with Composer Install with Composer   Download Download   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2026-04-27 (4 days ago) RSS 2.0 feedNot yet rated by the usersTotal: Not yet counted Not yet ranked
Version License PHP version Categories
opcua-client 4.3.0MIT/X Consortium ...8Networking, Hardware, PHP 8
Description 

Author

This package can control devices that support the OPC UA protocol.

It can connect to a device accessible via TCP/IP given the host and port number and send requests using the OPC UA protocol to perform several types of operations with the device.

Currently it can:

- Read and write values supported by the device like temperatures, pressures, motor speeds, setpoints, and counters.

- Discover what devices are available in the network

- Subscribe to change of values in the devices

- Run operations on the devices

- Query historical data like logs and trends on aggregated values and get values from specific times using interpolation

Innovation Award
PHP Programming Innovation award nominee
April 2026
Nominee
Vote
Nowadays there are many hardware devices that can be accessed via a TCP/IP network connection to provide access to internal values or execute device operations.

The OPC UA is a protocol that can be used to access hardware devices to perform several operations.

This package provides a PHP client to access hardware devices using the OPC UA protocol.

Manuel Lemos
Picture of Gianfrancesco Aurecchia
  Performance   Level  
Name: Gianfrancesco Aurecchia <contact>
Classes: 1 package by
Country: Italy Italy
Innovation award
Innovation award
Nominee: 1x

Instructions

Please read this document to learn how to connect and control hardware devices using the OPC UA protocol.

Documentation

<h1 align="center"><strong>OPC UA PHP Client</strong></h1>

<div align="center"> <picture>

<source media="(prefers-color-scheme: dark)" srcset="assets/logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="assets/logo-light.svg">
<img alt="OPC UA PHP Client" src="assets/logo-light.svg" width="435">

</picture> </div>

<p align="center"> <a href="https://github.com/php-opcua/opcua-client/actions/workflows/tests.yml"><img src="https://img.shields.io/github/actions/workflow/status/php-opcua/opcua-client/tests.yml?branch=master&label=tests&style=flat-square" alt="Tests"></a> <a href="https://codecov.io/gh/php-opcua/opcua-client"><img src="https://img.shields.io/codecov/c/github/php-opcua/opcua-client?style=flat-square&logo=codecov" alt="Coverage"></a> <a href="https://packagist.org/packages/php-opcua/opcua-client"><img src="https://img.shields.io/packagist/v/php-opcua/opcua-client?style=flat-square&label=packagist" alt="Latest Version"></a> <!-- <a href="https://packagist.org/packages/php-opcua/opcua-client"><img src="https://img.shields.io/packagist/dt/php-opcua/opcua-client?style=flat-square" alt="Total Downloads"></a> --> <a href="https://packagist.org/packages/php-opcua/opcua-client"><img src="https://img.shields.io/packagist/php-v/php-opcua/opcua-client?style=flat-square" alt="PHP Version"></a> <a href="LICENSE"><img src="https://img.shields.io/github/license/php-opcua/opcua-client?style=flat-square" alt="License"></a> </p>

<p align="center"> <img src="https://custom-icon-badges.demolab.com/badge/Linux-?-2ea44f?style=flat-square&logo=linux&logoColor=white" alt="Linux"> <img src="https://custom-icon-badges.demolab.com/badge/macOS-?-2ea44f?style=flat-square&logo=apple&logoColor=white" alt="macOS"> <img src="https://custom-icon-badges.demolab.com/badge/Windows-?-2ea44f?style=flat-square&logo=windows11&logoColor=white" alt="Windows"> </p>

Connect your PHP application directly to industrial PLCs, SCADA systems, sensors, historians, and IoT devices using the OPC UA standard ? without any C/C++ extensions, HTTP gateways, or middleware in between.

This library implements the full OPC UA binary protocol stack in pure PHP: TCP transport, binary encoding/decoding, secure channel establishment with asymmetric and symmetric encryption, session management, and all the major OPC UA services. Just composer require and you're talking to PLCs from your Laravel app, your Symfony worker, or a plain PHP script.

What you can do with it:

  • Read and write process variables from any OPC UA-compliant device ? temperatures, pressures, motor speeds, setpoints, counters, anything the server exposes
  • Browse the entire address space to discover what's available, build tree views, or auto-map variables
  • Subscribe to data changes and events in real time ? get notified when a sensor value changes or an alarm fires
  • Call methods on the server ? trigger operations, run diagnostics, execute commands on the PLC
  • Query historical data ? pull raw logs, aggregated trends (min, max, average), or interpolated values at specific timestamps
  • Secure everything ? 10 security policies: 6 RSA (plaintext to AES-256 with RSA-PSS) + 4 ECC (NIST P-256/P-384 and Brainpool P-256/P-384 with ECDSA/ECDH), plus anonymous, username/password, or X.509 certificate authentication <sup>*</sup>

All of this with zero external dependencies beyond ext-openssl, and full support for PHP 8.2 through 8.5.

> Note: OPC UA relies on persistent sessions and long-lived connections. PHP's request/response model means connections are short-lived by default. For use cases like continuous monitoring or subscription polling, pair this with opcua-session-manager to persist sessions across requests ? or use it in a long-running worker process. > > The session manager is a separate package by design ? it runs as a daemon process using ReactPHP and Unix sockets, which would break this library's zero-dependency, cross-platform philosophy if bundled here. See the Ecosystem section for details.

<sup></sup>ECC note:The 4 ECC policies are implemented per OPC UA 1.05 spec but should be consideredexperimental*. No commercial OPC UA server vendor has released devices with ECC endpoints yet ? this is an ecosystem-wide gap. ECC support has been developed and tested exclusively against UA-.NETStandard (the OPC Foundation reference implementation). The implementation follows the 1.05.3 specification and is aligned with 1.05.4 regarding ReceiverCertificateThumbprint and HKDF salt encoding. Two ECC-specific changes from 1.05.4 (per-message IV and LegacySequenceNumbers) are not yet implemented ? see the ECC 1.05.4 Compliance section in the roadmap for a detailed analysis. For production deployments, use the RSA policies. If you ever manage to connect this library to a real industrial device with ECC OPC UA, let us know ? we owe you a coffee :) See the Security documentation for details.

<table> <tr> <td>

Tested against the OPC UA reference implementation

This library is integration-tested against UA-.NETStandard ? the reference implementation maintained by the OPC Foundation, the organization that defines the OPC UA specification. This is the same stack used by major industrial vendors to certify their products.

1300+ tests (1040+ unit, 250+ integration) run via uanetstandard-test-suite against 8 server instances covering every security policy, authentication method, data type, method call, subscription, event, alarm, and historical read defined by the spec ? with 99%+ unit test code coverage. Unit tests run on Linux, macOS, and Windows across PHP 8.2?8.5. NodeManagement integration tests run against an additional open62541 server (UA-.NETStandard does not implement that service set) ? see testing docs.

This library is already used in production with real industrial equipment in factory automation and process control environments.

</td> </tr> </table>

Quick Start

composer require php-opcua/opcua-client

use PhpOpcua\Client\ClientBuilder;
use PhpOpcua\Client\Types\NodeId;

$client = ClientBuilder::create()
    ->connect('opc.tcp://localhost:4840');

// Read server status ? string format
$status = $client->read('i=2259');
echo $status->getValue(); // 0 = Running

// NodeId objects work too
$status = $client->read(NodeId::numeric(0, 2259));

$client->disconnect();

That's it. Three lines to build, connect, and read. No config files, no service containers, no XML.

> Tip: All client methods accept NodeId strings like 'i=2259', 'ns=2;i=1001', or 'ns=2;s=MyNode' anywhere a NodeId is expected. Invalid strings throw InvalidNodeIdException.

See It in Action

Browse the address space

$refs = $client->browse('i=85'); // Objects folder

foreach ($refs as $ref) {
    echo "{$ref->displayName} ({$ref->nodeId})\n";
    //=> Server (ns=0;i=2253)
    //=> MyPLC (ns=2;i=1000)
}

Read multiple values

$results = $client->readMulti()
    ->node('i=2259')->value()
    ->node('ns=2;i=1001')->displayName()
    ->node('ns=2;s=Temperature')->value()
    ->execute();

foreach ($results as $dataValue) {
    echo $dataValue->getValue() . "\n";
}

> Tip: You can also pass an array to readMulti([...]) -- the builder is just a fluent alternative.

Get server info

// All at once
$info = $client->getServerBuildInfo();
echo $info->productName;        // e.g. "UA-.NETStandard"
echo $info->manufacturerName;   // e.g. "OPC Foundation"
echo $info->softwareVersion;    // e.g. "1.5.374.126"

// Or individual fields
$client->getServerProductName();        // ?string
$client->getServerSoftwareVersion();    // ?string
$client->getServerBuildDate();          // ?DateTimeImmutable

Resolve a path and read a value

$nodeId = $client->resolveNodeId('/Objects/MyPLC/Temperature');
$value = $client->read($nodeId);

echo $value->getValue();        // 23.5
echo $value->statusCode;        // 0 (Good)
echo $value->sourceTimestamp;    // DateTimeImmutable

Write to a PLC

use PhpOpcua\Client\Types\BuiltinType;

// Auto-detect type (reads the node first, caches the type)
$client->write('ns=2;i=1001', 42);

// Explicit type (validated against the node when auto-detect is on)
$client->write('ns=2;i=1001', 42, BuiltinType::Int32);

Call a method on the server

use PhpOpcua\Client\Types\Variant;

$result = $client->call(
    'i=2253',   // Server object
    'i=11492',  // GetMonitoredItems
    [new Variant(BuiltinType::UInt32, 1)],
);

echo $result->statusCode;                   // 0
echo $result->outputArguments[0]->value;    // [1001, 1002, ...]

Subscribe to data changes

$sub = $client->createSubscription(publishingInterval: 500.0);

$client->createMonitoredItems($sub->subscriptionId, [
    ['nodeId' => NodeId::numeric(2, 1001)],
]);

$response = $client->publish();
foreach ($response->notifications as $notif) {
    echo $notif['dataValue']->getValue() . "\n";
}

Read historical data

$values = $client->historyReadRaw(
    'ns=2;i=1001',
    startTime: new DateTimeImmutable('-1 hour'),
    endTime: new DateTimeImmutable(),
);

foreach ($values as $dv) {
    echo "[{$dv->sourceTimestamp->format('H:i:s')}] {$dv->getValue()}\n";
}

Manage nodes at runtime

use PhpOpcua\Client\Types\NodeClass;
use PhpOpcua\Client\Types\QualifiedName;
use PhpOpcua\Client\Types\StatusCode;

// Add a variable node
$results = $client->addNodes([
    [
        'parentNodeId'       => 'i=85',                              // Objects folder
        'referenceTypeId'    => 'i=35',                              // Organizes
        'requestedNewNodeId' => 'ns=2;s=MyVariable',
        'browseName'         => new QualifiedName(2, 'MyVariable'),
        'nodeClass'          => NodeClass::Variable,
        'typeDefinition'     => 'i=63',                              // BaseDataVariableType
    ],
]);

echo StatusCode::getName($results[0]->statusCode); // Good
echo $results[0]->addedNodeId;                     // ns=2;s=MyVariable

// Clean up when done
$client->deleteNodes([['nodeId' => 'ns=2;s=MyVariable']]);

Supports all 8 node classes. See Node Management documentation for adding references, class-specific attributes, and error handling.

Connect with full security

use PhpOpcua\Client\ClientBuilder;
use PhpOpcua\Client\Security\SecurityPolicy;
use PhpOpcua\Client\Security\SecurityMode;

$client = ClientBuilder::create()
    ->setSecurityPolicy(SecurityPolicy::Basic256Sha256)
    ->setSecurityMode(SecurityMode::SignAndEncrypt)
    ->setClientCertificate('/certs/client.pem', '/certs/client.key', '/certs/ca.pem')
    ->setUserCredentials('operator', 'secret')
    ->connect('opc.tcp://192.168.1.100:4840');

> Tip: Skip setClientCertificate() and a self-signed cert gets auto-generated in memory ? perfect for quick tests or servers with auto-accept.

Decode custom structures with codecs

use PhpOpcua\Client\ClientBuilder;
use PhpOpcua\Client\Repository\ExtensionObjectRepository;

$repo = new ExtensionObjectRepository();
$repo->register(NodeId::numeric(2, 5001), MyPointCodec::class);

$client = ClientBuilder::create($repo)
    ->connect('opc.tcp://localhost:4840');

$point = $client->read($pointNodeId)->getValue();
// ['x' => 1.5, 'y' => 2.5, 'z' => 3.5]

Each client gets its own isolated codec registry ? no global state, no cross-contamination.

Test without a real server

use PhpOpcua\Client\Testing\MockClient;
use PhpOpcua\Client\Types\DataValue;

$client = MockClient::create();

// Register a handler for read operations
$client->onRead(function (NodeId $nodeId) {
    return DataValue::ofDouble(23.5);
});

// Use the same API as a real client
$value = $client->read('ns=2;s=Temperature');
echo $value->getValue(); // 23.5

// Verify what was called
echo $client->callCount('read'); // 1

MockClient implements OpcUaClientInterface with no TCP connection. Register handlers with onRead(), onWrite(), onBrowse(), onCall(), and onResolveNodeId(). Track calls with getCalls(), getCallsFor($method), callCount($method), and resetCalls(). Works with fluent builders (readMulti(), writeMulti(), etc.).

Add structured logging

use PhpOpcua\Client\ClientBuilder;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$logger = new Logger('opcua');
$logger->pushHandler(new StreamHandler('php://stderr', Logger::DEBUG));

$client = ClientBuilder::create()
    ->setLogger($logger)
    ->connect('opc.tcp://localhost:4840');
// Logs: handshake, secure channel, session creation, reads, retries, errors...

Any PSR-3 logger works ? Monolog, Laravel's logger, or your own. Without one, logging is silently disabled (NullLogger).

React to events (PSR-14)

use PhpOpcua\Client\ClientBuilder;
use PhpOpcua\Client\Event\DataChangeReceived;
use PhpOpcua\Client\Event\AlarmActivated;

// Set any PSR-14 event dispatcher on the builder
$client = ClientBuilder::create()
    ->setEventDispatcher($yourDispatcher)
    ->connect('opc.tcp://localhost:4840');

// In your listener:
class HandleDataChange {
    public function __invoke(DataChangeReceived $event): void {
        echo "Node changed on subscription {$event->subscriptionId}: "
            . $event->dataValue->getValue() . "\n";
    }
}

47 granular events covering connection, session, subscription, data change, alarms, read/write, browse, cache, and retry. Zero overhead with the default NullEventDispatcher. See Events documentation for the full list.

Monitor alarms in real time

use PhpOpcua\Client\Event\AlarmActivated;
use PhpOpcua\Client\Event\AlarmSeverityChanged;

// Listen for alarm activation
class AlarmHandler {
    public function handleActivated(AlarmActivated $event): void {
        Log::critical("Alarm active: {$event->sourceName} (severity: {$event->severity})");
    }

    public function handleSeverity(AlarmSeverityChanged $event): void {
        if ($event->severity >= 800) {
            Notification::send($operators, new HighSeverityAlarm($event));
        }
    }
}

Explore from the terminal

composer require php-opcua/opcua-cli

# Browse the address space
opcua-cli browse opc.tcp://192.168.1.10:4840 /Objects

# Read a value
opcua-cli read opc.tcp://192.168.1.10:4840 "ns=2;i=1001"

# Watch a value in real time
opcua-cli watch opc.tcp://192.168.1.10:4840 "ns=2;i=1001"

# Discover endpoints
opcua-cli endpoints opc.tcp://192.168.1.10:4840

Full security support, JSON output, debug logging, NodeSet2.xml code generation, and more. See php-opcua/opcua-cli for full documentation.

Trust server certificates

use PhpOpcua\Client\ClientBuilder;
use PhpOpcua\Client\TrustStore\FileTrustStore;
use PhpOpcua\Client\TrustStore\TrustPolicy;

$client = ClientBuilder::create()
    ->setTrustStore(new FileTrustStore())           // ~/.opcua/trusted/
    ->setTrustPolicy(TrustPolicy::Fingerprint)      // or FingerprintAndExpiry, Full
    ->connect('opc.tcp://192.168.1.100:4840');       // throws UntrustedCertificateException if not trusted

Trust on first use (TOFU):

$builder = ClientBuilder::create()
    ->setTrustStore(new FileTrustStore())
    ->autoAccept(true);                    // accept new certificates
    // ->autoAccept(true, force: true);    // also accept changed certificates
$client = $builder->connect('opc.tcp://192.168.1.100:4840');

Disable trust validation:

$client = ClientBuilder::create()
    ->setTrustPolicy(null)                // no trust policy
    ->connect('opc.tcp://192.168.1.100:4840');

Or manage from the CLI with php-opcua/opcua-cli:

opcua-cli trust opc.tcp://server:4840          # download and trust
opcua-cli trust:list                            # list trusted certs
opcua-cli trust:remove AB:CD:12:34:...          # remove a cert

Auto-discover custom types

$client = ClientBuilder::create()
    ->connect('opc.tcp://localhost:4840');
$client->discoverDataTypes();

$point = $client->read($pointNodeId)->getValue();
// ['x' => 1.5, 'y' => 2.5, 'z' => 3.5] ? no codec needed

Extend the client with custom modules

use PhpOpcua\Client\ClientBuilder;
use PhpOpcua\Client\Module\ReadWrite\ReadWriteModule;

// Add a custom module
$client = ClientBuilder::create()
    ->addModule(new MyQueryServiceModule())
    ->connect('opc.tcp://localhost:4840');

$client->queryFirst(...); // custom method from your module

// Replace a built-in module
$client = ClientBuilder::create()
    ->replaceModule(ReadWriteModule::class, new MyCustomReadWriteModule())
    ->connect('opc.tcp://localhost:4840');

$client->read(...); // uses your custom implementation

// Introspection
$client->hasMethod('read');                 // true
$client->hasModule(ReadWriteModule::class); // true

The client ships with 8 built-in modules (ReadWrite, Browse, Subscription, History, NodeManagement, TranslateBrowsePath, ServerInfo, TypeDiscovery). Add your own or swap built-ins with addModule() and replaceModule(). See Architecture for details.

Use pre-built OPC UA companion types

Instead of writing codecs by hand or relying on runtime discovery, install opcua-client-nodeset to get pre-generated PHP types for 51 OPC Foundation companion specifications ? DI, Robotics, Machinery, MachineTool, ISA-95, CNC, MTConnect, and many more:

composer require php-opcua/opcua-client-nodeset

use PhpOpcua\Client\ClientBuilder;
use PhpOpcua\Nodeset\Robotics\RoboticsRegistrar;
use PhpOpcua\Nodeset\Robotics\RoboticsNodeIds;
use PhpOpcua\Nodeset\Robotics\Enums\OperationalModeEnumeration;

$client = ClientBuilder::create()
    ->loadGeneratedTypes(new RoboticsRegistrar())  // loads DI + IA dependencies automatically
    ->connect('opc.tcp://192.168.1.100:4840');

// Enum values are auto-cast to PHP BackedEnum
$mode = $client->read(RoboticsNodeIds::OperationalMode)->getValue();
// OperationalModeEnumeration::MANUAL_REDUCED_SPEED (not int 1)

// Structured types return typed DTOs with property access
$data = $client->read(RoboticsNodeIds::SomeStructuredNode)->getValue();
$data->Manufacturer;   // string ? IDE autocomplete works
$data->Status;         // OperatingStateEnum ? not a raw int

Each Registrar automatically loads its NodeSet dependencies. Use only: true to skip dependency loading if you manage them yourself.

> Tip: You can also generate types from your own custom NodeSet2.xml files using opcua-cli generate:nodeset.

Why This Library?

  • Zero runtime dependencies ? only `ext-openssl`. Optional PSR-3 logging, PSR-16 caching, and PSR-14 events via any compatible implementation.
  • PHP 8.2+ ? runs on any modern PHP.
  • Native binary protocol ? speaks OPC UA directly over TCP. No HTTP gateway, no REST bridge, no sidecar.
  • Full security stack ? 10 policies: 6 RSA up to Aes256Sha256RsaPss + 4 ECC (NIST and Brainpool), 3 auth modes, auto-generated certs, persistent certificate trust store with TOFU.
  • Industrial-ready ? server certificate trust management, alarm event deduction, subscription recovery, auto-retry ? built for certified industrial deployments.
  • Batteries included ? browse, read, write, call, subscriptions, events, history, path resolution, batching, retry, CLI tool.
  • Cross-platform ? tested on Linux, macOS, and Windows via CI. No FFI, no COM. Uses `DIRECTORY_SEPARATOR` and platform-aware defaults throughout.
  • Thoroughly tested ? 1300+ tests (1040+ unit, 250+ integration), 99%+ unit test code coverage across PHP 8.2, 8.3, 8.4, and 8.5 on all three platforms.
  • Typed everywhere ? all service responses return `public readonly` DTOs, not arrays.
  • Session persistence ? keep OPC UA connections alive across PHP requests via opcua-session-manager.
  • Laravel-ready ? drop-in via opcua-laravel-client.

Features

| Feature | What it does | |---|---| | Browse | Navigate the address space ? recursive, automatic continuation, tree building | | Path Resolution | Resolve /Objects/MyPLC/Temperature to a NodeId in one call | | Read / Write | Single and multi operations, all OPC UA data types, automatic type detection with caching | | Server BuildInfo | getServerBuildInfo() returns product name, manufacturer, version, build number, and build date in one call | | Node Management | Add/delete nodes and references at runtime ? all 8 node classes, automatic attribute encoding | | Method Call | Invoke server methods with typed arguments and results | | Subscriptions | Data change and event monitoring with publish/acknowledge, modify monitored items, conditional triggering | | Transfer & Recovery | Transfer subscriptions across sessions and republish unacknowledged notifications | | History Read | Raw, processed (aggregated), and at-time historical queries | | Endpoint Discovery | Discover available endpoints and security policies | | Security | 10 policies: 6 RSA (None through Aes256Sha256RsaPss) + 4 ECC (NIST P-256/P-384, Brainpool P-256/P-384) | | Authentication | Anonymous, Username/Password, X.509 Certificate | | Auto-Retry | Automatic reconnect on connection failures | | Fluent Builder API | Chain readMulti(), writeMulti(), createMonitoredItems(), and translateBrowsePaths() calls with a fluent builder | | Auto-Batching | Transparent batching for readMulti/writeMulti | | ExtensionObject Codecs | Pluggable per-client codec system for custom structures | | Auto-Discovery | discoverDataTypes() auto-detects custom structures without manual codecs | | Modular Architecture | 8 built-in service modules (ReadWrite, Browse, Subscription, History, NodeManagement, TranslateBrowsePath, ServerInfo, TypeDiscovery). Add custom modules with addModule(), swap built-ins with replaceModule() | | Wire Serialization | Every core / module DTO implements WireSerializable for safe JSON-based IPC (opcua-session-manager + future transports). Registry-gated __t discriminators enforce an explicit type allowlist at decode time | | Client Introspection | hasMethod(), hasModule(), getRegisteredMethods(), getLoadedModules() surface the live method/module set for runtime dispatch decisions (used by ManagedClient::__call() for transparent third-party module access) | | MockClient | In-memory test double ? register handlers, assert calls, no TCP connection needed | | Logging | Optional structured logging via any PSR-3 logger ? connect, retry, errors, protocol details | | Cache | Browse, resolve, and metadata read results cached (InMemoryCache, 300s TTL). Plug in any PSR-16 driver (FileCache, Laravel, Redis). Metadata cache opt-in via setReadMetadataCache(true) | | Events | 47 granular PSR-14 events ? connection, session, subscription, data change, alarms, read/write, browse, cache, retry. Zero overhead when unused | | Trust Store | Persistent server certificate validation ? file-based trust store, 3 policies (fingerprint/expiry/full CA chain), TOFU auto-accept, CLI management | | CLI Tool | opcua-cli ? browse, read, write, watch, discover endpoints, manage trusted certificates, and generate code from NodeSet2.xml (separate package) |

Documentation

| # | Document | Covers | |---|----------|--------| | 01 | Introduction | Overview, requirements, architecture, quick start | | 02 | Connection & Configuration | Connecting, security, authentication, timeout, retry | | 03 | Browsing | Address space navigation, recursive browse, path resolution | | 04 | Reading & Writing | Read/write, multi ops, batching, data types | | 05 | Method Call | Invoking methods, arguments, results | | 06 | Subscriptions | Subscriptions, monitored items, events, publish loop | | 07 | History Read | Raw, processed, and at-time historical queries | | 08 | Types Reference | All types, enums, DTOs, and constants | | 09 | Error Handling | Exception hierarchy, error patterns | | 10 | Security | Security policies, certificates, crypto internals | | 11 | Architecture | Project structure, layers, protocol flow | | 12 | ExtensionObject Codecs | Custom type decoding, codec interface, repository API | | 13 | Testing | MockClient, DataValue factories, call tracking, test examples | | 14 | Events | PSR-14 event system, 47 events, alarm deduction, Laravel integration, examples | | 15 | Trust Store | Server certificate trust management, policies, TOFU | | 16 | Node Management | Add/delete nodes and references at runtime | | 17 | Module System | Kernel architecture, built-in modules, custom modules, extending the client |

Testing

1300+ tests with 99%+ code coverage. Unit tests cover encoding, crypto, protocol services, and error paths. Integration tests run against uanetstandard-test-suite ? a Docker-based OPC UA environment built on the OPC Foundation's UA-.NETStandard reference implementation, with multiple security configs, custom types, and real-world scenarios.

./vendor/bin/pest                                          # everything
./vendor/bin/pest tests/Unit/                              # unit only
./vendor/bin/pest tests/Integration/ --group=integration   # integration only

CI runs on PHP 8.2, 8.3, 8.4, and 8.5 via GitHub Actions.

Alternatives & Comparison

PHP

| Library | PHP | Dependencies | Security Policies | History Read | Auto-Batching | Notes | |---------|-----|-------------|-------------------|-------------|---------------|-------| | php-opcua/opcua-client | 8.2+ | ext-openssl only | 10 (6 RSA + 4 ECC) | Yes | Yes | Zero external deps, full binary protocol | | techdock/opcua | 8.4+ | phpseclib, symfony/cache, monolog, ... | Basic256Sha256 | No | Yes | Heavier dependency tree, still v0.2 | | techdock/opcua-webapi-client | 8.1+ | Guzzle | N/A (HTTP) | No | No | Needs an OPC UA WebAPI gateway, not binary protocol | | QuickOPC | COM | Windows + COM | Yes | Yes | N/A | Commercial, Windows-only, not a real PHP package |

Ecosystem

| Package | Description | |---------|-------------| | opcua-client | Pure PHP OPC UA client (this package) | | opcua-cli | CLI tool ? browse, read, write, watch, discover endpoints, manage certificates, generate code from NodeSet2.xml | | opcua-session-manager | Daemon-based session persistence across PHP requests. Keeps OPC UA connections alive between short-lived PHP processes via a ReactPHP daemon and Unix sockets. Separate package by design ? see ROADMAP.md for rationale. | | opcua-client-nodeset | Pre-generated PHP types from 51 OPC Foundation companion specifications (DI, Robotics, Machinery, MachineTool, ISA-95, CNC, MTConnect, and more). 807 PHP files ? NodeId constants, enums, typed DTOs, codecs, registrars with automatic dependency resolution. Just composer require and loadGeneratedTypes(). | | laravel-opcua | Laravel integration ? service provider, facade, config | | uanetstandard-test-suite | Docker-based OPC UA test servers (UA-.NETStandard) for integration testing |

Community

Have questions, ideas, or want to share what you've built? Join the GitHub Discussions.

Connected a PLC, SCADA system, or OPC UA server? We're building a community-driven list of tested hardware and software. Share your experience in Tested Hardware & Software ? even a one-liner like "Siemens S7-1500, works fine" helps other users know what to expect.

AI-Ready

This package ships with machine-readable documentation designed for AI coding assistants (Claude, Cursor, Copilot, ChatGPT, and others). Feed these files to your AI so it knows how to use the library correctly:

| File | Purpose | |------|---------| | llms.txt | Compact project summary ? architecture, key classes, API signatures, and configuration. Optimized for LLM context windows with minimal token usage. | | llms-full.txt | Comprehensive technical reference ? every class, method, DTO, encoding detail, security layer, and protocol service. For deep dives and complex questions. | | llms-skills.md | Task-oriented recipes ? step-by-step instructions for common tasks (connect, read, write, browse, subscribe, security, testing, Laravel integration). Written so an AI can generate correct, production-ready code from a user's intent. |

How to use: copy the files you need into your project's AI configuration directory. The files are located in vendor/php-opcua/opcua-client/ after composer install.

  • Claude Code: reference per-session with `--add-file vendor/php-opcua/opcua-client/llms-skills.md`
  • Cursor: copy into your project's rules directory ? `cp vendor/php-opcua/opcua-client/llms-skills.md .cursor/rules/opcua-client.md`
  • GitHub Copilot: copy or append the content into your project's `.github/copilot-instructions.md` file (create the file and directory if they don't exist). Copilot reads this file automatically for project-specific context
  • Other tools: paste the content into your system prompt, project knowledge base, or context configuration

Roadmap

See ROADMAP.md for what's coming next.

Contributing

Contributions welcome ? see CONTRIBUTING.md.

Changelog

See CHANGELOG.md.

License

MIT


  Files folder image Files (343)  
File Role Description
Files folder image.github (2 files, 2 directories)
Files folder imageassets (4 files)
Files folder imagedoc (17 files)
Files folder imagesrc (4 files, 17 directories)
Files folder imagetests (2 files, 2 directories)
Accessible without login Plain text file .editorconfig Data Auxiliary data
Accessible without login Plain text file .php-cs-fixer.php Example Example script
Accessible without login Plain text file CHANGELOG.md Data Auxiliary data
Accessible without login Plain text file CODE_OF_CONDUCT.md Data Auxiliary data
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file CONTRIBUTING.md Data Auxiliary data
Accessible without login Plain text file LICENSE Lic. License text
Accessible without login Plain text file llms-full.txt Doc. Documentation
Accessible without login Plain text file llms-skills.md Data Auxiliary data
Accessible without login Plain text file llms.txt Doc. Documentation
Accessible without login Plain text file phpunit.xml Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation
Accessible without login Plain text file ROADMAP.md Data Auxiliary data
Accessible without login Plain text file SECURITY.md Data Auxiliary data

  Files folder image Files (343)  /  .github  
File Role Description
Files folder imageISSUE_TEMPLATE (3 files)
Files folder imageworkflows (1 file)
  Accessible without login Plain text file copilot-instructions.md Data Auxiliary data
  Accessible without login Plain text file pull_request_template.md Data Auxiliary data

  Files folder image Files (343)  /  .github  /  ISSUE_TEMPLATE  
File Role Description
  Accessible without login Plain text file bug_report.md Data Auxiliary data
  Accessible without login Plain text file feature_request.md Data Auxiliary data
  Accessible without login Plain text file question.md Data Auxiliary data

  Files folder image Files (343)  /  .github  /  workflows  
File Role Description
  Accessible without login Plain text file tests.yml Data Auxiliary data

  Files folder image Files (343)  /  assets  
File Role Description
  Accessible without login Plain text file icon-dark.svg Data Auxiliary data
  Accessible without login Plain text file icon-light.svg Data Auxiliary data
  Accessible without login Plain text file logo-dark.svg Data Auxiliary data
  Accessible without login Plain text file logo-light.svg Data Auxiliary data

  Files folder image Files (343)  /  doc  
File Role Description
  Accessible without login Plain text file 01-introduction.md Data Auxiliary data
  Accessible without login Plain text file 02-connection.md Data Auxiliary data
  Accessible without login Plain text file 03-browsing.md Data Auxiliary data
  Accessible without login Plain text file 04-reading-writing.md Data Auxiliary data
  Accessible without login Plain text file 05-method-call.md Data Auxiliary data
  Accessible without login Plain text file 06-subscriptions.md Data Auxiliary data
  Accessible without login Plain text file 07-history-read.md Data Auxiliary data
  Accessible without login Plain text file 08-types.md Data Auxiliary data
  Accessible without login Plain text file 09-error-handling.md Data Auxiliary data
  Accessible without login Plain text file 10-security.md Data Auxiliary data
  Accessible without login Plain text file 11-architecture.md Data Auxiliary data
  Accessible without login Plain text file 12-extension-object-codecs.md Data Auxiliary data
  Accessible without login Plain text file 13-testing.md Data Auxiliary data
  Accessible without login Plain text file 14-events.md Data Auxiliary data
  Accessible without login Plain text file 15-trust-store.md Data Auxiliary data
  Accessible without login Plain text file 16-node-management.md Data Auxiliary data
  Plain text file 17-module-system.md Class Class source

  Files folder image Files (343)  /  src  
File Role Description
Files folder imageBuilder (4 files)
Files folder imageCache (4 files)
Files folder imageClient (8 files)
Files folder imageClientBuilder (8 files)
Files folder imageEncoding (6 files)
Files folder imageEvent (48 files)
Files folder imageException (21 files)
Files folder imageKernel (1 file)
Files folder imageModule (2 files, 8 directories)
Files folder imageProtocol (9 files)
Files folder imageRepository (2 files)
Files folder imageSecurity (6 files)
Files folder imageTesting (1 file)
Files folder imageTransport (1 file)
Files folder imageTrustStore (4 files)
Files folder imageTypes (18 files)
Files folder imageWire (3 files)
  Plain text file Client.php Class Class source
  Plain text file ClientBuilder.php Class Class source
  Plain text file ClientBuilderInterface.php Class Class source
  Plain text file OpcUaClientInterface.php Class Class source

  Files folder image Files (343)  /  src  /  Builder  
File Role Description
  Plain text file BrowsePathsBuilder.php Class Class source
  Plain text file MonitoredItemsBuilder.php Class Class source
  Plain text file ReadMultiBuilder.php Class Class source
  Plain text file WriteMultiBuilder.php Class Class source

  Files folder image Files (343)  /  src  /  Cache  
File Role Description
  Plain text file CacheCodecInterface.php Class Class source
  Plain text file FileCache.php Class Class source
  Plain text file InMemoryCache.php Class Class source
  Plain text file WireCacheCodec.php Class Class source

  Files folder image Files (343)  /  src  /  Client  
File Role Description
  Plain text file ManagesBatchingRuntimeTrait.php Class Class source
  Plain text file ManagesCacheRuntimeTrait.php Class Class source
  Plain text file ManagesConnectionTrait.php Class Class source
  Plain text file ManagesEventDispatchTrait.php Class Class source
  Plain text file ManagesHandshakeTrait.php Class Class source
  Plain text file ManagesSecureChannelTrait.php Class Class source
  Plain text file ManagesSessionTrait.php Class Class source
  Plain text file ManagesTrustStoreRuntimeTrait.php Class Class source

  Files folder image Files (343)  /  src  /  ClientBuilder  
File Role Description
  Plain text file ManagesAutoRetryTrait.php Class Class source
  Plain text file ManagesBatchingTrait.php Class Class source
  Plain text file ManagesBrowseDepthTrait.php Class Class source
  Plain text file ManagesCacheTrait.php Class Class source
  Plain text file ManagesEventDispatcherTrait.php Class Class source
  Plain text file ManagesReadWriteConfigTrait.php Class Class source
  Plain text file ManagesTimeoutTrait.php Class Class source
  Plain text file ManagesTrustStoreTrait.php Class Class source

  Files folder image Files (343)  /  src  /  Encoding  
File Role Description
  Plain text file BinaryDecoder.php Class Class source
  Plain text file BinaryEncoder.php Class Class source
  Plain text file DataTypeMapping.php Class Class source
  Plain text file DynamicCodec.php Class Class source
  Plain text file ExtensionObjectCodec.php Class Class source
  Plain text file StructureDefinitionParser.php Class Class source

  Files folder image Files (343)  /  src  /  Event  
File Role Description
  Plain text file AlarmAcknowledged.php Class Class source
  Plain text file AlarmActivated.php Class Class source
  Plain text file AlarmConfirmed.php Class Class source
  Plain text file AlarmDeactivated.php Class Class source
  Plain text file AlarmEventReceived.php Class Class source
  Plain text file AlarmSeverityChanged.php Class Class source
  Plain text file AlarmShelved.php Class Class source
  Plain text file CacheHit.php Class Class source
  Plain text file CacheMiss.php Class Class source
  Plain text file ClientConnected.php Class Class source
  Plain text file ClientConnecting.php Class Class source
  Plain text file ClientDisconnected.php Class Class source
  Plain text file ClientDisconnecting.php Class Class source
  Plain text file ClientReconnecting.php Class Class source
  Plain text file ConnectionFailed.php Class Class source
  Plain text file DataChangeReceived.php Class Class source
  Plain text file DataTypesDiscovered.php Class Class source
  Plain text file EventNotificationReceived.php Class Class source
  Plain text file LimitAlarmExceeded.php Class Class source
  Plain text file MonitoredItemCreated.php Class Class source
  Plain text file MonitoredItemDeleted.php Class Class source
  Plain text file MonitoredItemModified.php Class Class source
  Plain text file NodeBrowsed.php Class Class source
  Plain text file NodeValueRead.php Class Class source
  Plain text file NodeValueWriteFailed.php Class Class source
  Plain text file NodeValueWritten.php Class Class source
  Plain text file NullEventDispatcher.php Class Class source
  Plain text file OffNormalAlarmTriggered.php Class Class source
  Plain text file PublishResponseReceived.php Class Class source
  Plain text file RetryAttempt.php Class Class source
  Plain text file RetryExhausted.php Class Class source
  Plain text file SecureChannelClosed.php Class Class source
  Plain text file SecureChannelOpened.php Class Class source
  Plain text file ServerCertificateAutoAccepted.php Class Class source
  Plain text file ServerCertificateManuallyTrusted.php Class Class source
  Plain text file ServerCertificateRejected.php Class Class source
  Plain text file ServerCertificateRemoved.php Class Class source
  Plain text file ServerCertificateTrusted.php Class Class source
  Plain text file SessionActivated.php Class Class source
  Plain text file SessionClosed.php Class Class source
  Plain text file SessionCreated.php Class Class source
  Plain text file SubscriptionCreated.php Class Class source
  Plain text file SubscriptionDeleted.php Class Class source
  Plain text file SubscriptionKeepAlive.php Class Class source
  Plain text file SubscriptionTransferred.php Class Class source
  Plain text file TriggeringConfigured.php Class Class source
  Plain text file WriteTypeDetected.php Class Class source
  Plain text file WriteTypeDetecting.php Class Class source

  Files folder image Files (343)  /  src  /  Exception  
File Role Description
  Plain text file CacheCorruptedException.php Class Class source
  Plain text file CertificateParseException.php Class Class source
  Plain text file ConfigurationException.php Class Class source
  Plain text file ConnectionException.php Class Class source
  Plain text file EncodingException.php Class Class source
  Plain text file HandshakeException.php Class Class source
  Plain text file InvalidNodeIdException.php Class Class source
  Plain text file MessageTypeException.php Class Class source
  Plain text file MissingModuleDependencyException.php Class Class source
  Plain text file ModuleConflictException.php Class Class source
  Plain text file OpcUaException.php Class Class source
  Plain text file OpenSslException.php Class Class source
  Plain text file ProtocolException.php Class Class source
  Plain text file SecurityException.php Class Class source
  Plain text file ServiceException.php Class Class source
  Plain text file ServiceUnsupportedException.php Class Class source
  Plain text file SignatureVerificationException.php Class Class source
  Plain text file UnsupportedCurveException.php Class Class source
  Plain text file UntrustedCertificateException.php Class Class source
  Plain text file WriteTypeDetectionException.php Class Class source
  Plain text file WriteTypeMismatchException.php Class Class source

  Files folder image Files (343)  /  src  /  Kernel  
File Role Description
  Plain text file ClientKernelInterface.php Class Class source

  Files folder image Files (343)  /  src  /  Module  
File Role Description
Files folder imageBrowse (4 files)
Files folder imageHistory (2 files)
Files folder imageNodeManagement (3 files)
Files folder imageReadWrite (5 files)
Files folder imageServerInfo (2 files)
Files folder imageSubscription (10 files)
Files folder imageTranslateBrowsePath (4 files)
Files folder imageTypeDiscovery (1 file)
  Plain text file ModuleRegistry.php Class Class source
  Plain text file ServiceModule.php Class Class source

  Files folder image Files (343)  /  src  /  Module  /  Browse  
File Role Description
  Plain text file BrowseModule.php Class Class source
  Plain text file BrowseResultSet.php Class Class source
  Plain text file BrowseService.php Class Class source
  Plain text file GetEndpointsService.php Class Class source

  Files folder image Files (343)  /  src  /  Module  /  History  
File Role Description
  Plain text file HistoryModule.php Class Class source
  Plain text file HistoryReadService.php Class Class source

  Files folder image Files (343)  /  src  /  Module  /  NodeManagement  
File Role Description
  Plain text file AddNodesResult.php Class Class source
  Plain text file NodeManagementModule.php Class Class source
  Plain text file NodeManagementService.php Class Class source

  Files folder image Files (343)  /  src  /  Module  /  ReadWrite  
File Role Description
  Plain text file CallResult.php Class Class source
  Plain text file CallService.php Class Class source
  Plain text file ReadService.php Class Class source
  Plain text file ReadWriteModule.php Class Class source
  Plain text file WriteService.php Class Class source

  Files folder image Files (343)  /  src  /  Module  /  ServerInfo  
File Role Description
  Plain text file BuildInfo.php Class Class source
  Plain text file ServerInfoModule.php Class Class source

  Files folder image Files (343)  /  src  /  Module  /  Subscription  
File Role Description
  Plain text file MonitoredItemModifyResult.php Class Class source
  Plain text file MonitoredItemResult.php Class Class source
  Plain text file MonitoredItemService.php Class Class source
  Plain text file PublishResult.php Class Class source
  Plain text file PublishService.php Class Class source
  Plain text file SetTriggeringResult.php Class Class source
  Plain text file SubscriptionModule.php Class Class source
  Plain text file SubscriptionResult.php Class Class source
  Plain text file SubscriptionService.php Class Class source
  Plain text file TransferResult.php Class Class source

  Files folder image Files (343)  /  src  /  Module  /  TranslateBrowsePath  
File Role Description
  Plain text file BrowsePathResult.php Class Class source
  Plain text file BrowsePathTarget.php Class Class source
  Plain text file TranslateBrowsePathModule.php Class Class source
  Plain text file TranslateBrowsePathService.php Class Class source

  Files folder image Files (343)  /  src  /  Module  /  TypeDiscovery  
File Role Description
  Plain text file TypeDiscoveryModule.php Class Class source

  Files folder image Files (343)  /  src  /  Protocol  
File Role Description
  Plain text file AbstractProtocolService.php Class Class source
  Plain text file AcknowledgeMessage.php Class Class source
  Plain text file HelloMessage.php Class Class source
  Plain text file MessageHeader.php Class Class source
  Plain text file SecureChannelRequest.php Class Class source
  Plain text file SecureChannelResponse.php Class Class source
  Plain text file ServiceFault.php Class Class source
  Plain text file ServiceTypeId.php Class Class source
  Plain text file SessionService.php Class Class source

  Files folder image Files (343)  /  src  /  Repository  
File Role Description
  Plain text file ExtensionObjectRepository.php Class Class source
  Plain text file GeneratedTypeRegistrar.php Class Class source

  Files folder image Files (343)  /  src  /  Security  
File Role Description
  Plain text file CertificateManager.php Class Class source
  Plain text file EnsuresOpenSslSuccess.php Class Class source
  Plain text file MessageSecurity.php Class Class source
  Plain text file SecureChannel.php Class Class source
  Accessible without login Plain text file SecurityMode.php Aux. Configuration script
  Accessible without login Plain text file SecurityPolicy.php Example Example script

  Files folder image Files (343)  /  src  /  Testing  
File Role Description
  Plain text file MockClient.php Class Class source

  Files folder image Files (343)  /  src  /  Transport  
File Role Description
  Plain text file TcpTransport.php Class Class source

  Files folder image Files (343)  /  src  /  TrustStore  
File Role Description
  Plain text file FileTrustStore.php Class Class source
  Accessible without login Plain text file TrustPolicy.php Aux. Configuration script
  Plain text file TrustResult.php Class Class source
  Plain text file TrustStoreInterface.php Class Class source

  Files folder image Files (343)  /  src  /  Types  
File Role Description
  Plain text file AttributeId.php Class Class source
  Accessible without login Plain text file BrowseDirection.php Aux. Configuration script
  Plain text file BrowseNode.php Class Class source
  Accessible without login Plain text file BuiltinType.php Aux. Configuration script
  Accessible without login Plain text file ConnectionState.php Aux. Configuration script
  Plain text file DataValue.php Class Class source
  Plain text file EndpointDescription.php Class Class source
  Plain text file ExtensionObject.php Class Class source
  Plain text file LocalizedText.php Class Class source
  Accessible without login Plain text file NodeClass.php Aux. Configuration script
  Plain text file NodeId.php Class Class source
  Plain text file QualifiedName.php Class Class source
  Plain text file ReferenceDescription.php Class Class source
  Plain text file StatusCode.php Class Class source
  Plain text file StructureDefinition.php Class Class source
  Plain text file StructureField.php Class Class source
  Plain text file UserTokenPolicy.php Class Class source
  Plain text file Variant.php Class Class source

  Files folder image Files (343)  /  src  /  Wire  
File Role Description
  Plain text file CoreWireTypes.php Class Class source
  Plain text file WireSerializable.php Class Class source
  Plain text file WireTypeRegistry.php Class Class source

  Files folder image Files (343)  /  tests  
File Role Description
Files folder imageIntegration (29 files, 1 directory)
Files folder imageUnit (11 files, 16 directories)
  Plain text file Pest.php Class Class source
  Plain text file TestCase.php Class Class source

  Files folder image Files (343)  /  tests  /  Integration  
File Role Description
Files folder imageHelpers (1 file)
  Accessible without login Plain text file AccessControlTest.php Example Example script
  Accessible without login Plain text file AlarmTest.php Example Example script
  Plain text file AutoRetryTest.php Class Class source
  Accessible without login Plain text file BatchingTest.php Example Example script
  Plain text file BrowseRecursiveTest.php Class Class source
  Accessible without login Plain text file BrowseTest.php Example Example script
  Plain text file CertificateValidationTest.php Class Class source
  Plain text file ConnectionStateTest.php Class Class source
  Plain text file ConnectionTest.php Class Class source
  Plain text file DataTypeReadTest.php Class Class source
  Accessible without login Plain text file DataTypeWriteTest.php Example Example script
  Plain text file DynamicVariableTest.php Class Class source
  Plain text file EccBrainpoolSecurityConnectionTest.php Class Class source
  Plain text file EccSecurityConnectionTest.php Class Class source
  Accessible without login Plain text file ErrorHandlingTest.php Example Example script
  Accessible without login Plain text file EventTest.php Example Example script
  Plain text file ExtensionObjectCodecTest.php Class Class source
  Accessible without login Plain text file HistoricalDataTest.php Example Example script
  Plain text file MethodCallTest.php Class Class source
  Plain text file NodeManagementTest.php Class Class source
  Plain text file SecurityConnectionTest.php Class Class source
  Accessible without login Plain text file ServerLimitsBatchingTest.php Example Example script
  Accessible without login Plain text file StructureTest.php Example Example script
  Accessible without login Plain text file SubscriptionTest.php Example Example script
  Accessible without login Plain text file TimeoutTest.php Example Example script
  Plain text file TransferRepublishTest.php Class Class source
  Plain text file TranslateBrowsePathTest.php Class Class source
  Plain text file TypeDiscoveryTest.php Class Class source
  Accessible without login Plain text file ViewTest.php Example Example script

  Files folder image Files (343)  /  tests  /  Integration  /  Helpers  
File Role Description
  Plain text file TestHelper.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  
File Role Description
Files folder imageBuilder (1 file)
Files folder imageCache (2 files)
Files folder imageClient (11 files)
Files folder imageClientBuilder (1 file)
Files folder imageEncoding (7 files)
Files folder imageEvent (1 file)
Files folder imageException (1 file)
Files folder imageHelpers (3 files)
Files folder imageModule (3 files, 8 directories)
Files folder imageProtocol (16 files)
Files folder imageSecurity (9 files)
Files folder imageTesting (1 file)
Files folder imageTransport (2 files)
Files folder imageTrustStore (2 files)
Files folder imageTypes (8 files)
Files folder imageWire (2 files)
  Plain text file ClientAutoRetryTest.php Class Class source
  Plain text file ClientBatchingTest.php Class Class source
  Plain text file ClientBrowseDepthTest.php Class Class source
  Plain text file ClientBuilderTest.php Class Class source
  Accessible without login Plain text file ClientConnectionStateTest.php Example Example script
  Plain text file ClientHandshakeErrorTest.php Class Class source
  Plain text file ClientNotConnectedTest.php Class Class source
  Plain text file ClientResolveNodeIdTest.php Class Class source
  Plain text file ClientTimeoutTest.php Class Class source
  Plain text file ClientUnwrapResponseTest.php Class Class source
  Plain text file EventDispatcherTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Builder  
File Role Description
  Plain text file BuilderTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Cache  
File Role Description
  Plain text file CacheTest.php Class Class source
  Plain text file WireCacheCodecTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Client  
File Role Description
  Plain text file ClientDisconnectCoverageTest.php Class Class source
  Plain text file ClientDiscoveryCoverageTest.php Class Class source
  Plain text file ClientEventDispatcherTest.php Class Class source
  Plain text file ClientLoggerTest.php Class Class source
  Plain text file ClientProxyTest.php Class Class source
  Accessible without login Plain text file ClientReadMetadataCacheTest.php Example Example script
  Plain text file ClientStringNodeIdTest.php Class Class source
  Plain text file ClientTraitsCoverageTest.php Class Class source
  Plain text file ClientTransferRepublishTest.php Class Class source
  Plain text file ClientTypeDiscoveryTest.php Class Class source
  Plain text file ClientWriteAutoDetectTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  ClientBuilder  
File Role Description
  Plain text file ModuleBuilderTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Encoding  
File Role Description
  Plain text file BinaryDecoderAdvancedTest.php Class Class source
  Plain text file BinaryEncoderDecoderTest.php Class Class source
  Plain text file DynamicCodecEncodeTest.php Class Class source
  Accessible without login Plain text file DynamicCodecTest.php Example Example script
  Plain text file ExtensionObjectPartialConsumeTest.php Class Class source
  Plain text file ExtensionObjectRepositoryTest.php Class Class source
  Plain text file VariantEncodingTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Event  
File Role Description
  Accessible without login Plain text file AlarmEventDeductionTest.php Example Example script

  Files folder image Files (343)  /  tests  /  Unit  /  Exception  
File Role Description
  Plain text file ExceptionHierarchyTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Helpers  
File Role Description
  Plain text file ClientTestHelpers.php Class Class source
  Plain text file InMemoryEventDispatcher.php Class Class source
  Accessible without login Plain text file SecurityTestHelpers.php Example Example script

  Files folder image Files (343)  /  tests  /  Unit  /  Module  
File Role Description
Files folder imageBrowse (1 file)
Files folder imageHistory (1 file)
Files folder imageNodeManagement (1 file)
Files folder imageReadWrite (1 file)
Files folder imageServerInfo (1 file)
Files folder imageSubscription (1 file)
Files folder imageTranslateBrowsePath (1 file)
Files folder imageTypeDiscovery (1 file)
  Plain text file CustomModuleTest.php Class Class source
  Plain text file ModuleRegistryTest.php Class Class source
  Plain text file ModuleWiringTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Module  /  Browse  
File Role Description
  Plain text file BrowseModuleTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Module  /  History  
File Role Description
  Plain text file HistoryModuleTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Module  /  NodeManagement  
File Role Description
  Plain text file NodeManagementModuleTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Module  /  ReadWrite  
File Role Description
  Plain text file ReadWriteModuleTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Module  /  ServerInfo  
File Role Description
  Plain text file ServerInfoModuleTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Module  /  Subscription  
File Role Description
  Plain text file SubscriptionModuleTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Module  /  TranslateBrowsePath  
File Role Description
  Plain text file TranslateBrowsePathModuleTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Module  /  TypeDiscovery  
File Role Description
  Plain text file TypeDiscoveryModuleTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Protocol  
File Role Description
  Accessible without login Plain text file AdditionalCoverageTest.php Example Example script
  Accessible without login Plain text file HelloAcknowledgeTest.php Example Example script
  Accessible without login Plain text file HistoryReadServiceTest.php Example Example script
  Accessible without login Plain text file MessageSerializationTest.php Example Example script
  Accessible without login Plain text file MonitoredItemServiceTest.php Example Example script
  Plain text file NodeManagementServiceEncodingTest.php Class Class source
  Accessible without login Plain text file ProtocolFullCoverageTest.php Example Example script
  Accessible without login Plain text file PublishServiceTest.php Example Example script
  Accessible without login Plain text file SecureEncodingTest.php Example Example script
  Plain text file ServiceDecodingTest.php Class Class source
  Accessible without login Plain text file ServiceDiagnosticTest.php Example Example script
  Accessible without login Plain text file ServiceEncodingTest.php Example Example script
  Plain text file ServiceFaultTest.php Class Class source
  Accessible without login Plain text file SessionServiceCoverageTest.php Example Example script
  Plain text file TransferRepublishTest.php Class Class source
  Accessible without login Plain text file TranslateBrowsePathDiagnosticTest.php Example Example script

  Files folder image Files (343)  /  tests  /  Unit  /  Security  
File Role Description
  Plain text file CertificateManagerTest.php Class Class source
  Plain text file EnsureNotFalseTest.php Class Class source
  Plain text file MessageSecurityTest.php Class Class source
  Plain text file SecureChannelFullCoverageTest.php Class Class source
  Plain text file SecureChannelSequenceNumberTest.php Class Class source
  Plain text file SecureChannelTest.php Class Class source
  Plain text file SecurityCoverageTest.php Class Class source
  Plain text file SecurityErrorPathsTest.php Class Class source
  Accessible without login Plain text file SecurityPolicyTest.php Example Example script

  Files folder image Files (343)  /  tests  /  Unit  /  Testing  
File Role Description
  Plain text file MockClientTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Transport  
File Role Description
  Plain text file TcpTransportCoverageTest.php Class Class source
  Plain text file TcpTransportTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  TrustStore  
File Role Description
  Plain text file FileTrustStoreTest.php Class Class source
  Plain text file TrustStoreTraitTest.php Class Class source

  Files folder image Files (343)  /  tests  /  Unit  /  Types  
File Role Description
  Accessible without login Plain text file AddNodesResultTest.php Example Example script
  Accessible without login Plain text file BrowseDirectionTest.php Example Example script
  Accessible without login Plain text file BrowseNodeTest.php Example Example script
  Accessible without login Plain text file BuildInfoTest.php Example Example script
  Plain text file CoreWirePayloadValidationTest.php Class Class source
  Plain text file NodeIdParseTest.php Class Class source
  Plain text file StructureWirePayloadTest.php Class Class source
  Accessible without login Plain text file TypesTest.php Example Example script

  Files folder image Files (343)  /  tests  /  Unit  /  Wire  
File Role Description
  Plain text file CoreWireTypesRoundTripTest.php Class Class source
  Plain text file WireTypeRegistryTest.php Class Class source

The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page.
Install with Composer Install with Composer
 Version Control Unique User Downloads  
 100%
Total:0
This week:0