Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 01. September 2017 09:39

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 876

Formbuilder "Datei konnte nicht gesperrt werden"

Hallo allerseits,

CMSMS 2.2.3.1
FB: 0.8.1.6
PHP 5.6.30-0+deb8u1
Server-Version: 10.0.30-MariaDB-0+deb8u2 - (Debian)

Beim Versuch, Formularergebnisse in eine Datei zu schreiben, kommt es - unabhängig vom Dateityp - zu folgener Fehlermeldung:

Fehler: Datei konnte nicht gesperrt werden.
bzw:
Error. Unable to obtain lock for file.

Debug sagt zigfach:

You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

Nun bin ich mit der SQL-Syntax nicht so recht bewandert. Die Englische Übersetzung der Fehlermeldung brachte mich auf diesen älteren Thread der org-Seite, in dem die Userin das Problem selbst lösen konnte:

https://forum.cmsmadesimple.org/viewtopic.php?t=28727

Zitat: "I had bad data in my cms_module_fb_flock table and once I cleared that out it worked just fine"

Ich habe die betreffende Tabelle mal mit einer funktionierenden, älteren Installation verglichen. Mir fällt da ehrlich gesagt nichts auf. Was könnten denn bad data sein in diesem Falle?

Offline

#2 01. September 2017 17:19

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: Formbuilder "Datei konnte nicht gesperrt werden"

Wenn ich das richtig verstehe, dann stimmt der Pfad zur Datei nicht.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#3 02. September 2017 13:33

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 876

Re: Formbuilder "Datei konnte nicht gesperrt werden"

Danke schonmal...

Das wäre mir jetzt peinlich gewesen. Aber vermutlich ist es wirklich nur eine Kleinigkeit.

Der Pfad zu /mein/pfad/zum/web/uploads wird ja vom FB automatisch eingefügt und stimmt auch. Die Datei- und Verzeichnisrechte stehen auf 777.

Beitrag geändert von antibart (02. September 2017 14:12)

Offline

#4 02. September 2017 20:33

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: Formbuilder "Datei konnte nicht gesperrt werden"

Lösch mal, was da in der Tabelle drin steht.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#5 03. September 2017 10:31

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 876

Re: Formbuilder "Datei konnte nicht gesperrt werden"

Aber da steht doch noch nichts drin:

"MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze). (Die Abfrage dauerte 0.0002 Sekunden.)"

Dort befinden sich lediglich die Eigenschaften der Spalten flock und flock_id.

Beitrag geändert von antibart (03. September 2017 10:41)

Offline

#6 03. September 2017 11:59

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: Formbuilder "Datei konnte nicht gesperrt werden"

Hm, okay.
Hab mich noch nicht mit dem Code des FB befasst.
Verstehe nicht wozu die Tabelle gut sein soll.
Das Sperren der Datei geschieht offenbar nicht auf Dateiebene sondern per Datenbank.
Die Idee dahinter erschließt sich mir nicht so recht.

Also in die Tabelle wird normalerweise etwas reingeschrieben.
Ein Timestamp und eine ID.
Die ID ist immer 1.
Der Timestamp ist die aktuelle Zeit.
Wenn das Schreiben in die Tabelle fehl schlägt, dann heißt das, dass die Datei bereits gesperrt ist.
Nach dem Schreiben der Datei, wird die Sperre wieder aufgehoben. Also der Eintrag aus der DB gelöscht.

Kannst Du den SQL-Befehl mal posten, der da fehlschlägt? Es scheint, er hat bei Dir Probleme beim Timestamp. Welcher Typ ist denn bei Dir das Feld "flock"?


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#7 04. September 2017 05:45

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 876

Re: Formbuilder "Datei konnte nicht gesperrt werden"

SELECT * FROM `cms_module_fb_flock`

NaN schrieb:

Welcher Typ ist denn bei Dir das Feld "flock"?

SQL-Befehl:

ALTER TABLE `cms_module_fb_flock` CHANGE `flock` `flock` TIME NULL DEFAULT NULL;

Typ: time
Null: Ja
Standard: NULL


Das komplette Löschen dieser Tabelle bringt auch keine Änderung.

Beitrag geändert von antibart (04. September 2017 10:56)

Offline

#8 05. September 2017 08:02

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 876

Re: Formbuilder "Datei konnte nicht gesperrt werden"

Okay. Ich habe ein weiteres, jüngeres Ergebnis auf der ORG-Seite gefunden, wo der gleiche Fehler behandelt wird.

Lösung:
Solved - I upgraded PHP to 5.6 (from 5.3.3) and the error disappeared
https://forum.cmsmadesimple.org/viewtop … 9&p=333862

Leider erwähnt der User nichts über seine CMS-Installation und Modul-Versionen. Ich zumindest habe bereits PHP 5.6.

Ich glaube, ich kümmere mich noch mal um die Meldung aus dem Debug-Modus.

MariaDB sagt dazu:

If there are more closed parentheses than open parentheses, the error usually looks like this:

You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use near ')'
at line 1

Note the quoted closed parenthesis.

Beitrag geändert von antibart (05. September 2017 09:21)

Offline

#9 08. September 2017 06:01

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 876

Re: Formbuilder "Datei konnte nicht gesperrt werden"

Ich bin verzweifelt.

Ich habe nun auch versucht, dass ganz Projekt auf einen anderen Host zu kopieren, falls es ein Konflikt mit MariaDB sein sollte oder PHP 7 benötigt wird. Fehlanzeige.

Ich werde jetzt als letzte Lösung ein "Downgrade" auf cmsms 1.12.2 probieren. Damit ging ja früher auch.

Beitrag geändert von antibart (08. September 2017 07:11)

Offline

#10 08. September 2017 12:11

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 876

Re: Formbuilder "Datei konnte nicht gesperrt werden"

1.12.2 brachte die Rettung.

Da ich das nicht unbedingt eine "Lösung" nennen möchte, stelle ich den Threadstatus mal nicht auf "gelöst".

Vielleicht hat nochmal jemand eine Idee für die 2er.

Offline

#11 08. September 2017 21:52

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: Formbuilder "Datei konnte nicht gesperrt werden"

Ist ein Fehler im Modul.
Das Problem liegt daran, dass in der neusten CMSms Version der ADODB Layer durch eine eigene Datenbankklasse ersetzt wurde.
Diese kennt die Eigenschaft "sysTimeStamp" nicht (mehr).
FormBuilder verwendet aber diese Eigenschaft.

Ändere mal im Modul Formbuilder in der Datei "FormBuilder.module.php" in der Funktion "GetFileLock()" (Zeile 759 bis 777) die beiden Vorkommen von "$db->sysTimeStamp" in "$db->DbTimeStamp(time())".


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#12 09. September 2017 18:40

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 876

Re: Formbuilder "Datei konnte nicht gesperrt werden"

Danke NaN,

ich habe die 2er-Installation parallel noch aktiv. Kann das also noch testen. Ist das ein Hinweis im Bugtracker wert oder ist das Problem bekannt und wird ausgesessen?

Naja - wen frage ich ...? wink

Beitrag geändert von antibart (09. September 2017 18:41)

Offline

#13 06. Januar 2018 22:11

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Formbuilder "Datei konnte nicht gesperrt werden"

NaN schrieb:

Das Problem liegt daran, dass in der neusten CMSms Version der ADODB Layer durch eine eigene Datenbankklasse ersetzt wurde.
Diese kennt die Eigenschaft "sysTimeStamp" nicht (mehr).
FormBuilder verwendet aber diese Eigenschaft.

Sollte die eigene DB-Klasse nicht voll kompatibel sein tongue ?

Offline