Avatar billede nemlig Professor
30. marts 2010 - 23:32 Der er 9 kommentarer og
1 løsning

PHP backup-script giver fejl efter opgradering til PHP 5.3

Hejsa.

Jeg har dette backup-script, som tager et dump af udvalgte MySQL tabeller.

http://www.fam-johansen.dk/backup.phps

Efter opgradering af PHP til version 5.3, får jeg nedenstående 3 fejl:

Jeg har læst mig til, at ereg() skal erstattes af preg_match().
Og der er også en løsning på mysql_list_tables() her:
http://php.ca/manual/en/function.mysql-list-tables.php

Men jeg kan ikke gennemskue det.
Mon en venlig sjæl vil hjælpe med tilpasning af koden til løsning af disse 3 fejl.


Deprecated: Function ereg() is deprecated in C:\Users\JyskMedia\Documents\My Dropbox\test_dump\index.php on line 52

Deprecated: Function eregi() is deprecated in C:\Users\JyskMedia\Documents\My Dropbox\test_dump\index.php on line 55

Deprecated: Function mysql_list_tables() is deprecated in C:\Users\JyskMedia\Documents\My Dropbox\test_dump\index.php on line 164
Avatar billede Slettet bruger
31. marts 2010 - 01:58 #1
Jeg vil da gerne prøve, men garanterer ikke at jeg kan klarer det i ét hug.

Til at starte med syntes jeg du skulle tage og rette små "fejl" som du lige så godt kan få på plads nu vi er igang.
En af de småfejl jeg tænker på er du angiver index/keys i arrays uden quotes hvilket betyder PHP først leder efter en konstant og hvis den ikke kan finde en så vil den se det som en streng.
Så ret $config[db_serv] osv. til $config["db_serv"].

Når det er gjort kan vi gå videre til at omskrive dine ereg()-funktioner om til preg_match()-funktioner.
De første 3 parametre er stort set identiske for de 2 funktioner. Dog skal man angive "delimiters" i preg_match() hvilket du ikke skal i ereg() og derfor kan du ikke bare skrive preg_match() istedet for ereg().
Her er et eksempel på hvordan du omskriver fra ereg() til preg_match():
ereg() style:
if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs)){

preg_match() style (delimiter: "/"):
if(preg_match('/[^(]*\((.*)\)[^)]*/',$client,$regs)){


Har desværre ikke tid til at gå resten igennem i aften, men du kan jo prøve at se om du kan få fikset dine regex problemer.
Avatar billede nemlig Professor
31. marts 2010 - 08:41 #2
roxki: Din hjælp sætter jeg meget pris på.
Jeg har rettet småfejlene og den første med preg_match(). Men jeg når heller ikke mere inden sidst på eftermiddagen eller først på aftenen.
Avatar billede Slettet bruger
31. marts 2010 - 19:29 #3
For at få en liste over tabellerne i en given database kan følgende eksempel bruges:
<?php
// Database config
$_config["db_hostname"] = "localhost";
$_config["db_username"] = "root";
$_config["db_password"] = "";
$_config["db_database"] = "my_db";

// Opretter forbindelse til databasen
$db = mysql_connect($_config["db_hostname"], $_config["db_username"], $_config["db_password"]);
mysql_select_db($_config["db_database"], $db);

// Henter liste over tabellerne i den database vi har "selected"
$sql = "SHOW TABLES";
$query = mysql_query($sql);

$nr = 1;
while($result = mysql_fetch_row($query)) {
  echo "Table " . $nr++ . ": " . $result[0] . "<br>\n";
}
?>


Eksemplet er ikke lavet så det passer til dit backup-script, men det viser hvordan du henter tabellerne ved brug af en sql-forspørgelse. Håber du selv kan få det koblet ind i dit script.
Avatar billede nemlig Professor
01. april 2010 - 10:30 #4
Fedt nok - det tror jeg, at jeg er med på. Jeg prøver det dog først senere. Der gik whiskey i den i går efter Esbjergs nederlag til AGF, og nu er der en forhammer inde i mit hoved, der vil ud.
Jeg vender tilbage senere i dag eller i morgen.
Avatar billede nemlig Professor
01. april 2010 - 15:47 #5
Så har jeg også tabellerne til at virke.

Det sidste, der driller mig, er denne linje:

if (eregi("Win",$os))
  $crlf="\r\n";


Den skal nok også erstattes med preg_match, hvor der skal tjekkes om "Win" er en del af indholdet af variablen $os.
Avatar billede nemlig Professor
01. april 2010 - 15:56 #6
Jeg tror, at det er løst med:

if (preg_match('/Win/',$os))
$crlf="\r\n";
Avatar billede nemlig Professor
01. april 2010 - 19:06 #7
Smider du også lige et svar? :)
Avatar billede nemlig Professor
02. april 2010 - 10:49 #8
Jeg har smidt en besked til dig.
Der er opstået 2 nye fejl med
mysql_db_query() og ereg_replace()
Avatar billede nemlig Professor
04. april 2010 - 10:49 #9
roski: Sender du lige et svar, så jeg kan lukke spørgsmålet.
Tak for bidragene.
Avatar billede Slettet bruger
04. april 2010 - 12:38 #10
Du får et svar!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester