This repository has been archived by the owner on Feb 11, 2018. It is now read-only.
Example
Andrey F. Mindubaev edited this page May 2, 2013
·
3 revisions
Put example.php to document root with installed Composer and run.
<?php
require_once "vendor/autoload.php";
/**
* Function is used in code below |
* v
* Log files status
* - Add file to Log-list
* - Show status
* - Remove file from Log-list if it is not exists any more
*/
function logWrapperFS()
{
static $counter = 0, $files = array();
$counter++;
$newfiles = func_get_args();
foreach ($newfiles as $filename) {
if (!in_array($filename, $files)) {
$files[] = $filename;
}
}
foreach ($files as $key => $filename) {
$pos = strpos($filename, "://");
if ($pos !== false && !in_array(substr($filename, 0, $pos), stream_get_wrappers())) {
continue;
}
if (file_exists($filename)) {
if (is_file($filename)) {
$content = " == '" . file_get_contents($filename) . "'";
} else {
$content = " == DIR";
}
} else {
$content = " (not exists)";
unset($files[$key]);
}
echo sprintf('%1$03d: %2$s%3$s', $counter, $filename, $content) . "\n";
}
echo "\n";
}
/**
* Init check
*/
$dir0_0 = "./dir1";
if (file_exists($dir0_0) && !@rmdir($dir0_0)) {
die("Please delete './dir1'");
}
/**
* Create './file1.txt'
*/
$filename0_0 = "./file1.txt";
if (!@file_put_contents($filename0_0, "qwerty")) {
die("Could not create file './file1.txt'");
}
/**
* File './file1.txt' exists
* File contains 'qwerty'
*/
logWrapperFS($filename0_0);
// 001: ./file1.txt == 'qwerty'
/**
* Register Virtual File System
*/
JooS\Stream\Wrapper_FS::register("virtual-fs1", __DIR__);
$filename1_0 = "virtual-fs1://file1.txt";
/**
* Virtual file 'virtual-fs://file1.txt' exists
*/
logWrapperFS($filename1_0);
// 002: ./file1.txt == 'qwerty'
// 002: virtual-fs1://file1.txt == 'qwerty'
/**
* Create virtual directory, rename virtual file
*/
$dir1_0 = "virtual-fs1://dir1";
mkdir($dir1_0);
$filename1_1 = "virtual-fs1://dir1/file2.txt";
rename($filename1_0, $filename1_1);
/**
* Real file './file1.txt' still exists
*/
logWrapperFS($dir1_0, $filename1_1);
// 003: ./file1.txt == 'qwerty'
// 003: virtual-fs1://file1.txt (not exists)
// 003: virtual-fs1://dir1 == DIR
// 003: virtual-fs1://dir1/file2.txt == 'qwerty'
/**
* Put new contents to renamed virtual file
*/
file_put_contents($filename1_1, "asdf");
/**
* Real file is still the same
* New virtual file contains 'asdf'
*/
logWrapperFS();
// 004: ./file1.txt == 'qwerty'
// 004: virtual-fs1://dir1 == DIR
// 004: virtual-fs1://dir1/file2.txt == 'asdf'
/**
* Commit changes
*/
JooS\Stream\Wrapper_FS::commit("virtual-fs1");
$dir0_1 = "./dir1";
$filename0_1 = "./dir1/file2.txt";
/**
* Real file './file1.txt' was moved to new real directory
* New real file contains 'asdf'
* Virtual file is still the same
*/
logWrapperFS($dir0_1, $filename0_1);
// 005: ./file1.txt (not exists)
// 005: virtual-fs1://dir1 == DIR
// 005: virtual-fs1://dir1/file2.txt == 'asdf'
// 005: ./dir1 == DIR
// 005: ./dir1/file2.txt == 'asdf'
/**
* Delete virtual file and directory
*/
unlink($filename1_1);
rmdir($dir1_0);
/**
* New real file exists
* Virtual file and directory deleted
*/
logWrapperFS();
// 006: virtual-fs1://dir1 (not exists)
// 006: virtual-fs1://dir1/file2.txt (not exists)
// 006: ./dir1 == DIR
// 006: ./dir1/file2.txt == 'asdf'
/**
* Unregister stream wrapper
* Cancel all changes after last commit
*/
JooS\Stream\Wrapper_FS::unregister("virtual-fs1");
/**
* PHP stream unregistered, virtual files are not exists
* New real file still contains 'asdf'
*/
logWrapperFS();
// 007: ./dir1 == DIR
// 007: ./dir1/file2.txt == 'asdf'
/**
* Cleanup
*/
unlink($filename0_1);
rmdir($dir0_1);
/**
* All files deleted
*/
logWrapperFS($filename0_0);
// 008: ./dir1 (not exists)
// 008: ./dir1/file2.txt (not exists)
// 008: ./file1.txt (not exists)
?>