<?php 
require '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()); 
}
 
 |