Hallo, ich habe derzeit das selbe Verhalten mit meinem Shopware Version: 5.5.10.
Grundsätzlich funktioniert die Bildoptimierung über die Shopware-Console ohne Einschränkungen.
Im Backend unter den Systeminfos wird mir allerdings angezeigt, dass die Binaries für bspw. optipng/jpegoptim nicht ausführbar sind.
Die Lösung über das open_basedir ist zwar funktional, aber meiner Ansicht nach nicht „Best Patrice“, da manche Hoster das setzen des open_basedir aus Securitygründen nicht zulassen.
Dementsprechend habe ich mir den Quellcode des Media Optimizers angeschaut.
Ausschlaggebend für dieses Verhalten ist die Funktion: isRunnable() in der Datei: engine/Shopware/Bundle/MediaBundle/Optimizer/BinaryOptimizer.php
Hier wird folgendes für die Binary gesetzt:
$bin = $finder->find($this->getCommand(), $this->getCommand());
Aufruf des Media Opimizer per console: $bin = " /usr/local/bin/jpegoptim"
Aufruf des Media Opimizer per Systeminfo: $bin = " jpegoptim"
Im Anschluss wird dann folgendes überprüft:
$this->isRunnable = !empty($bin) && is_executable($bin);
is_executable liefert hier in meinem Fall über die Systeminfo immer FALSE zurück, weil die PHP-Funktion die PATH Umgebungsvariable nicht berücksichtigt.
Weitere Infos: PHP: is_executable - Manual
Meiner Ansicht nach müsste die Methode: isRunnable() wie folgt erweitert werden.
/**
* {@inheritdoc}
*/
public function isRunnable()
{
if ($this->isRunnable !== null) {
return $this->isRunnable;
}
$finder = new ExecutableFinder();
$bin = $finder->find($this->getCommand(), $this->getCommand());
$serverPaths = explode(PATH_SEPARATOR, getenv("PATH"));
$localPaths = explode(PATH_SEPARATOR, getenv("PATH", "local_only"));
$paths = array_merge($serverPaths, $localPaths);
foreach ($paths as $path) {
if (!empty($bin) && is_executable($path . DIRECTORY_SEPARATOR . $bin ) || !empty($bin) && is_executable($bin)) {
$this->isRunnable = true;
}
}
return $this->isRunnable;
}