Download the PHP package stefanak-michal/bolt without Composer

On this page you can find all versions of the php package stefanak-michal/bolt. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package bolt

Logo

Bolt

PHP library for communication with graph database over TCP socket with Bolt protocol specification. Bolt protocol was created by Neo4j and documentation is available at https://www.neo4j.com/. This library is aimed to be low level, support all available versions and keep up with protocol messages architecture and specifications.

ko-fi

JetBrains Logo (Main) logo.

image

:label: Version support

We are trying to keep up and this library supports Bolt <= 5.4.

https://www.neo4j.com/docs/bolt/current/bolt-compatibility/

:white_check_mark: Requirements

This library keep up with PHP supported versions what means it is at PHP^8.1.

PHP Extensions

:floppy_disk: Installation

You can use composer or download this repository from github and manually implement it.

Composer

Run the following command in your project to install the latest applicable version of the package:

composer require stefanak-michal/bolt

Packagist

Manual

  1. Download source code from github
  2. Unpack
  3. Copy content of src directory into your project

:desktop_computer: Usage

Concept of usage is based on Bolt messages. Bolt messages are mapped 1:1 as protocol methods. Available protocol methods depends on Bolt version. Communication works in pipeline and you can chain multiple Bolt messages before consuming response from the server.

Main Bolt class serves as Factory design pattern and it returns instance of protocol class by requested Bolt version. Basic usage consist of query execution and fetching response which is split in two methods. First message run is for sending queries. Second message pull is for fetching response from executed query on database. Response from database for Bolt message pull always contains n+1 rows because last entry is success message with meta informations.

:information_source: More info about available Bolt messages: https://www.neo4j.com/docs/bolt/current/bolt/message/

Available methods

Bolt class

Method / Property Description Type Parameters Return
__construct Bolt constructor public IConnection $connection Bolt
setProtocolVersions Set allowed protocol versions for connection public int/float/string ...$v Bolt
setPackStreamVersion Set PackStream version public int $version = 1 Bolt
build Create protocol instance. Method creates connection, executes handshake and do a version request. public AProtocol
$debug Print binary communication (as hex) public static bool

Protocol class

Method / Property Description Parameters
hello Connect to database array $extra
logon Perform authentification array $auth
logoff Log out authentificated user
run Execute query. Response from database are meta informations. string $statement
array $parameters = []
array $extra = []
pull Pull result from executed query array $extra = []
discard Discard result waiting for pull array $extra = []
begin Start transaction array $extra = []
commit Commit transaction
rollback Rollback transaction
reset Send message to reset connection
telemetry int $api
getVersion Get used protocol version
getResponse Get waiting response from server
getResponses Get waiting responses from server
init @see hello
pullAll @see pull
discardAll @see discard

Multiple methods accept argument called $extra. This argument can contain any of key-value by Bolt specification. This argument was extended during Neo4j development which means the content of it changed. You should keep in mind what version you are working with when using this argument. You can read more about extra parameter in Bolt documentation where you can look into your version and bolt message.

:information_source: Annotation of methods in protocol classes contains direct link to specific version and message from mentioned documentation website.

Authentification

scheme principal credentials
none
basic username password
bearer token
kerberos token

Transactions

Bolt from version 3 supports transactions and protocol contains these methods:

run executes query in auto-commit transaction if explicit transaction was not open.

Cypher query parameters

Neo4j PHP
Null null
Boolean boolean
Integer integer
Float float
Bytes Bytes class
String string
List array with consecutive numeric keys from 0
Dictionary object or array which is not considered as list
Structure Classes implementing IStructure by protocol version (docs)

List or dictionary can be also provided as instance of class implementing Bolt\packstream\IPackListGenerator or Bolt\PackStream\IPackDictionaryGenerator. This approach helps with memory management while working with big amount of data. To learn more you can check performance test or packer test.

:warning: Structures Node, Relationship, UnboundRelationship and Path cannot be used as parameter. They are available only as received data from database.

Example

Autoload

Directory src contains autoload file which accepts only Bolt library namespaces. Main Bolt namespace points to this directory. If you have installed this project with composer, you have to load vendor/autoload.php.

:chains: Connection

Bolt class constructor accepts connection argument. This argument has to be instance of class which implements IConnection interface. Library offers few options.

\Bolt\connection\Socket

This class use php extension sockets and has better memory usage. More informations here: https://www.php.net/manual/en/book.sockets.php

\Bolt\connection\StreamSocket

This class uses php stream functions. Which is a part of php and there is no extensions needed. More informations here: https://www.php.net/manual/en/ref.stream.php

StreamSocket besides of implemented methods from interface has method to configure SSL. SSL option requires php extension openssl. When you want to activate SSL you have to call method setSslContextOptions. This method accept array by php specification available here: https://www.php.net/manual/en/context.ssl.php.

\Bolt\connection\PStreamSocket

This class extends StreamSocket and adds support for persistent connections. Upon reuse of connection remaining buffer is consumed and message RESET is automatically sent. PHP is stateless therefore using this connection class requires storing meta information about active TCP connection. Default storage is \Bolt\helper\FileCache which you can change with method setCache (PSR-16 Simple Cache).

:warning: If your system reuse persistent connection and meta information about it was lost for some reason, your attemt to connect will end with ConnectionTimeoutException. Repeated attempt to connect will succeed.

:lock: SSL

Neo4j Aura

Connecting to Aura requires encryption which is provided with SSL. To connect to Aura you have to use StreamSocket connection class and enable SSL.

https://www.php.net/manual/en/context.ssl.php

Example on localhost database with self-signed certificate:

:bookmark: You can also take a look at my article on how to implement SSL for Neo4j running on localhost at Neo4j and self signed certificate.

:stopwatch: Timeout

Connection class constructor contains $timeout argument. This timeout is for established socket connection. To set up timeout for establishing socket connection itself you have to set ini directive default_socket_timeout.

_Setting up ini directive isn't part of connection class because function ini_set can be disabled on production environments for security reasons._

:vertical_traffic_light: Server state

Server state is not reported by server but it is evaluated by received response. You can access current state through property $protocol->serverState. This property is updated with every call getResponse(s).

:pushpin: More solutions

If you need simple class to cover basic functionality you can use: neo4j-bolt-wrapper

When you are in need of enterprise level take a look on: php-client

PDO implementation is available at pdo-bolt

More informations can be found at: https://neo4j.com/developer/php/

:recycle: Old versions

If you need support for end-of-life PHP versions, here is a short info list. Not all new features are implement backwards and this readme is updated to latest released version.


All versions of bolt with dependencies

PHP Build Version
Package Version
Requires php Version ^8.1
ext-mbstring Version *
psr/simple-cache Version ^3.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package stefanak-michal/bolt contains the following files

Loading the files please wait ....