iOS passbook library for PHP 5.4+

Overview

PHP PASSBOOK LIBRARY

Build Status Tip me with Gratipay Tip me with ChangeTip Total Downloads Latest Stable Version

What is Passbook?

Passbook is an application in iOS that allows users to store coupons, boarding passes, event tickets, store cards, 'generic' cards and other forms of mobile payment.

What does this library do?

PHP-Passbook is a library for creating and packaging passes inside your application. Distribution of generated pass files can be done by attaching the file in an e-mail or serving it from your web server.

Breaking changes

Version 3.0.0

  • Requires PHP >= 7.4

Version 2.0.0

  • Image class setRetina/isRetina methods replaced with setDensity/getDensity.

Installing

Using Composer

To add PHP-Passbook as a local, per-project dependency to your project, simply add a dependency on eo/passbook to your project's composer.json file. Here is a minimal example of a composer.json file that just defines a development-time dependency on the latest version of the library:

{
    "require": {
        "eo/passbook": "dev-master"
    }
}

API Doc

Search by class, method name, or package: http://eymengunay.github.io/php-passbook/api

Usage Example

This example will create a pass of type Ticket and will save the pkpass file in the output path specified. To use this example, you will need to do the following and set the constants accordingly:

<?php

use Passbook\Pass\Field;
use Passbook\Pass\Image;
use Passbook\PassFactory;
use Passbook\Pass\Barcode;
use Passbook\Pass\Structure;
use Passbook\Type\EventTicket;

// Set these constants with your values
define('P12_FILE', '/path/to/p12/certificate.p12');
define('P12_PASSWORD', 'password_for_p12_file');
define('WWDR_FILE', '/path/to/wwdr.pem');
define('PASS_TYPE_IDENTIFIER', 'pass.com.example.yourpass');
define('TEAM_IDENTIFIER', 'IDFROMAPPLE');
define('ORGANIZATION_NAME', 'Your Organization Name');
define('OUTPUT_PATH', '/path/to/output/path');
define('ICON_FILE', '/path/to/icon.png');

// Create an event ticket
$pass = new EventTicket("1234567890", "The Beat Goes On");
$pass->setBackgroundColor('rgb(60, 65, 76)');
$pass->setLogoText('Apple Inc.');

// Create pass structure
$structure = new Structure();

// Add primary field
$primary = new Field('event', 'The Beat Goes On');
$primary->setLabel('Event');
$structure->addPrimaryField($primary);

// Add secondary field
$secondary = new Field('location', 'Moscone West');
$secondary->setLabel('Location');
$structure->addSecondaryField($secondary);

// Add auxiliary field
$auxiliary = new Field('datetime', '2013-04-15 @10:25');
$auxiliary->setLabel('Date & Time');
$structure->addAuxiliaryField($auxiliary);

// Add icon image
$icon = new Image(ICON_FILE, 'icon');
$pass->addImage($icon);

// Set pass structure
$pass->setStructure($structure);

// Add barcode
$barcode = new Barcode(Barcode::TYPE_QR, 'barcodeMessage');
$pass->setBarcode($barcode);

// Create pass factory instance
$factory = new PassFactory(PASS_TYPE_IDENTIFIER, TEAM_IDENTIFIER, ORGANIZATION_NAME, P12_FILE, P12_PASSWORD, WWDR_FILE);
$factory->setOutputPath(OUTPUT_PATH);
$factory->package($pass);

Requirements

Version 1.2.0 is the last release to support PHP 5.3.

Obtaining the Pass Type Identifier and Team ID

You can find more information from Apple on Setting the Pass Type Identifier and Team ID.

Requesting Certificates

P12 Certificate

Once you have downloaded the Apple iPhone certificate from Apple, export it to the P12 certificate format.

To do this on Mac OS:

  1. Open the Keychain Access application (in the Applications/Utilities folder).
  2. If you have not already added the certificate to Keychain, select File > Import. Then navigate to the certificate file (the .cer file) you obtained from Apple.
  3. Select the Keys category in Keychain Access.
  4. Select the private key associated with your iPhone Development Certificate. The private key is identified by the iPhone Developer: public certificate that is paired with it.
  5. Select File > Export Items.
  6. Save your key in the Personal Information Exchange (.p12) file format.
  7. You will be prompted to create a password that is used when you attempt to import this key on another computer.

on Windows:

  1. Convert the developer certificate file you receive from Apple into a PEM certificate file. Run the following command-line statement from the OpenSSL bin directory:
openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM
  1. If you are using the private key from the keychain on a Mac computer, convert it into a PEM key:
openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem
  1. You can now generate a valid P12 file, based on the key and the PEM version of the iPhone developer certificate:
openssl pkcs12 -export -inkey mykey.key -in developer_identity.pem -out iphone_dev.p12

If you are using a key from the Mac OS keychain, use the PEM version you generated in the previous step. Otherwise, use the OpenSSL key you generated earlier (on Windows).

WWDR Certificate

Apple’s World Wide Developer Relations (WWDR) certificate is available from Apple at http://developer.apple.com/certificationauthority/AppleWWDRCA.cer. You will have to add this to your Keychain Access and export it in .pem format to use it with the library. The WWDR certificate links your development certificate to Apple, completing the trust chain for your application.

Running Tests

Before submitting a patch for inclusion, you need to run the test suite to check that you have not broken anything.

To run the test suite, install PHPUnit 3.7 (or later) first.

Dependencies

To run the entire test suite, including tests that depend on external dependencies, php-passbook needs to be able to autoload them. By default, they are autoloaded from vendor/ under the main root directory (see vendor/autoload.php).

To install them all, use Composer:

Step 1: Get Composer

curl -s http://getcomposer.org/installer | php

Make sure you download composer.phar in the same folder where the composer.json file is located.

Step 2: Install vendors

php composer.phar install

Note that the script takes some time to finish.

Running

First, install the vendors (see above).

Then, run the test suite from the package root directory with the following command:

phpunit

The output should display OK. If not, you need to figure out what's going on and if the tests are broken because of your modifications.

Reporting an issue or a feature request

Issues and feature requests related to this library are tracked in the Github issue tracker: https://github.com/eymengunay/php-passbook/issues

Donating

If you want to support the project, please consider to donate a small amount using my Gratipay or Changetip page. Thank you for your support!

See also

PassbookBundle: PHP-Passbook library integration for Symfony2

Comments
  • Forced extension for images to PNG

    Forced extension for images to PNG

    Forced extension for images to PNG to avoid problem with images created via URL with query string.

    When you create an Image passing an URL that contains parameters getExtension() returns also the query string.

    $foo = new Image("http://www.test.com/myimage.png?w=100");
    echo $foo->getExtension();
    
    // png?w=100
    

    This create not valid filename for images like [email protected]?w=100

    Note AFAIK Wallet only accept PNG images so IMHO Image should throw an exception if a non PNG file is passed.

    opened by hpatoio 7
  • Help please

    Help please

    All works good , but i have 1 issue , when i creating new pkpass, my file have strange srtucture , pkpassname and path folders. With this structure , mac can't open this passbook Help me please. Thanks.

    opened by serjbord 6
  • Packagist does not list release 2.2.0

    Packagist does not list release 2.2.0

    2.2.0 is listed on https://github.com/eymengunay/php-passbook/tags but it’s not listed at https://packagist.org/packages/eo/passbook. Packagist also says "This package is not auto-updated.". I hit the "upgrade now" button but that didn't catch it either.

    Edit

    Looks like the composer.json in 2.2.0 contains version: 3.0.0. That doesn’t seem right

    opened by lstrojny 4
  • Problem with generated zip

    Problem with generated zip

    HI! The pkpass file doesn't work at iphone devices. When the file is downloaded by Safary, it is showed this error: "Safari cannot download this file". I am testing with simulator of xcode and show the next logs:

    Jun 23 18:06:41 iMac MobileSafari[646]: BOM could not extract archive: Couldn't read PKZip signature Jun 23 18:06:41 --- last message repeated 1 time --- Jun 23 18:06:41 iMac MobileSafari[646]: PassBook Pass download failed: The pass cannot be read because it isn’t valid.

    I have generated the p12 file like you say at https://github.com/eymengunay/php-passbook#p12-certificate.

    Finally, I can install the pkpass at Android devices.

    I hope that you can help me.

    Thank you!

    question 
    opened by memento86 4
  • Image format

    Image format

    AFAIK only PNG images are allowed in pkpass files.

    I was using this library and I tried to add JPG images but were not showed up. The library should throw an exception if non PNG image is added. Do you agree ? I've already a draft for this I can send a PR

    opened by hpatoio 4
  • Slashing on Windows for Zip issue

    Slashing on Windows for Zip issue

    Hey, just wanted to let you know that i found an issue for windows.

    PassFactory seems to have a problem in the zip() function at Line 362 where the slashes for UNIX are brought in the right direction. But for Windows this causes an issue.

    So i added $file = str_replace('', '/', $file); directly after this line, to solve this issue.

    Im not sure how to add a pull request. So this is how im letting you know.

    opened by vogtdominikgit 4
  • This pass is no longer valid

    This pass is no longer valid

    Hi,

    I'm trying to use your library but i have an issue.

    Here is my code:

    https://gist.github.com/dator/ff9e8a7bc3acc595fe25

    And with this code, i always get "This pass is no longer valid". My P12 looks fine, the passbook is created but not valid and Qrcode is not displaying.

    capture d ecran 2015-12-03 a 15 47 02

    Do you have an idea ?

    Thanks a lot,

    opened by dator-zz 4
  • Relevance Information: Displaying Passes on the Lock Screen

    Relevance Information: Displaying Passes on the Lock Screen

    I need to be able to add relevant locations to the passbook file. How do you propose I go about doing this? This is what the JSON will look like

    {
        ...
        "description" : "Example pass showing relevance information",
    
        "locations" : [
    
            {"latitude" : 37.3229, "longitude" : -122.0323},
    
            {"latitude" : 37.3286, "longitude" : -122.0143},
    
            {
    
                "altitude" : 10.0,
    
                "latitude" : 37.331,
    
                "longitude" : -122.029,
    
                "relevantText" : "Store nearby on 3rd and Main."
    
            }
    
        ],
    
        "relevantDate" : "2014-12-05T09:00-08:00"
    
    }
    
    opened by sameg14 4
  • Pass localization

    Pass localization

    Hi! Are there any plans for adding pass localization support? Apple reference: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/PassKit_PG/Chapters/Creating.html#//apple_ref/doc/uid/TP40012195-CH4-SW54

    enhancement 
    opened by Zorato 4
  • Project Depends on Third Party Libraries

    Project Depends on Third Party Libraries

    PassFactory has dependencies that rely on functionality that is not required for the project. Not everybody uses Symphony for their framework, or composure, for their projects. Composure not a big deal, but if third party libraries are going to referenced, they should be included in the project. Same goes for references to JMS\Serializer.

    opened by rdfedor 4
  • added support for groupingIdentifier iOS 7.0+

    added support for groupingIdentifier iOS 7.0+

    Support for groupingIdentifier to allow multiple passes to be displayed side by side, useful for trips with connection flights (multiple boarding passes), and multiple event tickets on the same order.

    opened by davidmharrison 3
  • the right approach to add background

    the right approach to add background

    (Event ticket)) I do it this way, but background not showing up. Could you help ?

    $background= new Image(BACKGROUND, 'background'); $pass->addImage($background);

    opened by Abilet 0
  • Composer installation problem…

    Composer installation problem…

    After putting ""eo/passbook": "dev-master" in the require section of my composer.json file and running "composer update" I have this message : Problem 1 - Root composer.json requires eo/passbook dev-master -> satisfiable by eo/passbook[dev-master]. - eo/passbook dev-master requires php >=7.4 -> your php version (7.3.17) does not satisfy that requirement.

    The documentation indicates that the minimum required version for PHP is 5.4. This message tell me that I need at least PHP version 7.4 ! However, my production server is in v 7.3, so this is a problem.

    What did I do wrong?

    opened by jadecrea 1
  • Sanity Check please

    Sanity Check please

    All seems ok, but when I email an apple device, it dows not open in wallet. The email (raw) and the pkpass contents are as described below. It's all test data, nothing confidential. Can anyone spot anything obviously wrong ? pkpass contains: icon.png, 4573b manifest.json, 110b pass.json, 717b signature: 3328b

    manifest: {"icon.png":"e0f0bcd503f6117bce6a1a3ff8a68e36d26ae47f","pass.json":"37ede58605c24a6a41ced70c215c188045ad50bf"}

    pass: {"eventTicket":{"primaryFields":[{"key":"event","value":"Governor's Meeting","label":"Event"}],"secondaryFields":[{"key":"location","value":"Inventry Offices","label":"Location"}],"auxiliaryFields":[{"key":"datetime","value":"2018-05-15 @10:30","label":"Date & Time"}]},"serialNumber":"0000000001","description":"Govenor\'s Meeting","formatVersion":1,"barcode":{"format":"PKBarcodeFormatQR","message":"0000154742","messageEncoding":"iso-8859-1"},"barcodes":[{"format":"PKBarcodeFormatQR","message":"0000154742","messageEncoding":"iso-8859-1"}],"backgroundColor":"rgb(60, 65, 76)","logoText":"Inventry. Woo!","passTypeIdentifier":"pass.inventry.invite","teamIdentifier":"ZTNZLE8U52","organizationName":"InVentry Ltd"}

    mail (trimmed for clarity)

    Delivered-To: [email protected] Received: by 2002:a9d:b38:0:0:0:0:0 with SMTP id a53-v6csp761540ota; Wed, 2 May 2018 07:58:44 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpayxTLpIxiR0zAlFi5QW+uut/J5nMd2BpCNIg9dc3Cw2/9g0D2hIHbM210l+Bse+hm0/pw X-Received: by 10.28.212.210 with SMTP id l201mr11764408wmg.98.1525273124647; Wed, 02 May 2018 07:58:44 -0700 (PDT)

    	<snip>
    

    Return-Path: [email protected] Received: from xxxx.co.uk ([2a00:1a48:7806:116:be76:4eff:fe08:9179]) by mx.google.com with ESMTP id g8si2475196wma.7.2018.05.02.07.58.44 for [email protected]; Wed, 02 May 2018 07:58:44 -0700 (PDT) Received-SPF: pass (google.com: domain of [email protected] designates 2a00:1a48:7806:116:be76:4eff:fe08:9179 as permitted sender) client-ip=2a00:1a48:7806:116:be76:4eff:fe08:9179; Authentication-Results: mx.google.com; spf=pass (google.com: domain of [email protected] designates 2a00:1a48:7806:116:be76:4eff:fe08:9179 as permitted sender) [email protected] Received: from xxxx.co.uk (unknown [84.21.150.175]) by xxxx.co.uk (Postfix) with ESMTPS id 28A083E89D for [email protected]; Wed, 2 May 2018 15:58:43 +0100 (BST) Date: Wed, 2 May 2018 14:58:43 +0000 To: [email protected] From: XxX [email protected] Subject: Sample Invite Pass Message-ID: 0d7304503b7488a3274b05cd22f6e6b3@localhost X-Mailer: PHPMailer 5.2.22 (https://github.com/PHPMailer/PHPMailer) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_0d7304503b7488a3274b05cd22f6e6b3" Content-Transfer-Encoding: 8bit

    This is a multi-part message in MIME format.

    --b1_0d7304503b7488a3274b05cd22f6e6b3 Content-Type: text/plain; charset=us-ascii

    This is the message text body

    --b1_0d7304503b7488a3274b05cd22f6e6b3 Content-Type: application/vnd.apple.pkpass; name="0000000001.pkpass" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0000000001.pkpass

    UEsDBBQAAAAIAPpyokzQ7O3DVwkAAAANAAAJAAAAc2lnbmF0dXJlzZZ3VJPJFsDzfSlICEYIQUSz JFKUPglBQZZV2oKCdBBYBEMSIJQQkwBigwSNSnkiLAprw6Uo2FERAUUOTVyKYlk5PlxBUBAVC2VF

    c29uUEsBAhQDFAAAAAgA+nKiTKLA0w5eAAAAbgAAAA0AAAAAAAAAAAAAALaBHh0AAG1hbmlmZXN0 Lmpzb25QSwUGAAAAAAQABADfAAAApx0AAAAA

    --b1_0d7304503b7488a3274b05cd22f6e6b3--

    opened by waveydavey0 0
  • Can't download pkpass from Chrome on iOS.

    Can't download pkpass from Chrome on iOS.

    I'm using the following code to return the pkpass to the user...

    <?php
    	$pkpass_file = 'passwebservice/output/' . $serial_number . '.pkpass';
    	header("Pragma: no-cache");
    	header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
    	header("Content-Type: application/vnd.apple.pkpass");
    	header('Content-Disposition: attachment; filename="' . $serial_number . '.pkpass"');
    	clearstatcache();
    	$filesize = filesize($pkpass_file);
    	if($filesize)
    	    header("Content-Length: ". $filesize);
    		header('Content-Transfer-Encoding: binary');
    	if (filemtime($pkpass_file)) {
    	    date_default_timezone_set("UTC");
    	    header('Last-Modified: ' . date("D, d M Y H:i:s", filemtime($pkpass_file)) . ' GMT');
    	}
    	flush();
    	readfile($pkpass_file);
    ?>
    

    The pass can be successfully downloaded and installed to my Apple Wallet when I access the page using Safari on iOS.

    But when I try to do the same on Chrome on iOS, I get the following message:

    Sorry, your Pass cannot be installed to Passbook at this time.

    Anyone here encountering a similar problem? Is there anything that needs to be modified in the code to handle downloading from Chrome on iOS?

    opened by ismail-wun-sg 3
  • Validation fails as soon as I specify a webserviceURL

    Validation fails as soon as I specify a webserviceURL

    Thanks a lot for making this library available. I am able to create passbooks but when Im trying to add them to my Wallet its not letting me. I've read online that they must be served over https which I've tried as well.

    Is a webserviceURL a requirement for adding a passbook to a wallet? As soon as I add $pass->setWebServiceURL('https://test.com'); Im getting a Failed to validate passbook (without one of the error messages in the PassValidator.php being passed).

    opened by timinho 1
Releases(v3.1.1)
  • v3.1.1(Nov 28, 2021)

    What's Changed

    • Fix strict type issue by @JeroenMoonen in https://github.com/eymengunay/php-passbook/pull/90

    New Contributors

    • @JeroenMoonen made their first contribution in https://github.com/eymengunay/php-passbook/pull/90

    Full Changelog: https://github.com/eymengunay/php-passbook/compare/v3.1.0...v3.1.1

    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(Nov 28, 2021)

    What's Changed

    • Added NFC support by @hervehobbes in https://github.com/eymengunay/php-passbook/pull/89

    New Contributors

    • @hervehobbes made their first contribution in https://github.com/eymengunay/php-passbook/pull/89

    Full Changelog: https://github.com/eymengunay/php-passbook/compare/v3.0.0...v3.1.0

    Source code(tar.gz)
    Source code(zip)
  • v3.0.0(Dec 23, 2020)

    v3.0.0 (2020-12-23)

    Features: 6df4877d249ff51786dd0ad439c5f3ae9ec2deb1:

    • Bump PHPUnit and PHP versions to most recent
    • Remove PSR-0 definitions and add PSR-4s instead to fix the namespace resolution issues
    • Fix the broken tests
    • Update the package's major version as the changes are not backwards compatible
    • Add type checking to NumberField so it won't accept anything other than numbers
    • Shorten the environment variables defined in phpunit.xml.dist
    • Rename the certificate files
    • Add Apple's WWDR cert
    • Omit the extra step of defining the environment variables by fixing the defaults in PassFactoryTest
    • Remove tests/bootstrap.php as it's not needed anymore.
    • Remove some qualifiers
    • Add types explicitly to some methods and properties.

    This release requires PHP >= 7.4

    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(Feb 23, 2018)

    v2.1.1 (2018-02-23)

    Features: a5b05f3ddedf20f41c5c7f5eda38ea362732190d : Grouping identifier validation bug fixed for non boardingPass and eventTicket types

    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Jan 22, 2018)

    v2.1.0 (2018-01-22)

    Features: 238fa522feafe6ce2994996009aef7e1cae9d06d : Image pathname can now be also URL, not only local file location

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Nov 16, 2016)

    v2.0.0 (2016-11-16)

    Features: c103b40ebbb1d2fdc47ef10729f8b643a31dcd96 : Image class setRetina/isRetina methods replaced with setDensity/getDensity. (3x image support)

    Source code(tar.gz)
    Source code(zip)
  • v1.3.1(Nov 16, 2016)

  • v1.3.0(May 6, 2016)

    v1.3.0 (2016-05-06)

    Features: db4f235fb9f1e77c77eb844fed8420a75ca3073a : Integrated pass validation into the PassFactory d9e10155298f3ba2038637d23448cf5a6be4caad : Added image file type check to pass validation (#48) 856ff45e7a3049b01598210b004d0215135e94f2 : Specify the pass filename when packaging a pass (#50)

    Bugfixes: cce73c7dc98f1aaaf41b87747f41c4f73fbc7ae9 : Fixed some issues with slashes on Windows systems (#47) 1835c924cad2d8fd6f5ea7796e982db0da46c869 : Fixed escaping quotes in Localization text (#53)

    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Jan 27, 2016)

    v1.2.1 (2016-01-27)

    Bugfixes: 7df1e8f96ecc02ab8f69a833a1df1bac72a342f6 : Fixed issue setting Max Distance on a pass ac878ced6afce7ed72f11ab200fe4e880b0ba586 : Ensure values in number fields are a numeric type

    This patch release supports PHP 5.3.

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Nov 9, 2015)

    v1.2.0 (2015-11-09)

    Features: 2ff4556832a20cff123291869122af1f1cfe3cde : Localization support 165e7c04ed139ecd63053c4291be2e5a497f361c : maxDistance support (for iOS 7+) 955146ef47131ab6696abe7f68c65fb180c5379f : PKBarcodeFormatCode128 support (for iOS 9+) f927c3a6c8102bffdfecd64dfc2b9dde843bbcf4 : Added PassValidator to catch common errors with passes b5a4443768f5c7c16930d681e4e973625efaf441 : Allow required information to be set directly in the pass

    Bugfixes: aa65c925d44c638b520e83c893f3746316569e44 : Fixed issue with create/overwrite zip file fc6dbd0f6dc775b24f9ce6815ea164feefeb9734 : Fixed issue serializing a pass without any fields c5d14f8bde449bbb1341a1f95bf983b2a65d0127 : Prevent packaging a pass without a serial number 737191965c867f87cc3deed80458869f393e40f5 : Ensure serial number is always a string

    This is the last release with support for PHP 5.3.

    Source code(tar.gz)
    Source code(zip)
  • v1.1.3(Jul 8, 2015)

  • v1.1.2(Jul 23, 2014)

  • v1.1.1(Mar 28, 2014)

    v1.1.1 (2014-03-28)

    Features: 157d7ea9e9ef93314af59321200fa498e9c0eba5: appLaunchURL support 6007c74cfd49c5999f0c62d25d15e25634760b85: expirationKeys support 36da208c4d93bf30c25ff1f5d48558ac1ba6aa30: NumberField class added

    Bugfixes: 79171b184664deb9086525cb54190637c45be323 : Boarding pass serialization bug fixed

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Jan 26, 2014)

    v1.1.0 (2014-01-26)

    Features: 53a1cea1e3511b079ac89ce5970143e478ab7b18: iBeacon support 650291b57d8cc8cb3db53993b7d8aa3b831ac7df: JMS Serializer dependency removed 7cfdcc3d42b503bd681fbdbedda53c85fb791c2c: Field align constants added 092391bad0ee402e4478ab774497d1b205e2b342: Barcode type constants added f072a9e5ac9b26e3390d8999397f2d81593d539e: Pass images accept remote files dcb4388d04b48b7e72e638231ff3f06aea5422b5: Simple pass server added for easier testing

    Bugfixes: 94f9fb75b44bdda7c32916d0f0f289a67e7f5a26 : Pass directory zip bug

    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Oct 9, 2013)

  • v1.0.0(Jul 18, 2014)

Dobren Dragojević 6 Jun 11, 2023
Easy to use utility functions for everyday PHP projects. This is a port of the Lodash JS library to PHP

Lodash-PHP Lodash-PHP is a port of the Lodash JS library to PHP. It is a set of easy to use utility functions for everyday PHP projects. Lodash-PHP tr

Lodash PHP 474 Dec 31, 2022
PHP Text Analysis is a library for performing Information Retrieval (IR) and Natural Language Processing (NLP) tasks using the PHP language

php-text-analysis PHP Text Analysis is a library for performing Information Retrieval (IR) and Natural Language Processing (NLP) tasks using the PHP l

null 464 Dec 28, 2022
php-echarts is a php library for the echarts 5.0.

php-echarts 一款支持Apache EChart5.0+图表的php开发库 优先ThinkPHP5/6的开发及测试。 Apache EChart5.0已经最新发布,在视觉效果、动画效果和大数据展示方面已经远超之前的版本; 故不考虑EChart5.0之前版本的兼容问题;建议直接尝试5.0+

youyiio 5 Aug 15, 2022
Minimalist PHP frame for Core-Library, for Developing PHP application that gives you the full control of your application.

LazyPHP lightweight Pre-Made Frame for Core-library Install Run the below command in your terminal $ composer create-project ryzen/lazyphp my-first-pr

Ry-Zen 7 Aug 21, 2022
Gettext is a PHP (^7.2) library to import/export/edit gettext from PO, MO, PHP, JS files, etc.

Gettext Note: this is the documentation of the new 5.x version. Go to 4.x branch if you're looking for the old 4.x version Created by Oscar Otero http

Gettext 651 Dec 29, 2022
Columnar analytics for PHP - a pure PHP library to read and write simple columnar files in a performant way.

Columnar Analytics (in pure PHP) On GitHub: https://github.com/envoymediagroup/columna About the project What does it do? This library allows you to w

Envoy Media Group 2 Sep 26, 2022
:date: The VObject library for PHP allows you to easily parse and manipulate iCalendar and vCard objects

sabre/vobject The VObject library allows you to easily parse and manipulate iCalendar and vCard objects using PHP. The goal of the VObject library is

sabre.io 532 Dec 25, 2022
Small convention based CQRS library for PHP

LiteCQRS for PHP Small naming-convention based CQRS library for PHP (loosely based on LiteCQRS for C#) that relies on the MessageBus, Command, EventSo

Benjamin Eberlei 560 Nov 20, 2022
Experimental library for forking PHP

Spork: PHP on a Fork <?php $manager = new Spork\ProcessManager(); $manager->fork(function() { // do something in another process! return 'Hel

Kris Wallsmith 588 Nov 20, 2022
Collection pipeline library for PHP

Knapsack Collection pipeline library for PHP Knapsack is a collection library for PHP >= 5.6 that implements most of the sequence operations proposed

Dušan Kasan 540 Dec 17, 2022
A PHP library to play with the Raspberry PI's GPIO pins

php-gpio php-gpio is a simple PHP library to play with the Raspberry PI's GPIO pins. It provides simple tools such as reading & writing to pins. [UPDA

Ronan Guilloux 266 Oct 17, 2022
PHP library for dealing with European VAT

ibericode/vat This is a simple PHP library to help you deal with Europe's VAT rules. Fetch VAT rates for any EU member state using ibericode/vat-rates

ibericode 389 Dec 31, 2022
Sslurp is a simple library which aims to make properly dealing with SSL in PHP suck less.

Sslurp v1.0 by Evan Coury Introduction Dealing with SSL properly in PHP is a pain in the ass and completely insecure by default. Sslurp aims to make i

Evan Coury 65 Oct 14, 2022
A framework agnostic PHP library to build chat bots

BotMan If you want to learn how to create reusable PHP packages yourself, take a look at my upcoming PHP Package Development video course. About BotMa

BotMan 5.8k Jan 1, 2023
Lock library to provide serialized execution of PHP code.

Requirements | Installation | Usage | License and authors | Donations php-lock/lock This library helps executing critical code in concurrent situation

null 875 Jan 7, 2023
PHP Machine Learning library

PHP-ML - Machine Learning library for PHP Fresh approach to Machine Learning in PHP. Algorithms, Cross Validation, Neural Network, Preprocessing, Feat

Jorge Casas 204 Dec 27, 2022
A framework agnostic, multi-gateway payment processing library for PHP 5.6+

Omnipay An easy to use, consistent payment processing library for PHP Omnipay is a payment processing library for PHP. It has been designed based on i

The League of Extraordinary Packages 5.7k Dec 30, 2022
PHP library providing retry functionality with multiple backoff strategies and jitter support

PHP Backoff Easily wrap your code with retry functionality. This library provides: 4 backoff strategies (plus the ability to use your own) Optional ji

Signature Tech Studio 145 Dec 21, 2022