Προς το περιεχόμενο

Export my base/Php


Προτεινόμενες αναρτήσεις

Δημοσ.

Kαλησπέρα,

 

Θα ήθελα με κάποιο τρόπο να κάνω export την βάση μου αλλά όχι μέσω του phpmyadmin, αλλά π.χ κάτι σαν το Mysqldump που βρήκα αλλά δεν κατάφερα κάτι και να το αποθηκεύω σε ένα αρχείο.

Καμία ιδέα για το πως γίνεται;

 

Ευχαριστώ 

Δημοσ.

Ορίστε ένα απλό παράδειγμα για το mysqldump:

 

mysqldump -u OnomaXristi -pKwdikos OnomaBasis > OnomaArxeiou.sql

 

Αντικατέστησε αυτά που είναι σε bold, επίσης μην αφήσεις κενό ανάμεσα στο -p και τον Kwdikos, σκόπιμα είναι κολλητά.

Δημοσ.

Φίλε θέλω να το κάνω κάπως έτσι. Δηλαδή, να έχω κάτι τέτοιο <a href="exort.php" > Export</a> και όταν πατάω πάνω σε αυτό να κατεβάζω το αρχείο.

Δημοσ.

Το "αλλά τίποτα" δεν μου λέει... τίποτα! :P

 

Αν θέλεις να επεκταθείς λίγο, το συζητάμε.

Βρήκα αυτό τον κώδικα..

$result = 0;
$command = "mysqldump -u $username -p$password $dbname > dump.sql";
exec($command,$output=array(),$result);
    
if($result) echo "this has worked.\n";

το έτρεξα μου λέει ότι δουλεύει αλλά το θέμα είναι ότι δεν βρίσκω το αρχείο. Επίσης τρέχω την άσκηση μου σε έναν απομακρυσμένο server και όχι πάνω στον υπολογιστή μου.

Αν θα ήθελα να κάνω το αρχείο download στον υπολογιστή κάθε φορά πως θα γινόταν;

Δημοσ.

Βρήκα αυτό τον κώδικα..

$result = 0;
$command = "mysqldump -u $username -p$password $dbname > dump.sql";
exec($command,$output=array(),$result);
    
if($result) echo "this has worked.\n";
το έτρεξα μου λέει ότι δουλεύει αλλά το θέμα είναι ότι δεν βρίσκω το αρχείο.

 

 

Για να είσαι πιο σίγουρος, βάλε absolute path αντί σκέτο dump.sql

 

Επίσης τρέχω την άσκηση μου σε έναν απομακρυσμένο server και όχι πάνω στον υπολογιστή μου.

Αν θα ήθελα να κάνω το αρχείο download στον υπολογιστή κάθε φορά πως θα γινόταν;

Αν θέλεις να κρατήσεις το dump στον server αλλά και να το κατεβάσεις, φρόντισε το absolute path που σου είπα να είναι published (πχ μέσα στο public_html σου ή όπως αλλιώς λέγεται στον server σου). Μετά, απλά γράψε στον browser http://example.com/path/to/dump.sql

 

Αν τώρα σε ενδιαφέρει μόνο το download (on the fly) άλλαξε το script σου ώστε να κάνει output κατευθείαν στον browser. Κάτι σαν:

$command = "mysqldump -u $username -p$password $dbname";
passthru($command);
exit;
Δημοσ.

Θέλω μόνο να το κατεβάσω και όχι να το κρατάω στον server. Δοκιμάσα έτσι όπως μου είπες αλλά δεν είδα κανένα file. Επίσης δοκίμασε και έτσι:

$command = "mysqldump -u $username -p$pass $dbname > dump.sql";
 passthru($command);

Δεν ξέρω τι γίνεται... :wacko:

 

Το μόνο που κάνει είναι να τυπώνει αυτά

Server version	10.0.17-MariaDB-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 
Δημοσ.

- man mysqldump

- Δεν χρειάζεσαι ανακατεύθυνση

- Αν θέλεις να μη στα τυπώνει στο παράθυρο του browser, βάλε τους κατάλληλους Content-* headers.

Δημοσ.

Έκανα κάτι τέτοιο 

                $dumpfname = $dbname . "_" . date("Y-m-d_H-i-s").".sql";
		$command = "mysqldump -u $username";
		if ($pass) 
		        $command.= "--password=". $pass ." "; 
		$command.= $dbname;
		$command.= " > " . $dumpfname;
		system($command);
		 
		// zip the dump file
		$zipfname = $dbname . "_" . date("Y-m-d_H-i-s").".zip";
		$zip = new ZipArchive();
		if($zip->open($zipfname,ZIPARCHIVE::CREATE)) 
		{
		   $zip->addFile($dumpfname,$dumpfname);
		   $zip->close();
		}
		 
		// read zip file and send it to standard output
		if (file_exists($zipfname)) {
		  
		   
		    header('Content-Description: File Transfer');
		    header('Content-Type: application/octet-stream');
		    header('Content-Disposition: attachment; filename='.basename($zipfname));
		    header('Content-Transfer-Encoding: binary');
		    header('Expires: 0');
		    header('Cache-Control: must-revalidate');
		    header('Pragma: public');
		    header('Content-Length: ' .filesize($zipfname));
		    readfile($zipfname);
		    exit;
		}

αλλά δεν δουλεύει και είναι η πρώτη φορά που κάνω κάτι τέτοιο και δεν μπορώ να καταλάβω που είναι το λάθος ή ότι άλλο χρείαζεται. Δεν ξέρω αν έχεις να προτείνεις κάτι. 

Δημοσ.
$zipfname = $dbname . "_" . date("Y-m-d_H-i-s").".zip";

Εδω πρέπει να βάλεις absolute path πιθανως δεν ξέρει που είναι το αρχείο, ίσως και στο dumpfname

Δημοσ.

Εγώ αυτό που θέλω είναι να δημιουργήσω το αρχείο και να το κάνω download γιατί να δώσω το path, ούτε έχω δημιουργήσει το αρχείο.

Δημοσ.

Τι περιμένεις να σου απάντήσω ούτε log files output δίνεις ούτε στο κώδικα βλέπω πουθενα να χειρίζεσαι eroors/exceptions.

Αυτο που μου φάνηκε πιο λογικό σου απάντησα οτι η php δε καταλαβαίνει που είναι το αρχείο που δημιουργηθήκε  κ αν έχει δημιουργηθει κιόλας όπως σωστα είπες


$zip->addFile($dumpfname,$dumpfname);

Εδω π.χ πως θα βρει το αρχείο;

Δημοσ.

Φίλε, πρώτα φορά ασχολούμαι με αρχεία - php και προσπαθω να καταλάβω τι παίζει...και με το Mysqldump...

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...