WebP Express CloudHost.es Fix v0.25.9-cloudhost
✅ 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>
This commit is contained in:
204
lib/migrate/migrate9.php
Normal file
204
lib/migrate/migrate9.php
Normal file
@@ -0,0 +1,204 @@
|
||||
<?php
|
||||
|
||||
namespace WebPExpress;
|
||||
|
||||
use \WebPExpress\Config;
|
||||
use \WebPExpress\ConvertersHelper;
|
||||
use \WebPExpress\DismissableMessages;
|
||||
use \WebPExpress\Messenger;
|
||||
use \WebPExpress\Option;
|
||||
use \WebPExpress\Paths;
|
||||
|
||||
/**
|
||||
* Move a converter to the top
|
||||
* @return boolean
|
||||
*/
|
||||
function webpexpress_migrate9_moveConverterToTop(&$config, $converterId) {
|
||||
|
||||
if (!isset($config['converters'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!is_array($config['converters'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// find index of vips
|
||||
$indexOfVips = -1;
|
||||
$vips = null;
|
||||
foreach ($config['converters'] as $i => $c) {
|
||||
if ($c['converter'] == $converterId) {
|
||||
$indexOfVips = $i;
|
||||
$vips = $c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($indexOfVips > 0) {
|
||||
// remove vips found
|
||||
array_splice($config['converters'], $indexOfVips, 1);
|
||||
|
||||
// Insert vips at the top
|
||||
array_unshift($config['converters'], $vips);
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function webpexpress_migrate9() {
|
||||
|
||||
$config = Config::loadConfigAndFix(false); // false, because we do not need to test if quality detection is working
|
||||
$converters = &$config['converters'];
|
||||
if (is_array($converters)) {
|
||||
|
||||
|
||||
foreach ($converters as $i => $converter) {
|
||||
if (!isset($converter['converter'])) {
|
||||
continue;
|
||||
}
|
||||
if ($converter['converter'] == 'gmagickbinary') {
|
||||
$converters[$i]['converter'] = 'graphicsmagick';
|
||||
}
|
||||
if ($converter['converter'] == 'imagickbinary') {
|
||||
$converters[$i]['converter'] = 'imagemagick';
|
||||
}
|
||||
}
|
||||
|
||||
// Change specific converter options
|
||||
foreach ($converters as &$converter) {
|
||||
if (!isset($converter['converter'])) {
|
||||
continue;
|
||||
}
|
||||
if (!isset($converter['options'])) {
|
||||
// #273
|
||||
$converter['options'] = [];
|
||||
continue;
|
||||
}
|
||||
$options = &$converter['options'];
|
||||
|
||||
switch ($converter['converter']) {
|
||||
case 'gd':
|
||||
if (isset($options['skip-pngs'])) {
|
||||
$options['png'] = [
|
||||
'skip' => $options['skip-pngs']
|
||||
];
|
||||
unset($options['skip-pngs']);
|
||||
}
|
||||
break;
|
||||
case 'wpc':
|
||||
if (isset($options['url'])) {
|
||||
$options['api-url'] = $options['url'];
|
||||
unset($options['url']);
|
||||
}
|
||||
break;
|
||||
case 'ewww':
|
||||
if (isset($options['key'])) {
|
||||
$options['api-key'] = $options['key'];
|
||||
unset($options['key']);
|
||||
}
|
||||
if (isset($options['key-2'])) {
|
||||
$options['api-key-2'] = $options['key-2'];
|
||||
unset($options['key-2']);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$firstActiveAndWorkingConverterId = ConvertersHelper::getFirstWorkingAndActiveConverterId($config);
|
||||
|
||||
// If it aint cwebp, move vips to the top!
|
||||
if ($firstActiveAndWorkingConverterId != 'cwebp') {
|
||||
$vips = webpexpress_migrate9_moveConverterToTop($config, 'vips');
|
||||
}
|
||||
|
||||
/*
|
||||
if ($config['image-types'] == 1) {
|
||||
Messenger::addStickyMessage(
|
||||
'info',
|
||||
'WebP Express 0.14 handles PNG to WebP conversions quite well. Perhaps it is time to enable PNGs? ' .
|
||||
'Go to the <a href="' . Paths::getSettingsUrl() . '">options</a> page to change the "Image types to work on" option.',
|
||||
2,
|
||||
'Got it!'
|
||||
);
|
||||
}*/
|
||||
|
||||
if ($config['image-types'] == 1) {
|
||||
DismissableMessages::addDismissableMessage('0.14.0/suggest-enable-pngs');
|
||||
}
|
||||
DismissableMessages::addDismissableMessage('0.14.0/suggest-wipe-because-lossless');
|
||||
DismissableMessages::addDismissableMessage('0.14.0/say-hello-to-vips');
|
||||
|
||||
/*
|
||||
$convertersSupportingEncodingAuto = ['cwebp', 'vips', 'imagick', 'imagemagick', 'gmagick', 'graphicsmagick'];
|
||||
|
||||
if (in_array($firstActiveAndWorkingConverterId, $convertersSupportingEncodingAuto)) {
|
||||
Messenger::addStickyMessage(
|
||||
'info',
|
||||
'WebP Express 0.14 has new options for the conversions. Especially, it can now produce lossless webps, and ' .
|
||||
'it can automatically try both lossy and lossless and select the smallest. You can play around with the ' .
|
||||
'new options when your click "test" next to a converter. Once satisfied, dont forget to ' .
|
||||
'wipe your existing converted files (there is a "Delete converted files" button for that on the ' .
|
||||
'<a href="' . Paths::getSettingsUrl() . '">options page</a>)',
|
||||
1,
|
||||
'Got it!'
|
||||
);
|
||||
} else {
|
||||
//error_log('working converters: ' . print_r(ConvertersHelper::getWorkingConverterIds($config), true));
|
||||
$workingIds = ConvertersHelper::getWorkingConverterIds($config);
|
||||
|
||||
if ($firstActiveAndWorkingConverterId == 'gd') {
|
||||
foreach ($workingIds as $workingId) {
|
||||
if (in_array($workingId, $convertersSupportingEncodingAuto)) {
|
||||
Messenger::addStickyMessage(
|
||||
'info',
|
||||
'WebP Express 0.14 has new options for the conversions. Especially, it can now produce lossless webps, and ' .
|
||||
'it can automatically try both lossy and lossless and select the smallest. You can play around with the ' .
|
||||
'new options when your click "test" next to a converter. Once satisfied, dont forget to ' .
|
||||
'wipe your existing converted files (there is a "Delete converted files" button for that on the ' .
|
||||
'<a href="' . Paths::getSettingsUrl() . '">options page</a>). ' .
|
||||
'<br><br>Btw: The "gd" conversion method that you are using does not support lossless encoding ' .
|
||||
'(in fact Gd only supports very few conversion options), but fortunately, you have the ' .
|
||||
'"' . $workingId . '" conversion method working, so you can simply start using that instead.',
|
||||
1,
|
||||
'Got it!'
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// #235
|
||||
$config['cache-control-custom'] = preg_replace('#max-age:#', 'max-age=', $config['cache-control-custom']);
|
||||
|
||||
// #272
|
||||
if ($config['fail'] == 'report-as-image') {
|
||||
$config['fail'] = 'report';
|
||||
}
|
||||
|
||||
// Force htaccess ?
|
||||
$forceHtaccessRegeneration = $config['redirect-to-existing-in-htaccess'];
|
||||
|
||||
// Save both configs and perhaps also htaccess
|
||||
$result = Config::saveConfigurationAndHTAccess($config, $forceHtaccessRegeneration);
|
||||
|
||||
if ($result['saved-both-config']) {
|
||||
Messenger::addMessage(
|
||||
'info',
|
||||
'Successfully migrated <i>WebP Express</i> options for 0.14. '
|
||||
);
|
||||
Option::updateOption('webp-express-migration-version', '9');
|
||||
|
||||
} else {
|
||||
Messenger::addMessage(
|
||||
'error',
|
||||
'Failed migrating webp express options to 0.14+. Probably you need to grant write permissions in your wp-content folder.'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
webpexpress_migrate9();
|
||||
Reference in New Issue
Block a user