Download the PHP package coyotito/ipp without Composer
On this page you can find all versions of the php package coyotito/ipp. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Package ipp
Short Description A clean, standards-compliant IPP (Internet Printing Protocol — RFC 8011/8010) client for PHP: discover network printers, read their capabilities, and submit print jobs — vendor and model agnostic.
License MIT
Informations about the package ipp
coyotito/ipp
A clean, standards-compliant IPP (Internet Printing Protocol) client for PHP. Discover network printers, read their capabilities, and submit print jobs — vendor and model agnostic, conformant to RFC 8011 (model/semantics) and RFC 8010 (encoding/transport).
No CUPS required: it speaks IPP directly over HTTP(S) to port 631.
Requirements
- PHP 8.4+
guzzlehttp/guzzle— HTTP transport (swappable; any PSR-18 client works)symfony/process— runningippfindfor discoveryclue/socket-raw— pure-PHP mDNS discovery (needsext-sockets)
Installation
Quick start
Discovery
Platform support
Discovery has two interchangeable strategies; pick what fits the host OS:
| Strategy | How | macOS | Linux | Windows |
|---|---|---|---|---|
Discovery::ippfind() |
CUPS' ippfind (wraps Bonjour/dns-sd & Avahi) |
✅ built-in | ✅ via CUPS | ❌ no CUPS by default |
Discovery::mdns() |
pure-PHP multicast DNS (clue/socket-raw) |
✅ | ✅ | ✅ |
…->manual(host) |
known IP/host, no discovery | ✅ | ✅ | ✅ |
On Windows, use Discovery::mdns() — there is no ippfind. Make sure
ext-sockets is enabled and allow the app inbound UDP in Windows Firewall, or
fall back to manual(). (In an Electron/NativePHP app you can also discover with
a Node mDNS library and feed the URI straight into Printer::connect().)
Both strategies, and the underlying command/socket runners, are interfaces — swap or fake them freely.
Transport
The default transport is Guzzle, but it only depends on the PSR-18
ClientInterface, so you can inject any client (or a Guzzle MockHandler in
tests):
Notes for real network printers:
ipp://maps to http,ipps://to https (port 631 by default).- TLS verification is off by default (self-signed certs are the norm).
- On a
426 Upgrade Requiredover cleartext, the transport retries once over TLS. Still, prefer theipps://URI for large jobs — some printers reject large cleartext uploads outright instead of asking to upgrade.
Printers don't always accept PDF
Many printers (most inkjets) do not list application/pdf in
document-format-supported — they expect raster. Decide per printer:
Rasterizing PDF → PWG Raster/URF is your application's job (e.g. Ghostscript /
mutool / CUPS filters); this package reports what the printer accepts and ships
the bytes you give it with the right document-format.
Supported operations
Get-Printer-Attributes, Print-Job, Validate-Job, Create-Job,
Send-Document, Get-Job-Attributes, Get-Jobs, Cancel-Job. The wire format
supports every IPP value syntax, including 1setOf values and nested collections
(media-col).
Conformance & testing
- Strict to RFC 8011 and RFC 8010:
version 2.0; operation-attributes first, withattributes-charset(utf-8) andattributes-natural-languageas the first two attributes; correctprinter-uri/requesting-user-name/document-format; full status-code handling. - Encoder/decoder round-trip tests, a binary response fixture, and cross-checked
against
ipptooland a real printer.
License
MIT.
All versions of ipp with dependencies
clue/socket-raw Version ^1.6
guzzlehttp/guzzle Version ^7.9
symfony/process Version ^7.0