Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions core/Support/Storage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

namespace Core\Support;

class Storage
{
protected static $baseDir = __DIR__ . '/../../storage/uploads';

/**
* Save uploaded file
* @param array $file The $_FILES['your_input'] array
* @param string $subdir Optional subdirectory (e.g. 'profilepic')
* @param string|false The relative path to the saved file, or false on error
*/
public static function put($file, $subdir = '')
{
if (!isset($file['tmp_name']) || !is_uploaded_file($file['tmp_name'])) {
return false;
}

$dir = rtrim(self::$baseDir . '/' . trim($subdir, '/'), '/');
if (!is_dir($dir)) {
mkdir($dir, 0777, true);
}

$filename = uniqid() . '_' . preg_replace('/[^a-zA-Z0-9._-]/', '_', $file['name']);
$target = $dir . '/' . $filename;

if (move_uploaded_file($file['tmp_name'], $target)) {
// Return relative path for storage
return 'uploads' . ($subdir ? '/' . trim($subdir, '/') : '') . '/' . $filename;
}

return false;
}

/**
* Get the full path to a stored file
*/
public static function path($relative)
{
return self::$baseDir . '/' . ltrim($relative, '/');
}

/**
* Get a public URL for a stored file (assuming /storage is web-accessible/storage is web-accessible)
*/
public static function url($relative)
{
return '/storage/' . ltrim($relative, '/');
}
}