URL: https://www.overclockers.at/coding-stuff/php-hilfe-beim-debuggen_240739/page_1 - zur Vollversion wechseln!
um meinen unikalender in meiner owncloud aktuell zu halten, benutze ich ein skript von dieser quelle:
Code: PHP<?php //Hier den Pfad zur Owncloud-Installation einfügen define('OWNCLOUD_DIR', '/var/www/html/owncloud'); require_once(OWNCLOUD_DIR . '/lib/base.php'); require_once(OWNCLOUD_DIR . '/apps/calendar/lib/import.php'); require_once(OWNCLOUD_DIR . '/apps/calendar/lib/object.php'); require_once(OWNCLOUD_DIR . '/apps/calendar/lib/calendar.php'); require_once(OWNCLOUD_DIR . '/apps/calendar/lib/app.php'); /* * Hier die verschiedenen zu importierenden Feeds eintragen * userid: Der Benutzername auf dessen Konto der Kalender importiert werden soll * displayname: Der Name des Kalenders in der Owncloud (muss vorher angelegt werden) * filename: Die URL zum ICAL-Feed */ $Import = array( //TUG Kalender array( "userid" => "mein username", "displayname" => "TUG", "filename" => "https://online.tugraz.at/tug_onlinej/ws/termin/ical?pStud=restvomlink" ), ); foreach($Import AS $cal) { //Nachsehen ob der Kalender auf der Owncloud auch existiert try { $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*clndr_calendars` WHERE `userid` = ? AND `displayname` = ?' ); $result = $stmt->execute(array($cal["userid"], $cal["displayname"])); $row = $result->fetchRow(); $calendar_id = $row['id']; if (!$calendar_id) { echo "No calendar for userid " . $cal["userid"] . " with displayname '" . $cal["displayname"] . "'"; } } catch (Exception $e) { echo "DB exception: " . $e; } // Daten aus dem Feed laden $file = file_get_contents($cal["filename"]); if ($file === FALSE) { echo "Couldn't read file: ".$cal["filename"]; } //Import durchführen $import = new OC_Calendar_Import($file); $import->setUserID($cal["userid"]); $import->setTimeZone(OC_Calendar_App::$tz); $import->setCalendarID($calendar_id); $import->setOverwrite(true); OC_User::setUserId($cal["userid"]); try { $import->import(); $count = $import->getCount(); echo "Imported ".$count." objects in Calendar ".$cal["displayname"]."(".$cal["userid"].")\n"; } catch (Exception $e) { echo "Import failed: " . $e; } } ?>
Code:Import failed: exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 5 database is locked' in /var/www/html/owncloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Statement.php:138 Stack trace: #0 /var/www/html/owncloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Statement.php(138): PDOStatement->execute(Array) #1 /var/www/html/owncloud/lib/private/db/statementwrapper.php(63): Doctrine\DBAL\Statement->execute(Array) #2 /var/www/html/owncloud/apps/calendar/lib/object.php(285): OC_DB_StatementWrapper->execute(Array) #3 /var/www/html/owncloud/apps/calendar/lib/import.php(119): OC_Calendar_Object::delete('287') #4 /storage/owncloud/icalFeedImport.php(60): OC_Calendar_Import->import() #5 {main} Next exception 'Doctrine\DBAL\DBALException' with message 'An exception occurred while executing 'DELETE FROM "oc_clndr_objects" WHERE "id" = ?': SQLSTATE[HY000]: General error: 5 database is locked' in /var/www/html/owncloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:47 Stack trace: #0 /var/www/html/owncloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Statement.php(140): Doctrine\DBAL\DBALException::driverExceptionDuringQuery(Object(PDOException), 'DELETE FROM "oc...', Array) #1 /var/www/html/owncloud/lib/private/db/statementwrapper.php(63): Doctrine\DBAL\Statement->execute(Array) #2 /var/www/html/owncloud/apps/calendar/lib/object.php(285): OC_DB_StatementWrapper->execute(Array) #3 /var/www/html/owncloud/apps/calendar/lib/import.php(119): OC_Calendar_Object::delete('287') #4 /storage/owncloud/icalFeedImport.php(60): OC_Calendar_Import->import() #5 {main}
Welche DB? Für mich klingt das nach einem DB-Problem.
edit: Google bietet viele Hits, wenn man nach dem Fehler (SQLSTATE[HY000]: General error: 5 database is locked) sucht.
Das liegt daran, dass gerade eine Doctrine-Transaction offen ist.
Am einfachsten wird es sein, den Doctrine-Querybuilder einzubinden und die Statements dann über diesen (mit Transaktion) laufen zu lassen.
danke für den tipp.Zitat von ObermotzDas liegt daran, dass gerade eine Doctrine-Transaction offen ist.
Am einfachsten wird es sein, den Doctrine-Querybuilder einzubinden und die Statements dann über diesen (mit Transaktion) laufen zu lassen.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026