✅ Fixed bulk conversion getting stuck on missing files ✅ Added robust error handling and timeout protection ✅ Improved JavaScript response parsing ✅ Added file existence validation ✅ Fixed missing PHP class imports ✅ Added comprehensive try-catch error recovery 🔧 Key fixes: - File existence checks before conversion attempts - 30-second timeout protection per file - Graceful handling of 500 errors and JSON parsing issues - Automatic continuation to next file on failures - Cache busting for JavaScript updates 🎯 Result: Bulk conversion now completes successfully even with missing files 🚀 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
91 lines
2.5 KiB
PHP
91 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace WebPExpress;
|
|
|
|
use \WebPExpress\Config;
|
|
use \WebPExpress\Convert;
|
|
use \WebPExpress\Mime;
|
|
use \WebPExpress\SanityCheck;
|
|
use \WebPExpress\SanityException;
|
|
|
|
class HandleUploadHooks
|
|
{
|
|
|
|
private static $config;
|
|
|
|
/**
|
|
* Convert if:
|
|
* - Option has been enabled
|
|
* - We are not in "No conversion" mode
|
|
* - The mime type is one of the ones the user has activated (in config)
|
|
*/
|
|
private static function convertIf($filename)
|
|
{
|
|
if (!isset(self::$config)) {
|
|
self::$config = Config::loadConfigAndFix();
|
|
}
|
|
|
|
$config = &self::$config;
|
|
|
|
if (!$config['convert-on-upload']) {
|
|
return;
|
|
}
|
|
if ($config['operation-mode'] == 'no-conversion') {
|
|
return;
|
|
}
|
|
|
|
//$mimeType = getimagesize($filename)['mime'];
|
|
|
|
$allowedMimeTypes = [];
|
|
$imageTypes = $config['image-types'];
|
|
if ($imageTypes & 1) {
|
|
$allowedMimeTypes[] = 'image/jpeg';
|
|
$allowedMimeTypes[] = 'image/jpg'; /* don't think "image/jpg" is necessary, but just in case */
|
|
}
|
|
if ($imageTypes & 2) {
|
|
$allowedMimeTypes[] = 'image/png';
|
|
}
|
|
|
|
if (!in_array(Mime::getMimeTypeOfMedia($filename), $allowedMimeTypes)) {
|
|
return;
|
|
}
|
|
|
|
Convert::convertFile($filename, $config);
|
|
|
|
}
|
|
|
|
/**
|
|
* hook: handle_upload
|
|
* $filename is ie "/var/www/webp-express-tests/we0/wordpress/uploads-moved/image4-10-150x150.jpg"
|
|
*/
|
|
public static function handleUpload($filearray, $overrides = false, $ignore = false)
|
|
{
|
|
if (isset($filearray['file'])) {
|
|
try {
|
|
$filename = SanityCheck::absPathExistsAndIsFileInDocRoot($filearray['file']);
|
|
self::convertIf($filename);
|
|
} catch (SanityException $e) {
|
|
// fail silently. (maybe we should write to debug log instead?)
|
|
}
|
|
}
|
|
return $filearray;
|
|
}
|
|
|
|
/**
|
|
* hook: image_make_intermediate_size
|
|
* $filename is ie "/var/www/webp-express-tests/we0/wordpress/uploads-moved/image4-10-150x150.jpg"
|
|
*/
|
|
public static function handleMakeIntermediateSize($filename)
|
|
{
|
|
if (!is_null($filename)) {
|
|
try {
|
|
$filenameToConvert = SanityCheck::absPathExistsAndIsFileInDocRoot($filename);
|
|
self::convertIf($filenameToConvert);
|
|
} catch (SanityException $e) {
|
|
// fail silently. (maybe we should write to debug log instead?)
|
|
}
|
|
}
|
|
return $filename;
|
|
}
|
|
}
|