1. Go to this page and download the library: Download farisc0de/phpfileuploading 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/ */
farisc0de / phpfileuploading example snippets
use Farisc0de\PhpFileUploading\Upload;
use Farisc0de\PhpFileUploading\File;
use Farisc0de\PhpFileUploading\Utility;
$upload = new Upload(new Utility());
$upload->setUploadFolder([
'folder_name' => 'uploads',
'folder_path' => realpath('uploads')
]);
$upload->enableProtection();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$file = new File($_FILES['file'], new Utility());
$upload->setUpload($file);
if ($upload->checkIfNotEmpty() &&
$upload->checkExtension() &&
$upload->checkMime() &&
$upload->checkSize()) {
$upload->hashName(); // Generate secure filename
$upload->upload();
echo "File uploaded successfully!";
}
}
use Farisc0de\PhpFileUploading\File;
use Farisc0de\PhpFileUploading\Utility;
use Farisc0de\PhpFileUploading\Validation\ValidationChain;
use Farisc0de\PhpFileUploading\Validation\Validators\ExtensionValidator;
use Farisc0de\PhpFileUploading\Validation\Validators\MimeTypeValidator;
use Farisc0de\PhpFileUploading\Validation\Validators\SizeValidator;
use Farisc0de\PhpFileUploading\Validation\Validators\FilenameValidator;
$file = new File($_FILES['file'], new Utility());
$validator = new ValidationChain();
$validator
->addValidator(new ExtensionValidator(['jpg', 'png', 'gif', 'pdf']))
->addValidator(new MimeTypeValidator([
'image/jpeg', 'image/png', 'image/gif', 'application/pdf'
]))
->addValidator(new SizeValidator(null, '10 MB'))
->addValidator(new FilenameValidator(['shell.php', 'backdoor.php']));
$result = $validator->validate($file);
if ($result->isValid()) {
// Proceed with upload
} else {
// Handle errors
foreach ($result->getErrors() as $error) {
echo $error->getMessage() . "\n";
}
}
use Farisc0de\PhpFileUploading\RateLimiting\FileRateLimiter;
// Allow 10 uploads per minute per IP
$limiter = new FileRateLimiter('/path/to/rate-limit-storage', 10, 60);
$clientIp = $_SERVER['REMOTE_ADDR'];
$result = $limiter->check($clientIp);
if (!$result->isAllowed()) {
http_response_code(429);
header('Retry-After: ' . $result->getRetryAfter());
die('Rate limit exceeded. Try again later.');
}
// Proceed with upload...
use Farisc0de\PhpFileUploading\Security\ClamAvScanner;
$scanner = new ClamAvScanner(
socketPath: '/var/run/clamav/clamd.sock'
);
if ($scanner->isAvailable()) {
$result = $scanner->scan($file->getTempName());
if ($result->isInfected()) {
die('Virus detected: ' . $result->getVirusName());
}
}
use Farisc0de\PhpFileUploading\Events\EventDispatcher;
use Farisc0de\PhpFileUploading\Events\UploadEvents;
use Farisc0de\PhpFileUploading\Events\FileEvent;
$dispatcher = new EventDispatcher();
// Log all uploads
$dispatcher->addListener(UploadEvents::AFTER_UPLOAD, function (FileEvent $event) {
$logger->info('File uploaded: ' . $event->getFilename());
});
// Block certain file types
$dispatcher->addListener(UploadEvents::BEFORE_VALIDATION, function (FileEvent $event) {
$file = $event->getFile();
if (str_ends_with($file->getName(), '.exe')) {
$event->stopPropagation();
throw new \Exception('EXE files are not allowed');
}
});
use Farisc0de\PhpFileUploading\Storage\LocalStorage;
use Farisc0de\PhpFileUploading\Storage\StorageManager;
// Single disk
$storage = new LocalStorage('/var/www/uploads', 0755, 0644, 'https://example.com/uploads');
$storage->write('path/to/file.jpg', $contents);
$url = $storage->publicUrl('path/to/file.jpg');
// Multiple disks
$manager = new StorageManager();
$manager->createLocalDisk('uploads', '/var/www/uploads', 'https://example.com/uploads');
$manager->createLocalDisk('temp', '/tmp/uploads');
$manager->disk('uploads')->write('file.jpg', $contents);
use Farisc0de\PhpFileUploading\Logging\FileLogger;
use Farisc0de\PhpFileUploading\Logging\LogLevel;
$logger = new FileLogger('/var/log/uploads.log', LogLevel::INFO);
$upload->setLogger($logger);
$validator->setLogger($logger);