We apologize to inform you that this library is no longer maintained. There are some notes here if you wish to continue using this library. Alternatively, there is BagItTools.
This is a PHP implementation of the BagIt 0.96 specification
BagItPHP can be installed using composer using a
package repository. Your composer.json
will need to look something like this:
{
"require": {
"scholarslab/bagit": "~0.2"
}
}
% git clone git://github.com/scholarslab/BagItPHP.git
You'll need to have these installed to use this:
require_once 'lib/bagit.php';
define('BASE_DIR', 'testbag');
// create a new bag at BASE_DIR
$bag = new BagIt(BASE_DIR);
// add a file; these are relative to the data directory
$bag->addFile('../phpunit.xml', 'phpunit.xml');
// update the hashes
$bag->update();
// create a tarball
$bag->package('testbag');
// the bag package will be created at ./testbag.tgz
require_once 'lib/bagit.php';
define('BASE_DIR', 'testbag');
// define some metadata to add to bag-info.txt
$baginfo = array('First-Tag' => 'This is the first tag value',
'Second-Tag' => 'This is the second tag value'
);
// create a new bag at BASE_DIR
$bag = new BagIt(BASE_DIR, true, true, true, $baginfo);
// add a file; these are relative to the data directory
$bag->addFile('../phpunit.xml', 'phpunit.xml');
// add additional metadata to bag-info.txt
$bag->setBagInfoData('Third-Tag', 'This is the third tag value');
// add some entries to fetch.txt
$bag->fetch->add('http://example.com/bar.htm', 'bar.htm');
$bag->fetch->add('http://example.com/baz.htm', 'baz.htm');
// update the hashes
$bag->update();
// create a tarball
$bag->package('testbag');
// the bag package will be created at ./testbag.tgz
require_once 'lib/bagit.php';
// use an existing bag
$bag = new BagIt('test/TestBag.tgz');
// check validity
var_dump((bool)$bag->isValid());
require_once 'lib/bagit.php';
// use an existing bag
$bag = new BagIt('test/TestBag.tgz');
// validate the bag
$bag->validate();
// only execute if a valid bag
if (count($bag->getBagErrors()) == 0) {
// retrieve remote files
$bag->fetch->download();
// copy files
foreach ($bag->getBagContents() as $filename) {
copy($filename, 'final/destination/' . basename($filename));
}
}
We are relying on the GitHub issues tracker linked from the above for feedback. File bugs or other issues here.
The BagItPHP library includes unit tests to ensure the quality of the software. The easiest way to contribute to the project is to to let us know about andy bugs, and include a test case. Read the build.xml file more more information on running tests, the underlying report types, and packing information.
Thanks to everyone who's contributed to this: