php: hilfe beim debuggen.
wergor 15.10.2014 - 12:38 2639 3
wergor
connoisseur de mimi
|
um meinen unikalender in meiner owncloud aktuell zu halten, benutze ich ein skript von dieser quelle: <?php
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');
$Import = array(
array(
"userid" => "mein username",
"displayname" => "TUG",
"filename" => "https://online.tugraz.at/tug_onlinej/ws/termin/ical?pStud=restvomlink"
),
);
foreach($Import AS $cal)
{
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;
}
$file = file_get_contents($cal["filename"]);
if ($file === FALSE) {
echo "Couldn't read file: ".$cal["filename"];
}
$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;
}
}
?>
der code wird mit cron alle 20min ausgefährt. leider wirft mir der code in ca 3/4 der fälle folgenden fehler: 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}
dadurch kommt es manchmal vor, dass viele der termine aus dem (owncloud) kalender gelöscht werden. ich habe schon einen kommentar auf der seite hinterlassen, der wartet aber seit fast 10 tagen auf freischaltung. weis vielleicht einer von euch wie das problem zu lösen wäre?
|
kleinerChemiker
Here to stay
|
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.
Bearbeitet von kleinerChemiker am 15.10.2014, 13:25
|
Obermotz
Fünfzylindernazi
|
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.
|
wergor
connoisseur de mimi
|
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. passiert das nur wenn beim starten des skripts schon eine doctrine-transaction läuft oder kann eine transaction auch während des importvorgangs starten? ich habe leider noch nie was mit php gemacht, könnte also länger dauern bis das gelöst ist
|