Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
große datenmengen in tabellenfeld einfügen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
große datenmengen in tabellenfeld einfügen


 
tenim
31-10-2001, 14:12 
 
ich habe eine tabelle "videos" mit mehreren feldern,
unteranderem auch einem longblob-feld für die eigentlichen mpeg und rm-videodateien. aber ein insert into-befehl übers
netzwerk (php) geht nur bei kleinen datenmengen. meine datei
ist z.b. 1,5 MB groß und der insert-befehl geht da nicht mehr wohl aber bei dateien um 100-200kb. wie kann ich meine
videodatei in das spezielle longblob-feld EINZELN laden?
bei "load data" kann man ja nur alle tabellenfelder auf einmal einfügen oder gibt es da einen trick?

p.s. ich will nicht auf links der videos in feldern ausweichen !!!

tenim

 
Sky
31-10-2001, 14:21 
 
"load data"? Mit welcher Datenbank und welchem Client/Script arbeitest du denn?

 
Sky
31-10-2001, 14:24 
 
Achso, du meinst wohl sowas wie "LOAD DATA INFILE"... Das ist eigentlich nicht für sowas wie deinen Zweck konzipiert - nimm lieber ein ganz normales INSERT - was meinst du denn mit "geht da nicht mehr"?

 
tenim
31-10-2001, 14:29 
 
ich benutze mysql und greife über ein lan auf den datenbankserver zu. wenn ich dann eine abfrage über php
starte(vom client) liefert "mysql_query" einen fehler zurück. aber der selbe befehl funktioniert bei kleineren
dateien. ich lese die datei erst komplett in eine
variable "$daten" und füge sie dann mit "mysql_query" in die datenbank ein.

tenim

[Editiert von tenim am 31-10-2001 um 14:31]

 
Sky
31-10-2001, 14:36 
 
Was für einen Fehler denn?

 
JoelH
31-10-2001, 14:40 
 
könnte es sein das einfach ein Timeout kommt, das php Script betreffend, weil dieses nach 30 sec. abbricht ?

 
Sky
31-10-2001, 14:43 
 
Er hat ja gemeint, dass die query einen fehler zurückgibt... Aber du hast recht... Der Fehler könnte durchaus bei der max_execution_time liegen.

 
tenim
31-10-2001, 14:57 
 
das script sieht grob so aus:

$befehl="insert into vidos values(null,$richtung,'$dateiname','$beschreibung','$daten')";

if (! $resultat=mysql_query($befehl,$sql_handle) )
{
echo "Fehler: Konnte Abfrage nicht ausfuehren.";
sleep(2);
exit;
}

und wenn ich diese abfrage starte kommt obige fehlermeldung
was heissen muß das der befehl nicht ordnungsgemäß ausgeführt wurde. wenn ich aber in $daten eine kleinere datei reinlade, dann geht es.
timeout kann auch nicht das problem sein, weil die fehlermeldung schon nach ca. 2 sekunden kommt.

tenim

 
JoelH
31-10-2001, 15:00 
 
dann ist die Datei wohl zu gross, gibts ne Quota beim SQL Server ? Gibts sowas überhaupt ? Ich meine so wie eine max. Grösse bei eMails oder so ?

ka.

 
Sky
31-10-2001, 15:04 
 
Änder doch bitte das echo um in:

echo "Fehler: Konnte Abfrage nicht ausfuehren: ".mysql_error();

und sag uns dann, was als Fehlerbeschreibung ausgegegen wurde.

 
tenim
31-10-2001, 15:44 
 
es erscheint die meldung "MySQL server has gone away".

tenim

[Editiert von tenim am 31-10-2001 um 15:56]

 
Sky
31-10-2001, 15:58 
 
Da haben wirs ja... Offensichtlich scheint es an irgendeiner zeit- oder datenabhängigen Einstellung des Servers zu liegen... Ich mach mich mal kurz schlau.

 
Sky
31-10-2001, 16:13 
 
max_allowed_packet: The maximum size of one packet. The message buffer is initialized to net_buffer_length bytes, but can grow up to max_allowed_packet bytes when needed. This value by default is small, to catch big (possibly wrong) packets. You must increase this value if you are using big BLOB columns. It should be as big as the biggest BLOB you want to use. The current protocol limits max_allowed_packet to 16M.

Schau mal, was die bei dir für einen Wert hat und setz ihn bei Bedarf höher.

 
Sky
31-10-2001, 16:15 
 
nächstes:
query_buffer_size: The initial allocation of the query buffer. If most of your queries are long (like when inserting blobs), you should increase this!

 
Sky
31-10-2001, 16:22 
 
vgl. hierzu unter Umständen auch
http://www.mysql.com/doc/G/o/Gone_away.html

 
tenim
31-10-2001, 16:25 
 
danke, probiere mal alles aus.

tenim

 
tenim
31-10-2001, 18:31 
 
jetzt gehts!!

es lag an der variable max_allowed_packet.
die andere variable gibt es bei mir garnicht. villeicht habe
ich ja eine zu alte version (3.22.32).

tenim

 
Sky
31-10-2001, 18:52 
 
schön :)

 
tenim
31-10-2001, 19:14 
 
leider zu früh gefreut, es funktioniert zwar,aber bei dateien >2MB wieder nicht. dann bringt mysql diese meldung:

Fatal error: Allowed memory size of 16777216 bytes exhausted at zend_stack.c:27 (tried to allocate 256 bytes) in [no active file] on line 0

ich habe in der php.ini die variabe memory_limit schon
auf 16777216 (16MB) gesetzt, hat aber auch nichts geholfen.

p.s. phpmyadmin geht dadurch auch nicht mehr richtig. immer wenn ich meine datenbank wählen will,
kommt die obige meldung. auf dem server läuft phpmyadmin komischerweise perfekt.

tenim

[Editiert von tenim am 31-10-2001 um 19:19]

 
Sky
31-10-2001, 19:19 
 
probier sie noch höher zu setzen...

EDIT zur Info: Es muss an deinem Computer bzw. deiner PHP-Installation liegen.

[Editiert von Sky am 31-10-2001 um 19:22]

 
Sky
31-10-2001, 19:34 
 
Hm.. hab mich gerade etwas zu diesem Thema umgesehen.. Die Erfahrungen anderer Leute mit diesem seltsamen Problem sind eher spärlich und nirgends findet sich eine Lösung... Auch scheinen die Fehler nur sporadisch und unter bestimmten Bedingungen aufzutreten.


EDIT: bugs.php.net hat etwas ähnliches zu bieten, wobei der Fehler in diesem Fall aber nicht in der zend_stack.c, die ja an sich ein Teil von PHP ist, auftritt, sondern in einem ganz bestimmten Script. Ein PHP-Supporter rät dazu auch nur, das memory_limit zu erhöhen...

Siehe http://bugs.php.net/bug.php?id=11832


EDIT 2: Wenn nun Scripts wie phpMyAdmin, die ja wahrscheinlich vorher einwandfrei funktioniert haben, auch nicht mehr gehen, solltest du _vielleicht_ PHP neu installieren.

EDIT 3: ...und dir vorher noch die aktuelle Version downloaden, falls du sie nicht bereits hast.

[Editiert von Sky am 31-10-2001 um 19:43]

 
tenim
31-10-2001, 19:43 
 
habs auf 64mb erhöht, aber irgentwie erkennt er nur 32mb.
dann muß ich wahrscheinlich auf videos in meiner datenbank verzichten.
übrigens: nachdem ich das memorylimit auf 32 erhöht hatte, ging phpmyadmin wieder. als ich dann aber eine größere datei (10mb) übertragen wollte war alles wieder beim alten.

tenim

 
Sky
31-10-2001, 19:46 
 
hm... lässt du immer nur ein script laufen oder laufen zwei oder mehr gleichzeitig?

 
tenim
31-10-2001, 19:53 
 
ich starte das script(liegt auf dem mysql-server) von einem
win98-client im lan. es läuft immer nur eine instanz.
und jetzt geht phpmyadmin auch wieder(ohne das ich etwas verändert habe,einfach so?!?)

tenim

 
tenim
03-11-2001, 00:59 
 
habe das problem mit dem memory-fehler gelösst. wenn man php
ohne die option "memory_limit" kompiliert kommt der fehler nicht(php 4.0.6), ansonsten muß man den bugfix von zend.com einspielen.

tenim

 
Sky
03-11-2001, 09:31 
 
Gut zu wissen.
Danke, dass du uns an deiner Lösung teilhaben lässt - macht ja auch nicht jeder (leider) :)

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:03 Uhr.