PHP code example of marktaborosi / storage-navigator
1. Go to this page and download the library: Download marktaborosi/storage-navigator library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
marktaborosi / storage-navigator example snippets
use Marktaborosi\StorageNavigator\Adapters\PHPNativeAdapter;
use Marktaborosi\StorageNavigator\Builders\FileStructureFilterBuilder;
use Marktaborosi\StorageNavigator\Renderers\Config\HtmlRendererConfig;
use Marktaborosi\StorageNavigator\Renderers\HtmlRenderer;
use Marktaborosi\StorageNavigator\StorageNavigator;
// Create a native PHP adapter for filesystem operations
$adapter = new PHPNativeAdapter();
// Configure HTML renderer settings
$config = new HtmlRendererConfig([
'date_format' => "Y-m-d H:i:s", // Set the format for displaying timestamps
]);
// Create an HTML renderer with a custom theme and options
$renderer = new HtmlRenderer(
themePath: "basic-mac", // Set the theme path for styling
config: $config, // Pass the renderer configuration
disableNavigation: false, // Enable directory navigation
disableFileDownload: false, // Allow file downloads
);
// Configure a filter to display only files
// Note: Additional filters can be applied using methods on $filterBuilder if needed
$filterBuilder = new FileStructureFilterBuilder();
$filterBuilder
->isFile() // Filter entries to
// Define the local filesystem adapter from league for the storage directory.
$localAdapter = new LocalFilesystemAdapter(__DIR__ . "/storage/");
$filesystem = new Filesystem($localAdapter);
// Create a Flysystem adapter for use with StorageNavigator
$adapter = new FlysystemAdapter($filesystem);
// Configure the HTML renderer with specific settings
$config = new HtmlRendererConfig([
'date_format' => "M d Y H:i", // Define date format for file timestamps
]);
// Create the HTML renderer with a specific theme and options
$renderer = new HtmlRenderer(
themePath: 'console-midnight-commander2', // Set theme path
config: $config, // Pass configuration
disableNavigation: false, // Enable navigation
disableFileDownload: false // Enable file downloads
);
// Configure filtering options for the file structure
// Note: Additional filters can be applied using methods on $filterBuilder if needed
$filterBuilder = new FileStructureFilterBuilder();
$filterBuilder
->isFile() // Filter to
use Marktaborosi\StorageNavigator\Adapters\FTP\FtpConnection;
use Marktaborosi\StorageNavigator\Adapters\FtpAdapter;
use Marktaborosi\StorageNavigator\Builders\FileStructureFilterBuilder;
use Marktaborosi\StorageNavigator\Renderers\Config\HtmlRendererConfig;
use Marktaborosi\StorageNavigator\Renderers\HtmlRenderer;
use Marktaborosi\StorageNavigator\StorageNavigator;
// Create an FTP adapter for connecting to the FTP server
$adapter = new FtpAdapter(new FtpConnection());
$adapter->initialize(
'test.rebex.net', // FTP server host
'demo', // Username for authentication
'password', // Password for authentication
21, // FTP server port
"/" // Initial directory path on the FTP server
);
// Configure HTML renderer settings
$config = new HtmlRendererConfig([
'date_format' => "Y-m-d H:i:s", // Set the format for displaying file timestamps
]);
// Create an HTML renderer with a custom theme and options
$renderer = new HtmlRenderer(
themePath: "basic-norton", // Set the theme path for styling
config: $config, // Pass the renderer configuration
disableNavigation: false, // Enable directory navigation
disableFileDownload: false // Allow file downloads
);
// Configure filtering options for the file structure (optional)
// Note: Additional filters can be applied using methods on $filterBuilder if needed
$filterBuilder = new FileStructureFilterBuilder();
$filterBuilder->isFile(); // Shows only files
// Initialize the StorageNavigator with the configured components
$navigator = new StorageNavigator(
adapter: $adapter, // Pass the FTP adapter
renderer: $renderer, // Pass the HTML renderer
rootPath: "", // Set the root directory to browse
filterBuilder: $filterBuilder, // Apply the configured file filter
);
// Display the file structure in the browser
$navigator->display();
use Marktaborosi\StorageNavigator\Adapters\SftpAdapter;
use Marktaborosi\StorageNavigator\Builders\FileStructureFilterBuilder;
use Marktaborosi\StorageNavigator\Renderers\Config\HtmlRendererConfig;
use Marktaborosi\StorageNavigator\Renderers\HtmlRenderer;
use Marktaborosi\StorageNavigator\StorageNavigator;
// Create an SFTP adapter for connecting to the SFTP server
$adapter = new SftpAdapter(
'test.rebex.net', // SFTP server address
'demo', // SFTP username
'password', // SFTP password
22, // SFTP port (default 22)
"" // Initial directory to browse
);
// Configure HTML renderer settings
$config = new HtmlRendererConfig([
'date_format' => "Y-m-d H:i:s", // Define the date format for displaying timestamps
]);
// Create an HTML renderer with a custom theme and options
$renderer = new HtmlRenderer(
themePath: "basic-norton", // Specify the theme path for styling
config: $config, // Apply the renderer configuration
disableNavigation: false, // Allow navigation between directories
disableFileDownload: false // Enable file downloads
);
// Configure filtering options for the file structure (optional)
// Note: Additional filters can be applied using methods on $filterBuilder if needed
$filterBuilder = new FileStructureFilterBuilder();
$filterBuilder->isFile(); // Include only files in the displayed structure
// Initialize the StorageNavigator with the configured components
$navigator = new StorageNavigator(
adapter: $adapter, // Pass the SFTP adapter
renderer: $renderer, // Pass the HTML renderer
rootPath: "", // Set the root directory to browse
filterBuilder: $filterBuilder, // Apply the configured file filter
);
// Display the file structure in the browser
$navigator->display();
use Aws\S3\S3Client;
use Marktaborosi\StorageNavigator\Adapters\S3\S3StorageAdapter;
use Marktaborosi\StorageNavigator\Builders\FileStructureFilterBuilder;
use Marktaborosi\StorageNavigator\Renderers\Config\HtmlRendererConfig;
use Marktaborosi\StorageNavigator\Renderers\HtmlRenderer;
use Marktaborosi\StorageNavigator\StorageNavigator;
y' => 'your-client-key',
'secret' => 'your-client-secret',
],
// 'use_path_style_endpoint' => true, // If MinIo is used, this is necessary
]);
// Create (You can use the S3 Adapter which works for both Google and AWS)
// You can use here GoogleCloudStorageAdapter() / AwsCloudStorageAdapter() if you want it more readable
$adapter = new S3StorageAdapter(
'test-bucket',
$s3Client
);
// Configure HTML renderer settings
$config = new HtmlRendererConfig([
'date_format' => "Y-m-d H:i:s", // Set the format for displaying timestamps
]);
// Create an HTML renderer with a custom theme and options
$renderer = new HtmlRenderer(
themePath: "basic-mac", // Set the theme path for styling
config: $config, // Pass the renderer configuration
disableNavigation: false, // Enable directory navigation
disableFileDownload: false, // Allow file downloads
);
// Configure a filter to display only files
// Note: Additional filters can be applied using methods on $filterBuilder if needed
$filterBuilder = new FileStructureFilterBuilder();
// Initialize the StorageNavigator with the configured components
$navigator = new StorageNavigator(
adapter: $adapter, // Pass the PHP native filesystem adapter
renderer: $renderer, // Pass the HTML renderer
rootPath: "", // Set the root directory to browse
filterBuilder: $filterBuilder, // Apply the configured file filter
);
// Display the file structure in the browser
$navigator->display();
use Marktaborosi\StorageNavigator\Adapters\UnifiedArchiveAdapter;
use Marktaborosi\StorageNavigator\Builders\FileStructureFilterBuilder;
use Marktaborosi\StorageNavigator\Renderers\Config\HtmlRendererConfig;
use Marktaborosi\StorageNavigator\Renderers\HtmlRenderer;
use Marktaborosi\StorageNavigator\StorageNavigator;
// Create a ZIP archive adapter to interact with the specified archive
$adapter = new UnifiedArchiveAdapter(__DIR__ . "/storage/zips/1mb-fake-sample.zip");
// Configure HTML renderer settings
$config = new HtmlRendererConfig([
'date_format' => "Y-m-d H:i:s", // Define the format for displaying timestamps
]);
// Create an HTML renderer with a custom theme and options
$renderer = new HtmlRenderer(
themePath: "basic-mac", // Specify the theme path for styling
config: $config, // Apply the renderer configuration
disableNavigation: false, // Allow directory navigation
disableFileDownload: false // Enable file downloads
);
// Configure a filter to display only files
// Note: Additional filters can be applied using methods on $filterBuilder if needed
$filterBuilder = new FileStructureFilterBuilder();
$filterBuilder
->isFile(); // Include only files in the displayed structure
// Initialize the StorageNavigator with the configured components
$navigator = new StorageNavigator(
adapter: $adapter, // Pass the archive adapter
renderer: $renderer, // Pass the HTML renderer
rootPath: "", // Set the root directory to browse
filterBuilder: $filterBuilder, // Apply the configured file filter
);
// Display the file structure in the browser
$navigator->display();
use Marktaborosi\StorageNavigator\Adapters\ZipArchiveAdapter;
use Marktaborosi\StorageNavigator\Builders\FileStructureFilterBuilder;
use Marktaborosi\StorageNavigator\Renderers\Config\HtmlRendererConfig;
use Marktaborosi\StorageNavigator\Renderers\HtmlRenderer;
use Marktaborosi\StorageNavigator\StorageNavigator;
// Create a ZIP archive adapter to interact with the specified archive
try {
$adapter = new ZipArchiveAdapter(__DIR__ . "/storage/zips/1mb-fake-sample.zip");
} catch (Exception $e) {
die($e); // Terminate execution if the ZIP archive cannot be accessed
}
// Configure HTML renderer settings
$config = new HtmlRendererConfig([
'date_format' => "Y-m-d H:i:s", // Define the format for displaying timestamps
]);
// Create an HTML renderer with a custom theme and options
$renderer = new HtmlRenderer(
themePath: "basic-mac", // Specify the theme path for styling
config: $config, // Apply the renderer configuration
disableNavigation: false, // Allow directory navigation
disableFileDownload: false // Enable file downloads
);
// Configure a filter to display only files
// Additional filters can be applied using methods on $filterBuilder if needed
$filterBuilder = new FileStructureFilterBuilder();
$filterBuilder
->isFile(); // Include only files in the displayed structure
// Initialize the StorageNavigator with the configured components
// Note: Additional filters can be applied using methods on $filterBuilder if needed
$navigator = new StorageNavigator(
adapter: $adapter, // Pass the archive adapter
renderer: $renderer, // Pass the HTML renderer
rootPath: "", // Set the root directory to browse
filterBuilder: $filterBuilder, // Apply the configured file filter
);
// Display the file structure in the browser
$navigator->display();
// Create renderer
$renderer = new \Marktaborosi\StorageNavigator\Renderers\ConsoleRenderer();
namespace YourNamespace;
use Marktaborosi\StorageNavigator\Entities\FileStructure;
use Marktaborosi\StorageNavigator\Interfaces\StorageNavigatorAdapterInterface;
class YourCustomAdapter implements StorageNavigatorAdapterInterface
{
public function fileOrDirectoryExists(string $location): bool
{
// Implement your logic here
}
public function getFileStructure(string $location): FileStructure
{
// Implement your logic here
}
public function downloadFile(string $filePath): void
{
// Implement your logic here
}
}
public function fileOrDirectoryExists(string $location): bool
{
// Example: Check existence in a cloud storage system
return $this->apiClient->exists($location);
}
public function fileOrDirectoryExists(string $location): bool
{
return file_exists($location);
}
use Marktaborosi\StorageNavigator\Builders\FileStructureBuilder;
use Marktaborosi\StorageNavigator\Entities\DirectoryAttribute;
use Marktaborosi\StorageNavigator\Entities\FileAttribute;
use Marktaborosi\StorageNavigator\Entities\FileStructure;
public function getFileStructure(string $location): FileStructure
{
$entries = scandir($location);
$structureBuilder = new FileStructureBuilder();
foreach ($entries as $entry) {
$path = $location . DIRECTORY_SEPARATOR . $entry;
if ($entry === '.' || $entry === '..') {
continue;
}
if (is_dir($path)) {
$structureBuilder->addDirectory(new DirectoryAttribute(
name: $entry,
path: $path,
lastModified: filemtime($path)
));
} else {
$structureBuilder->addFile(new FileAttribute(
directoryPath: dirname($path),
filename: $entry,
extension: pathinfo($path, PATHINFO_EXTENSION),
byteSize: filesize($path),
lastModified: filemtime($path)
));
}
}
return $structureBuilder->sortByAZ()->build();
}
namespace YourNamespace;
use Marktaborosi\StorageNavigator\Entities\FileStructure;
use Marktaborosi\StorageNavigator\Interfaces\StorageNavigatorAdapterInterface;
class CustomStorageAdapter implements StorageNavigatorAdapterInterface
{
public function fileOrDirectoryExists(string $location): bool
{
// Example logic to check existence
return true;
}
public function getFileStructure(string $location): FileStructure
{
// Example: Return an empty FileStructure
return new FileStructure([]);
}
public function downloadFile(string $filePath): void
{
// Example: Serve a static file
header('Content-Type: text/plain');
echo "File contents for {$filePath}";
}
}
namespace YourNamespace;
use Marktaborosi\StorageNavigator\Interfaces\StorageNavigatorRendererInterface;
use Marktaborosi\StorageNavigator\Interfaces\StorageNavigatorNavigationHandlerInterface;
use Marktaborosi\StorageNavigator\Renderers\Entities\RenderData;
class YourCustomRenderer implements StorageNavigatorRendererInterface
{
public function render(RenderData $data): void
{
// Implement the rendering logic here
}
public function navigationHandler(): StorageNavigatorNavigationHandlerInterface
{
// Return your custom navigation handler
}
}
public function render(RenderData $data): void
{
header('Content-Type: application/json');
echo json_encode($data->getStructure()->toArray(), JSON_PRETTY_PRINT);
}
public function navigationHandler(): StorageNavigatorNavigationHandlerInterface
{
return new NullNavigationHandler();
}
use Marktaborosi\StorageNavigator\Interfaces\StorageNavigatorNavigationHandlerInterface;
class CustomNavigationHandler implements StorageNavigatorNavigationHandlerInterface
{
public function isChangePathRequest(): bool { /* Your logic */ }
public function isDownloadFileRequest(): bool { /* Your logic */ }
public function changeToPath(): string { /* Your logic */ }
public function downloadFilePath(): string { /* Your logic */ }
}
use Marktaborosi\StorageNavigator\StorageNavigator;
use YourNamespace\YourCustomRenderer;
$renderer = new YourCustomRenderer();
$navigator = new StorageNavigator(
adapter: $yourAdapter,
renderer: $renderer,
rootPath: '/path/to/root'
);
$navigator->display();
namespace YourNamespace;
use Marktaborosi\StorageNavigator\Interfaces\StorageNavigatorRendererInterface;
use Marktaborosi\StorageNavigator\Interfaces\StorageNavigatorNavigationHandlerInterface;
use Marktaborosi\StorageNavigator\Renderers\Entities\RenderData;
use Marktaborosi\StorageNavigator\Renderers\Navigators\NullNavigationHandler;
class PlainTextRenderer implements StorageNavigatorRendererInterface
{
public function render(RenderData $data): void
{
foreach ($data->getStructure()->toArray() as $file) {
echo $file['name'] . PHP_EOL;
}
}
public function navigationHandler(): StorageNavigatorNavigationHandlerInterface
{
return new NullNavigationHandler();
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.