| 
<?phprequire 'autoload.php';
 
 /**
 * This example shows you how you could use the file transfer protocol (FTP) to store information about the filesystem
 * If you would use this code in real life please make sure you store the output file (data.yml). By using the FTP method
 * it gets a lot harder for hackers to modify your scan file and fake the the scan results.
 */
 
 $path     = dirname(__FILE__)."/assets";
 $tmpfile  = $path.'/new.tmp';
 $timefile = $path.'/time.txt';
 
 /**
 * Change the values below to match your ftp settings.
 */
 $host     = "";
 $username = "";
 $password = "";
 $datafile = "httpdocs/data.yml";
 
 /**
 * Create the FTP adapter.
 */
 $adapter = new Redbox\Scan\Adapter\Ftp(
 $host,
 $username,
 $password,
 $datafile
 );
 
 try {
 
 /**
 * Since PSR-4 indicates the following:
 * Autoloader implementations MUST NOT throw exceptions, MUST NOT raise errors of any level, and SHOULD NOT return a value.
 *
 * We needed a seperate call to connect authenticate to the ftp server that would be able to report errors if needed.
 */
 if ($adapter->authenticate()) {
 
 /**
 * Enable transfer mode for FTP this can only be done after
 * the user is authenticated.
 */
 $adapter->setPassiveMode(true);
 
 
 /**
 * Enable Binary mode. Other options are FTP_MODE_ASCII.
 * The last mentioned is the default set by the adapter.
 */
 $adapter->setTransferMode(Redbox\Scan\Adapter\Ftp::FTP_MODE_BINARY);
 
 /**
 * Oke lets instantiate a new service and scan the assets folder inside
 * our current folder and write the data.yml file to the filesystem using the Filesystem adapter.
 */
 $scan = new Redbox\Scan\ScanService($adapter);
 if ($scan->index($path, 'Basic scan', date("Y-m-d H:i:s")) == false) {
 throw new Exception('Writing datafile failed.');
 }
 
 /**
 * After indexing the directory let's create a new file and update an other so
 * we can see if the filesystem picks it up.
 */
 file_put_contents($tmpfile, 'Hello world');
 file_put_contents($timefile, time());
 
 /**
 * Oke the changes have been made lets scan the assets directory again for changes.
 */
 $report = $scan->scan();
 
 /**
 * Do the cleanup. This is not needed if this where to be real code.
 */
 unlink($tmpfile);
 
 /**
 * Output the changes since the index action.
 */
 if(php_sapi_name() == "cli") {
 
 echo "New files\n\n";
 foreach ($report->getNewfiles() as $file) {
 echo $file->getFilename().' '.Redbox\Scan\Filesystem\FileInfo::getFileHash($file->getRealPath())."\n";
 }
 
 echo "\nModified Files\n\n";
 foreach ($report->getModifiedFiles() as $file) {
 echo $file->getFilename().' '.Redbox\Scan\Filesystem\FileInfo::getFileHash($file->getRealPath())."\n";
 }
 echo "\n";
 
 } else {
 echo '<h1>New files</h1>';
 foreach ($report->getNewfiles() as $file) {
 echo '<li>' . $file->getFilename().' '.Redbox\Scan\Filesystem\FileInfo::getFileHash($file->getRealPath()).'</li>';
 }
 echo '</ul>';
 
 echo '<h1>Modified Files</h1>';
 foreach ($report->getModifiedFiles() as $file) {
 echo '<li>'.$file->getFilename().' '.Redbox\Scan\Filesystem\FileInfo::getFileHash($file->getRealPath()).'</li>';
 }
 echo '</ul>';
 }
 } else {
 echo '<h1>Something went wrong</h1>';
 echo '<p>Could not authenticate user</p>';
 
 }
 
 } catch (Exception $e) {
 /* Handle Exception */
 if(php_sapi_name() != "cli") echo '<pre>';
 print_r($e->getMessage());
 }
 |