Adatbázis mentése php-ből UTF8 -cal

drupiuser képe

Szervusztok!

Segítsetek nekem legyetek szívesek, mert gutaütés kerülget!
Röviden: az egyik iskolai weboldalnál egy félresikerült modultelepítés után elszálltak a menük nagy része (az admin menüből hiába katt, nem nyílik meg, vagy az oldalon hiányosak az elérhető menük), ezért egy korábbi mentésből visszaállítottam az egészet. Node! PHPMyBackupPro -t használok erre a célra, mivel a fő domainhez tartozó phpmyadminhoz nem férek hozzá. Ezzel idáig semmi probléma, csakhogy az UTF8 -as adatbázíst érdekes módon nem ezzel a kódolással menti el. Így a visszaimportálásnál az ő/ű betűk helyett ? -ek vannak. Mivel elég terjedelmes írások vannak az oldalon, ezeket kézzel kicserélgetni... Ugyanez a helyzet a saját menükben is . Sőt, amiben ez a két karakter szerepel, pl. Főmenü, el sem lehet érni szerkesztésre (pedig nem kevés almenü lakozik benne). Remélem érthető voltam.
Szóval nekem olyan kész PHP -s adatbázis-mentő kellene sűrgősen, ami tuti az UTF8 -as adatbázist abba is menti el.

A backup_migrate modul természetesen nem volt fenn (így utólag azt bizony nem tudom felhasználn - bár azt nem tudom kezeli-e).

Előre köszönöm a segítségeteket!

Drupal verzió: 
Fórum: 
drupiuser képe

Akit esetleg érdekel :-) :
A PHPMyBackupPro -t kellet egy kicsit átalakítani, és lám, műxik...
A megoldás egy kínai oldalon volt... gondolom ott is belebotlottak az "ékezetes" gondba :-) Hiába a hanzi írás is tele van "fölösleges" írásjelekkel, he-he...

0
0
Szotyi képe

Érdekel..
Mit kellett a phpmybackuppro-ban állítni, hogy jól mentse a drupalos adatbázist?

0
0

Péter

drupiuser képe

Remélem nem szólnak meg érte, ha egy kis forrást mellékelek itt...

A functions.inc -ben kellett turkálni egy kicsit, és beszúrni ezt-azt...
Megjegyzés: //ez + = plusz sorok, //módosított!!! = egyértelmű :-). Vannak benne plusz dolgok is, azt majd kitapasztalod, mi nem kell... Nálam működött, de azóta már feltettem a backup_migrate modult...

***
function PMBP_exec_sql($file,$con,$linespersession=false,$noFile=false) {
    $query="";
    $queries=0;
    $error="";
	mysql_query("SET NAMES 'utf8'");  //ez +
	mysql_query("SET CHARACTER SET utf8");  //ez +
	mysql_query("SET CHARACTER_SET_RESULTS=utf8'"); //ez +
 
***
function PMBP_dump($db,$tables,$data,$drop,$zip,$comment) {
    global $CONF;
    global $PMBP_SYS_VAR;
    $error=FALSE;
	mysql_query("SET NAMES 'utf8'");  //ez +
	mysql_query("SET CHARACTER SET utf8");  //ez +
	mysql_query("SET CHARACTER_SET_RESULTS=utf8'"); //ez +
 
    // set max string size before writing to file
    if (@ini_get(“memory_limit”)) $max_size=900000*ini_get(“memory_limit”)/2; //modositiott!!!
		else $max_size=$PMBP_SYS_VAR['memory_limit']/2;  //modositiott!!!
 
***
// set backupfile name
    $time=time();
    if ($zip=="gzip") $backupfile=$db.".".$time.".sql.gz";
        else $backupfile=$db.".".$time.".sql";
    $backupfile=PMBP_EXPORT_DIR.$backupfile;
 
    if ($con=@mysql_connect($CONF['sql_host'],$CONF['sql_user'],$CONF['sql_passwd'])) {
 
        //create comment
        $out="# MySQL dump of database '".$db."' on host '".$CONF['sql_host']."'\n";
        $out.="# backup date and time: ".strftime($CONF['date'],$time)."\n";
        $out.="# built by phpMyBackupPro ".PMBP_VERSION."\n";
        $out.="# ".PMBP_WEBSITE."\n\n";
		$out.="/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;\n"; //ez +
		$out.="/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;\n";  //ez +
		$out.="/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;\n";  //ez +
		$out.="/*!40101 SET NAMES utf8 */;\n";  //ez +
		$out.="/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;\n";  //ez +
		$out.="/*!40103 SET TIME_ZONE='+01:00' */;\n";  //ez +
		$out.="/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;\n";  //ez +
		$out.="/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;\n";  //ez +
		$out.="/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;\n";  //ez +
		$out.="/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;\n"; //ez +
 
***
 // select db
        @mysql_select_db($db);        
        $Sql = "SET NAMES utf8"; //ez  +
		$Res = mysql_db_query ($db, "$sql"); //ez +
0
0
Szotyi képe

Köszönjük a részletes leírást!

0
0

Péter

chx képe

Izé, csak azért mert nincsenek meg a menüid, vissza kellett állítani mindent? És egyáltalán, miért az éles site-al ügyködtél? Végül, hogy létezik hogy ennek élesben kellett kiderülnie, nem szoktál backup-restore-t tesztelni?

0
0
drupiuser képe

...gyorsan kellett cselekedni, és élesben. No, ennek lett meg a következménye... Azóta, mondjuk úgy, "okosabb" lettem valamivel, és nem megyek be a málnásba csak úgy... fejjel, orcán csúszva :-)
Hiába, a tanulópénzt meg kell fizetni... azért az hozzá tartozik, hogy a Drupal lelki világát nem ismerem teljes egészében (még :-) ), de ami késik nem múlik. A remény hal meg utoljára... Szerencsére ITT vannak okos emberek, és segítenek, ha baj van.

Egyébként gőzöm nem volt hirtelenjében miért babrált ki velem, a menürendszer. Mivel nem fértem hozzá a phpadmin -hoz közvetlenül, úgy az adatbázist sem tudtam reszelni csak úgy.
Az ékezetes probléma addig persze nem derült ki - és ez legyen minden kezdő iskolapéldája, velem együtt -: a menükben és almenükben sem szerepelt a két karakter egy másik localhoston tesztelt oldalon, illetve azok tartalma is tesztjellegű volt, kevés mintaszöveggel (magyarán billentyűre tenyereléssel képzett szöveg...). A lustaság nagy úr, tovább nem nézelődtem, biztosra vettem a sikert. A crash -ig. A tanulságot mindenesetre mindenki levonhatja...

Elég részletes voltam? :-)

0
0