Home

Awesome

gemini-php

PHP 8 Library for Gemini Protocol

For optimization reasons, some experimental features like Dokuwiki and GTK3/Pango was dropped from 1.0.0 release, but available in previous versions. Gemtext component re-implemented as separated library (see Extras)

Extras

Usage

composer require yggverse/gemini

Client

PHP interface for Gemini protocol queries by TLS socket connection

Request

$request = new \Yggverse\Gemini\Client\Request(
    'gemini://yggverse.cities.yesterweb.org:1965/index.gmi'
);

Resolved request (SNI)

For direct connection provide resolved IP as the second argument

$request = new \Yggverse\Gemini\Client\Request(
    'gemini://yggverse.cities.yesterweb.org:1965/index.gmi' // target URL
    '68.133.1.71' // resolved IP, skip to use system-wide resolver
);

Alternatively, use setResolvedHost method of Request object before getResponse

Request::setResolvedHost

$request->setResolvedHost(
    '68.133.1.71'
)

Request::getResolvedHost

Get resolved host back

Request::setHost

Request::getHost

Request::setPort

Request::getPort

Request::setPath

Request::getPath

Request::setQuery

Request::getQuery

Request::getResponse

Execute requested URL and return raw response

var_dump(
    $request->getResponse()
);

Request::getOptions

Request::setOptions

$request = new \Yggverse\Gemini\Client\Request(
    'gemini://yggverse.cities.yesterweb.org',
    '68.133.1.71' // make direct request to the resolved host
);

$request->setOptions(
    [
        'ssl' =>
        [
            'peer_name'        => 'yggverse.cities.yesterweb.org', // SNI
            'verify_peer'      => false,
            'verify_peer_name' => false
        ]
    ]
);

Response

This class provides additional features for the raw response operations

$response = new \Yggverse\Gemini\Client\Response(
    $request->getResponse()
);

Response::setCode

Response::getCode

Response::setMeta

Response::getMeta

Response::setBody

Response::getBody

var_dump(
    $response->getBody()
);

Integrations