: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* elFinder Plugin AutoRotate
* Auto rotation on file upload of JPEG file by EXIF Orientation.
* ex. binding, configure on connector options
* 'upload.presave' => array(
* 'Plugin.AutoRotate.onUpLoadPreSave'
* // global configure (optional)
* 'enable' => true, // For control by volume driver
* 'quality' => 95, // JPEG image save quality
* 'offDropWith' => null, // Enabled by default. To disable it if it is dropped with pressing the meta key
* // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
* // In case of using any key, specify it as an array
* 'onDropWith' => null // Disabled by default. To enable it if it is dropped with pressing the meta key
* // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
* // In case of using any key, specify it as an array
* // each volume configure (optional)
* 'driver' => 'LocalFileSystem',
* 'path' => '/path/to/files/',
* 'URL' => 'http://localhost/to/files/'
* 'enable' => true, // For control by volume driver
* 'quality' => 95, // JPEG image save quality
* 'offDropWith' => null, // Enabled by default. To disable it if it is dropped with pressing the meta key
* // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
* // In case of using any key, specify it as an array
* 'onDropWith' => null // Disabled by default. To enable it if it is dropped with pressing the meta key
* // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
* // In case of using any key, specify it as an array
class elFinderPluginAutoRotate extends elFinderPlugin
public function __construct($opts)
'enable' => true, // For control by volume driver
'quality' => 95, // JPEG image save quality
'offDropWith' => null, // To disable it if it is dropped with pressing the meta key
// Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
// In case of using any key, specify it as an array
'disableWithContentSaveId' => true // Disable on URL upload with post data "contentSaveId"
$this->opts = array_merge($defaults, $opts);
public function onUpLoadPreSave(&$thash, &$name, $src, $elfinder, $volume)
$opts = $this->getCurrentOpts($volume);
if (!$this->iaEnabled($opts, $elfinder)) {
if (extension_loaded('fileinfo') && function_exists('mime_content_type')) {
$mime = mime_content_type($src);
if (substr($mime, 0, 5) !== 'image') {
if (extension_loaded('exif') && function_exists('exif_imagetype')) {
$imageType = exif_imagetype($src);
if ($imageType === false) {
$srcImgInfo = getimagesize($src);
if ($srcImgInfo === false) {
$imageType = $srcImgInfo[2];
// check target image type
if ($imageType !== IMAGETYPE_JPEG) {
$srcImgInfo = getimagesize($src);
return $this->rotate($volume, $src, $srcImgInfo, $opts['quality']);
private function rotate($volume, $src, $srcImgInfo, $quality)
if (!function_exists('exif_read_data')) {
$errlev =error_reporting();
error_reporting($errlev ^ E_WARNING);
$exif = exif_read_data($src);
error_reporting($errlev);
if ($exif && !empty($exif['Orientation'])) {
switch ($exif['Orientation']) {
'jpgQuality' => $quality,
return $volume->imageUtil('rotate', $src, $opts);