Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * AWS S3 Log and Error Uploader
- *
- * This script automatically uploads log and database error files from specific directories
- * to an AWS S3 bucket, based on their last modification time. It's designed to run on EC2 instances,
- * utilizing the instance's ID to organize files in the bucket. Only files modified more than 5 days ago
- * are uploaded and then removed locally to prevent unnecessary storage use. This script leverages the AWS SDK for PHP.
- *
- * Usage:
- * Execute this script as part of a cron job or manually to manage log and error file uploads.
- *
- * Requirements:
- * AWS SDK for PHP must be included in your project, and proper IAM permissions should be set
- * for the EC2 instance to interact with the specified S3 bucket.
- *
- * Author: RapidMod
- * Website: https://rapidmod.io/
- */
- require_once("./awsS3.php");
- $logBucket = "bucketname";
- $serverInstanceID = trim(@shell_exec('ec2metadata --instance-id'));
- $directories = [
- "./logs" => $serverInstanceID."/PHP Logs",
- "./data/db-errors" => $serverInstanceID."/DB Failures",
- ];
- foreach($directories as $directory => $s3path) {
- clearstatcache();
- $files = scandir($directory);
- if($files === FALSE) {
- // @TODO: Couldn't read local directory do something ?
- break;
- }
- foreach($files as $file) {
- if($file == ".." || $file == ".") {
- continue;
- }
- $sourceFile = $directory.DIRECTORY_SEPARATOR.$file;
- $lastModTime = filemtime($sourceFile);
- if($lastModTime <= strtotime("-5 days")) {
- try {
- $result = $awsS3->putObject([
- 'Bucket' => $logBucket,
- 'Key' => $s3path . DIRECTORY_SEPARATOR . $file,
- 'SourceFile' => $sourceFile,
- 'ContentType' => 'text/plain'
- ]);
- } catch (\Aws\S3\Exception\S3Exception $e) {
- // @TODO: couldn't put object do something?
- continue;
- }
- $resultsArray = $result->toArray();
- if (!isset($resultsArray['@metadata']) || !isset($resultsArray['@metadata']['statusCode']) || $resultsArray['@metadata']['statusCode'] != 200) {
- // @TODO: Couldn't upload to s3 do something?
- } else {
- $unlink = @unlink($sourceFile);
- if ($unlink === FALSE) {
- // @TODO: Couldn't remove file locally do something?
- }
- }
- }
- }
- }
- sleep(10);
Advertisement
Add Comment
Please, Sign In to add comment