mysql-dump import per exec - problem mit safe_mod oder linux?

fi**en32

Lieutenant
Dabei seit
Mai 2007
Beiträge
962
hi leutz,

ich habe mir ein script gebaut, mit dem ich einen mysql-dump in eine datenbank importiere.

PHP:
exec('mysql --user=usr123 --password=pw123 --database=db123 < dump.sql');
nur leider funktioniert das ganze leider nicht so ganz.

mögliche fehler die ich ausschließen kann:
- korektes folder zur dump is gecheckt mit "echo getcwd();"
- mysqlbefehl funzt im linux und auf meinem test-webserver wo safe_mode aus ist.
- mit passthru (exec mit ausgabe) kommt der gleiche bildschirm wie wenn ich mysql --help nutze
- rechte der dump sind auf 777 und ich habe mal per hand den owner und die group gesetzt, hat alles nichts gebracht

liegts nun echt am safe_mode und wenn ja kann ich das lösen (evtl exec dir der php.ini ändern? steht derzeit auf das verzeichnis indem auch mysql liegt.), oder liegts evtl doch am linux irgendwo?

bekomm fast ne meise. funzt super auf meinem testserver und auf dem root nicht mehr. der einzige unterschied scheint safe_mode zu sein.
 

BerniG

Lieutenant
Dabei seit
Okt. 2004
Beiträge
620
Wenn das so ist müsste man halt stattdessen popen() oder proc_open() nutzen. Dort kann man den Eingabestream (für das Lesen der dump.sql) nämlich anderweitig kontrollieren:
PHP:
$console = popen ('mysql --user=usr123 --password=pw123 --database=db123','w');
// alternativ (braucht aber viel RAM): fwrite($console, file_get_contents('dump.sql'));
$fileHandle = fopen('dump.sql', 'r');
while (!feof($fileHandle)) {
  fwrite($console, fread($fileHandle, 8192));
}
fclose($fileHandle);
pclose($console);
oder (z.b. falls auch im Passwort maskierte Zeichen sind)
PHP:
$f = popen ('/bin/bash','w');
// normal sollte der SafeMode hier nicht greifen aber evtl. muss man den vollen Pfad der dump.sql angeben!
fwrite($f, 'mysql --user=usr123 --password=pw123 --database=db123 < dump.sql\n');
pclose($f);
proc_open() ist im Grunde dasselbe nur dass du zwei Streams (Ein-und Ausgabe) hast und somit auch die Rückgabe lesen kannst. Anhand der Beispiele im PHP-Handbuch solltest du das hinbekommen falls nötig.
 
Top