Seit vielen Jahren betreibe ich eine NC bei www.all-inkl.com im Shared-Hosting-Tarif. Keinerlei Zugriff auf irgendeine Befehlszeile.
Bisher war ich OCCWeb immer sehr dankbar, dass ich das Problem damit umgehen konnte.
Dummerweise habe ich vor kurzem - ohne vorher nachzudenken - doch tatsächlich auf NC V30.0.1 upgedatet. Seither bin ich aufgeschmissen und kann keine der empfohlenen DB-Eingriffe mehr vornehmen.
Im englischen Forum fand ich unter https://help.nextcloud.com/t/occ-web-doesnt-work-in-nextcloud-30-0-0/206139 eine angebliche Lösung:
"For version 30 change apps/occweb/lib/Controller/OccController.php with the following code…
<?php
namespace OCA\OCCWeb\Controller;
use Exception;
use OC;
use OC\Console\Application;
use OC\MemoryInfo;
use OCP\IRequest;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Controller;
use OCP\ILogger;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\Console\Output\OutputInterface;
use Psr\Log\LoggerInterface;
class OccController extends Controller
{
private $logger;
private $userId;
private $application;
private $symphonyApplication;
private $output;
public function __construct(ILogger $logger, $AppName, IRequest $request, $userId)
{
parent::__construct($AppName, $request);
$this->logger = $logger;
$this->userId = $userId;
// Obtendo o IAppManager como sexto argumento
$this->application = new Application(
OC::$server->getConfig(),
OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class),
new FakeRequest(),
OC::$server->get(LoggerInterface::class),
OC::$server->query(MemoryInfo::class),
OC::$server->get(\OCP\App\IAppManager::class) // Obtenção do IAppManager
);
$this->application->setAutoExit(false);
$this->output = new OccOutput(OutputInterface::VERBOSITY_NORMAL, true);
$this->application->loadCommands(new StringInput(""), $this->output);
$reflectionProperty = new \ReflectionProperty(Application::class, 'application');
$reflectionProperty->setAccessible(true);
$this->symphonyApplication = $reflectionProperty->getValue($this->application);
}
/**
* @NoCSRFRequired
*/
public function index()
{
return new TemplateResponse('occweb', 'index');
}
/**
* @param $input
* @return string
*/
private function run($input)
{
try {
$this->application->run($input, $this->output);
return $this->output->fetch();
} catch (Exception $ex) {
$this->logger->logException($ex);
return "error: " . $ex->getMessage();
}
}
/**
* @param string $command
* @return DataResponse
*/
public function cmd($command)
{
$this->logger->debug($command);
$input = new StringInput($command);
$response = $this->run($input);
$this->logger->debug($response);
return new DataResponse($response);
}
public function list() {
$defs = $this->symphonyApplication->all();
$cmds = array();
foreach ($defs as $d) {
array_push($cmds, $d->getName());
}
return new DataResponse($cmds);
}
}
Dort hat er angeblich funktioniert. Wenn ich die OccController.php mit o. g. Code überschreibe, erhalte ich aber nur eine leere weiße Seite.
Immerhin schon mal besser als der bisherige
Interner Serverfehler
Der Server konnte die Anfrage nicht fertig stellen.
[…blablabla]
Auszug aus phpinfo.php:
- Linux dd17526 6.5.0-45-generic #45~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Jul 15 16:40:02 UTC 2 x86_64
- PHP 8.3
- DB: mysql 8.3.14
Meine Fragen:
Hat jemand hier eine Idee, was am o. g. Code noch nicht korrekt sein könnte?
Oder noch besser: Gibt es die Chance, dass sich irgendein NC-Crack der OCCWeb App annimmt und das Ding auch für V30+ weiterentwickelt?
Wenn nicht, dann bin ich am Ende meiner Kunst und muss ab jetzt auf all das verzichten, was mir bisher OCCWeb ermöglicht hat.
Wäre ich doch bloß bei Version 28+ geblieben und hätte ich doch bloß auf alle weiteren Updates verzichtet! Ein Zurück in die gute alte NC-Zeit gibt’s ja wohl leider nicht mehr
Mit vorweihnachtlichen Grüßen
Kallle