PHPackages                             airmoi/filemaker - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. airmoi/filemaker

ActiveLibrary[Database &amp; ORM](/categories/database)

airmoi/filemaker
================

Rewritten FileMaker PHP-API

3.0.1(3w ago)84127.9k↓60.9%36[11 issues](https://github.com/airmoi/FileMaker/issues)3BSD-3-ClausePHPPHP ^5.6|^7.0|^8.0CI failing

Since May 11Pushed 9mo ago10 watchersCompare

[ Source](https://github.com/airmoi/FileMaker)[ Packagist](https://packagist.org/packages/airmoi/filemaker)[ RSS](/packages/airmoi-filemaker/feed)WikiDiscussions master Synced 2w ago

READMEChangelog (10)Dependencies (4)Versions (32)Used By (3)

FileMaker® PHP-API
==================

[](#filemaker-php-api)

FileMaker® PHP API rewritten for PHP 5.5+. It is compatible with PHP 7.0+ and uses PSR-4 autoloading specifications.

Features
--------

[](#features)

This version of the PHP-API add the following feature to the offical API :

- Error handling using Exception (you can restore the original behavior using option 'errorHandling' =&gt; 'default')
- PSR-4 autoloading and installation using composer
- PHP 7.0+ compatibility
- 'dateFormat' option to select the input/output date format
- 'emptyAsNull' option to return empty value as null
- Support setRange() method with PerformScript command (as supported by CWP)
- A method to get the url of your last CWP call: `$fm->getLastRequestedUrl()`
- A method to check if a findRequest is empty: `$request->isEmpty()`
- A method to get the value list associated to a field from a Record: `$record->getValueListTwoField('my_field')`
- 'useDateFormatInRequests' allow you to use defined 'dateFormat' in request (support wildcards and range)
- Use custom "logger" : your logger must implement a log($message, $level) method. Additionally, your logger may implement profileBegin($key)/profileEnd($key) methods to profile query performances.
- Set a Cache object (must implement set($key, $value) and get($key) methods) to cache meta data such as layouts and scripts and reduce call
- dataAPI support : set 'engine' property to "dataPI" to switch from CWP to dataAPI (see dataAPI support section).
- Add a "session" Object to sessionHandler property to enable session level data storage (save dataAPI token to users session to reduce dataAPI login/logout). Your sessionHandler must implement set($key, $value) and get($key) methods

Requirements
------------

[](#requirements)

- PHP &gt;= 7.1
- (optional) PHPUnit to run tests.

Installation
------------

[](#installation)

### Using Composer

[](#using-composer)

You can use the `composer` package manager to install. Either run:

```
$ php composer.phar require airmoi/filemaker "*"

```

or add:

```
"airmoi/filemaker": "^3.0"

```

to your composer.json file

### Manual Install

[](#manual-install)

You can also manually install the API easily to your project. Just download the source [ZIP](https://github.com/airmoi/FileMaker/archive/master.zip) and extract its content into your project.

Usage
-----

[](#usage)

STEP 1 : Read the 'Important Notice' below

STEP 2 : include the API autoload

```
require '/path/to/autoloader.php';
```

*This step is facultative if you are using composer*

STEP 3 : Create a FileMaker instance

```
use airmoi\FileMaker\FileMaker;

$fm = new FileMaker($database, $host, $username, $password, $options);
```

STEP 4 : use it quite the same way you would use the offical API...

...And enjoy code completion using your favorite IDE and php 7 support without notice/warnings.

You may also find sample usage by reading the `sample.php` file located in the "demo" folder

### Sample demo code

[](#sample-demo-code)

```
use airmoi\FileMaker\FileMaker;
use airmoi\FileMaker\FileMakerException;

require('/path/to/autoloader.php');

$fm = new FileMaker('database', 'localhost', 'filemaker', 'filemaker', ['prevalidate' => true]);

try {
    $command = $fm->newFindCommand('layout_name');
    $records = $command->execute()->getRecords();

    foreach($records as $record) {
        echo $record->getField('fieldname');
        ...
    }
}
catch (FileMakerException $e) {
    echo 'An error occured ' . $e->getMessage() . ' - Code : ' . $e->getCode();
}
```

Important notices
-----------------

[](#important-notices)

### Switch from original PHP-API

[](#switch-from-original-php-api)

The 2.1 release aims to improve compatibility with the original FileMaker PHP-API. However, you will need to changes few things in your code in order to use it

The major changes compared to the official package are :

- Call autoloader.php instead of FileMaker.php to load the API
- API now support Exceptions error handling, you may switch between those behaviors by changing property 'errorHandling' to 'default' or 'exception' (default value is 'exception')
- There is no more 'conf.php' use "setProperty" to define specifics API's settings. You may also use an array of properties on FileMaker instanciation, ie : new FileMaker( $db, $host, $user, $pass, \['property' =&gt; 'value'\])
- All constants are now part of the FileMaker class, use FileMaker::&lt;CONSTANT\_NAME&gt; instead of &lt;CONSTANT\_NAME&gt;
- Also notice that FILEMAKER\_SORT\_ASCEND/DESCEND have been renamed to FileMaker::SORT\_ASCEND/FileMaker::SORT\_DESCEND

You can use the offical [PHP-API guide](https://fmhelp.filemaker.com/docs/14/fr/fms14_cwp_guide.pdf) provided by FileMaker® for everything else.

### dataAPI support

[](#dataapi-support)

A hard work has been done to make dataAPI support as transparent as possible. The goal was to let you be able to switch from CWP to dataAPI by just switching a property.

However, despite the dataAPI has roughly the same functionality, some of its behaviors differs from the CWP, which required some workarounds.

1. Globals lives across a session and can only be defined using a dedicated method, to fix that and prevent unexpected behaviors, globals are defined before performing a query, then reset after the query was performed.
2. Perform Script action returns the script result instead of a foundset (no workaround here, just to inform you that you'll get a script result instead of the resulting foundset). As a workaround, you may create a find query and use setScript($scriptName, $scriptParam) method to get the resulting foundset
3. DataAPI requires to login using credentials, then perform queries using the resulting token. To keep a dataAPI session alive across a "user" session and reduce login/logout operations, you may use a sessionHandler. It will enable PHP-API to save the token into the user session and reuse it as long as it is valid. If no session handler is defined, dataAPI will automatically logout when FileMaker's object is destroyed (ie end of your script)
4. When a token is expired, it will automatically be regenerated
5. DataAPI's "Layout" method only returns fields and value lists of the layout. Other meta's such as layout OT, layout Base Table name (same for portals) are only returned with a found set (hope Claris will fix this in a next release). It means, in order to keep the "getLayout" method consistent, that its has to query a "random" record on the given layout to retrieve those meta, so don't be surpised if you use getLayout() to see 2 queries performed to dataAPI. If the table is empty, layout Object won't have those metas.
6. DataAPI as a default pagination of 100 (while CWP does not have default pagination at all). To prevent truncated results, when no range limit is defined, the API will loop across pages to return the full foundset

TODO
----

[](#todo)

- Finish PHPunit test
- Add functionnal tests
- Improve parsers
- Add new parsers
- Add support for dataAPI
- Documentation

License
-------

[](#license)

FileMaker PHP API is licensed under the BSD License - see the LICENSE file for detail

Credits
-------

[](#credits)

### Contributors

[](#contributors)

- Thanks to [Matthias Kühne](https://github.com/MatthiasKuehneEllerhold) for PSR-4 implementation and code doc fixes.
- Thanks to [jeremiahsmall](https://github.com/jeremiahsmall) for improving error handling.

###  Health Score

60

—

FairBetter than 98% of packages

Maintenance70

Regular maintenance activity

Popularity48

Moderate usage in the ecosystem

Community27

Small or concentrated contributor base

Maturity79

Established project with proven stability

 Bus Factor1

Top contributor holds 89.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~151 days

Recently: every ~571 days

Total

28

Last Release

26d ago

Major Versions

2.3.0 → 3.0.0-beta12020-04-20

2.5.0 → 3.0.12026-07-22

PHP version history (4 changes)3.0.0-beta2PHP ^5.6|^7.0

2.4.0PHP ^5.5|^7.0

2.5.0PHP ^5.5|^7.0|^8.0

3.0.1PHP ^5.6|^7.0|^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/931b97c20b43bcc827fdd420fda3cca79f6758a6768e2e4ab54d6ff86922d358?d=identicon)[airmoi](/maintainers/airmoi)

---

Top Contributors

[![airmoi](https://avatars.githubusercontent.com/u/2822333?v=4)](https://github.com/airmoi "airmoi (217 commits)")[![MatthiasKuehneEllerhold](https://avatars.githubusercontent.com/u/19988979?v=4)](https://github.com/MatthiasKuehneEllerhold "MatthiasKuehneEllerhold (10 commits)")[![dawehner](https://avatars.githubusercontent.com/u/29678?v=4)](https://github.com/dawehner "dawehner (6 commits)")[![jeremiahsmall](https://avatars.githubusercontent.com/u/814871?v=4)](https://github.com/jeremiahsmall "jeremiahsmall (4 commits)")[![jomla97](https://avatars.githubusercontent.com/u/14143924?v=4)](https://github.com/jomla97 "jomla97 (3 commits)")[![ejsexton82](https://avatars.githubusercontent.com/u/6025431?v=4)](https://github.com/ejsexton82 "ejsexton82 (1 commits)")[![anhyeuviolet](https://avatars.githubusercontent.com/u/6290970?v=4)](https://github.com/anhyeuviolet "anhyeuviolet (1 commits)")

---

Tags

FileMakerPHP-API

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/airmoi-filemaker/health.svg)

```
[![Health](https://phpackages.com/badges/airmoi-filemaker/health.svg)](https://phpackages.com/packages/airmoi-filemaker)
```

###  Alternatives

[jdorn/sql-formatter

a PHP SQL highlighting library

3.8k117.8M121](/packages/jdorn-sql-formatter)[mevdschee/php-crud-api

Single file PHP script that adds a REST API to a SQL database.

3.7k67.4k10](/packages/mevdschee-php-crud-api)[propel/propel1

Propel is an open-source Object-Relational Mapping (ORM) for PHP5.

8351.6M88](/packages/propel-propel1)[gearbox-solutions/eloquent-filemaker

A package for getting FileMaker records as Eloquent models in Laravel

6664.6k2](/packages/gearbox-solutions-eloquent-filemaker)[insolita/yii2-migration-generator

Set of gii tools for generating files for migration by schema of table , phpdoc or table data

108508.0k5](/packages/insolita-yii2-migration-generator)[xpdo/xpdo

A PDO-based Object/Relational Bridge Library

7088.4k4](/packages/xpdo-xpdo)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
