Compare commits

..

No commits in common. "780ea18f5bf189320aea840ac4de5247dd270be8" and "48265f6d1b494b2734449dc56224466e2d6da9a4" have entirely different histories.

3 changed files with 27 additions and 85 deletions

@ -3,43 +3,27 @@ events {
}
http {
# Log format
log_format main '[$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /dev/stdout;
error_log /dev/stdout;
access_log /dev/stdout main; # Log access to stdout
error_log /dev/stdout; # Log errors to stdout
include mime.types; # Include the mime types file
default_type application/octet-stream; # Default type
sendfile on; # Send files directly from disk
keepalive_timeout 15; # Keep connections alive for 15 seconds
types_hash_max_size 4096; # Max number of mime types
# TCP optimizations
tcp_nopush on; # Send headers in one packet
tcp_nodelay on; # Don't wait for packets to be full
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 15;
types_hash_max_size 4096;
server {
server_name _; # Listen on all hostnames
listen 80; # Listen on port 80
server_name _;
listen 80;
root /var/www/html; # Serve files from /var/www/html
index index.html index.htm; # Serve index.html and index.htm by default
# Gzip
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 8;
gzip_buffers 16 64k;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
root /var/www/html;
index index.html index.htm;
client_max_body_size 500M; # Will get replaced by the environment variable MAX_UPLOAD_SIZE
# Upload endpoint
location /upload.php {
try_files $uri =404;
@ -51,15 +35,9 @@ http {
include fastcgi_params;
}
# Serve your files
location / {
expires 7d;
open_file_cache max=1000 inactive=60s;
open_file_cache_valid 60s;
open_file_cache_min_uses 1;
open_file_cache_errors on;
# Serve the file directly from disk
try_files $uri $uri/ =404;
}

@ -26,15 +26,8 @@ sed -i "s/^post_max_size = .*/post_max_size = ${MAX_UPLOAD_SIZE}/" /etc/php/8.1/
# Set max upload size for nginx
sed -i "s/client_max_body_size 500M;/client_max_body_size ${MAX_UPLOAD_SIZE};/" /etc/nginx/nginx.conf
function start() {
echo "Starting PHP & Nginx"
/etc/init.d/php8.1-fpm start &&
chmod 777 /run/php/php8.1-fpm.sock &&
nginx -g 'daemon off;'
}
# Start Nginx and retry if it fails
until start; do
echo "Nginx failed to start, retrying in 5 seconds..."
sleep 5
done
# Start Nginx
echo "Starting PHP & Nginx"
/etc/init.d/php8.1-fpm start &&
chmod 777 /run/php/php8.1-fpm.sock &&
nginx -g 'daemon off;'

@ -3,7 +3,6 @@
/**
* DO NOT TOUCH!!!!!!!!
*/
$SCRIPT_VERSION = "0.1.0"; // The version of the script
$before = microtime(true); // Start time of the script
$defaultSecretKey = "set me"; // The default secret key
header('Content-type:application/json;charset=utf-8'); // Set the response content type to JSON
@ -81,38 +80,19 @@ function returnJson($data): void
die();
}
/**
* Log to nginx
*/
function logToNginx($message): void
{
error_log($message);
}
try {
$secret = isset($_POST['secret']) ? $_POST['secret'] : null; // The secret key
$file = isset($_FILES['sharex']) ? $_FILES['sharex'] : null; // The uploaded file
// Page to show if someone visits the upload script
if ($secret == null && $file == null) {
returnJson(array(
'status' => 'OK',
'url' => 'Welcome to the ShareX PHP Uploader! v' . $SCRIPT_VERSION,
// Remove this if you don't want to show the support URL
'support' => "For support, visit - https://git.fascinated.cc/Fascinated/sharex-php-uploader",
'timeTaken' => getTimeTaken()
));
die();
}
$secret = $_POST['secret']; // The secret key
$file = $_FILES['sharex']; // The uploaded file
// Check if the token is valid
if (!checkSecret($secret)) {
returnJson(array(
'status' => 'ERROR',
'url' => 'Invalid or missing upload secret',
// Remove this if you don't want to show the support URL
'support' => "For support, visit - https://git.fascinated.cc/Fascinated/sharex-php-uploader",
'timeTaken' => getTimeTaken()
));
logToNginx("An upload was attempted with an invalid secret key: " . $secret);
die();
}
@ -123,7 +103,6 @@ try {
'url' => 'You need to set your upload secret in the configuration section of the upload.php file',
'timeTaken' => getTimeTaken()
));
logToNginx("An upload was attempted with the default secret key");
die();
}
@ -134,26 +113,23 @@ try {
'url' => 'No file was uploaded',
'timeTaken' => getTimeTaken()
));
logToNginx("An upload was attempted without providing a file");
die();
}
$originalFileName = preg_replace("/[^A-Za-z0-9_.]/", '', $_FILES["sharex"]["name"]); // Remove unwanted characters
$fileType = pathinfo($originalFileName, PATHINFO_EXTENSION); // File extension (e.g. png, jpg, etc.)
$fileSize = $_FILES["sharex"]["size"]; // File size in bytes
$target_file = preg_replace("/[^A-Za-z0-9_.]/", '', $_FILES["sharex"]["name"]); // Remove unwanted characters
$fileType = pathinfo($target_file, PATHINFO_EXTENSION); // File extension (e.g. png, jpg, etc.)
// Check if the file already exists
if (file_exists($uploadDir . $originalFileName)) {
if (file_exists($uploadDir . $target_file)) {
returnJson(array(
'status' => 'ERROR',
'url' => 'File already exists',
'timeTaken' => getTimeTaken()
));
logToNginx("An upload was attempted with a file that already exists: " . $originalFileName);
die();
}
$finalName = $originalFileName; // The final name of the file
$finalName = $target_file; // The final name of the file
if ($useRandomFileNames) { // Generate a random file name if enabled
$finalName = generateRandomString($fileNameLength) . "." . $fileType;
}
@ -179,8 +155,6 @@ try {
$image->clear();
$image->destroy();
$fileSize = filesize($webp_file); // Update the file size
// Update the final filename
$finalName = $webp_file;
$needsToBeSaved = false;
@ -195,7 +169,6 @@ try {
'url' => 'Failed to save file. Check the permissions of the upload directory.',
'timeTaken' => getTimeTaken()
));
logToNginx("An upload was attempted but the file could not be saved: " . $finalName);
die();
}
}
@ -204,7 +177,6 @@ try {
'url' => $finalName,
'timeTaken' => getTimeTaken()
));
logToNginx("An upload was successful. original id: $originalFileName, final id: $finalName, size: $fileSize");
die();
} catch (Exception $e) { // Handle any errors
returnJson(array(
@ -212,6 +184,5 @@ try {
'url' => $e->getMessage(),
'timeTaken' => getTimeTaken()
));
logToNginx("An upload was attempted but an error occurred: " . $e->getMessage());
die();
}