Avatar billede mr.t.man Nybegynder
20. maj 2003 - 17:05 Der er 51 kommentarer og
1 løsning

Backup-script!

Hej!
Jeg er nybegynder i php, og vil gerne høre, om det er muligt at lave et "backup-script" i php. Jeg tænker på en funktion der også ligger i phpmyadmin, hvor man trykker på et link og derefter kan man downloade sin database i en zip fil. Her skal det bare være hele sit webhotel, hvor alle filerne ligges i en zip-fil, som så kan downloades.. Er det muligt at lave sådan et? Hvis ja, er der nogle der så er friske på en lille opgave? ;)
Avatar billede mathiash Nybegynder
20. maj 2003 - 17:15 #1
Har lavet en lille tegning: http://clint-mathis.starthotel.dk/exp/Backup.jpg
Er det sådan du mener?

//Mathias
Avatar billede ohmish Nybegynder
20. maj 2003 - 17:19 #2
<?php

  $dbhost = "xxxxxxxxxxxx";
  $dbuname = "xxxxxxxxxxxx";
  $dbpass = "xxxxxxxxxxxx";
  $dbname = "xxxxxxxxxxxx";
   
  @set_time_limit(600);
  $crlf="\n";

  $strNoTablesFound = "Ingen databasetabeller fundet";
  $strHost = "Host";
  $strDatabase = "Database ";
  $strTableStructure = "Struktur for tabel";
  $strDumpingData = "Indhold af tabel";
  $strError = "Fejl";
  $strSQLQuery = "SQL-query";
  $strMySQLSaid = "MySQL: ";
  $strBack = "Tilbage";
  $strName = "Backup af database";
  $strDone = "Downloadet d.";
  $strtoday = date ("d-m-y");
       
  header("Content-disposition: filename=$dbname $strtoday.sql");
  header("Content-type: application/ms-download");
  header("Pragma: no-cache");
  header("Expires: 0");
       
  $client = getenv("HTTP_USER_AGENT");
  if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs))
  {
    $os = $regs[1];
    if (eregi("Win",$os))
      $crlf="\r\n";
  } 
       
  function my_handler($sql_insert)
  {
    global $crlf;
    echo "$sql_insert;$crlf";
  }
       
  function get_table_content($db, $table, $handler)
  {
    $result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die();
    $i = 0;
    while($row = mysql_fetch_row($result))
    {
      $table_list = "(";
       
      for($j=0; $j<mysql_num_fields($result);$j++)
                    $table_list .= mysql_field_name($result,$j).", ";
       
      $table_list = substr($table_list,0,-2);
      $table_list .= ")";
       
      if(isset($GLOBALS["showcolumns"]))
        $schema_insert = "INSERT INTO $table $table_list VALUES (";
      else
        $schema_insert = "INSERT INTO $table VALUES (";
       
      for($j=0; $j<mysql_num_fields($result);$j++)
      {
        if(!isset($row[$j]))
          $schema_insert .= " NULL,";
        elseif($row[$j] != "")
          $schema_insert .= " '".addslashes($row[$j])."',";
        else
          $schema_insert .= " '',";
      }
      $schema_insert = ereg_replace(",$", "", $schema_insert);
      $schema_insert .= ")";
      $handler(trim($schema_insert));
      $i++;
    }
    return (true);
  }
       
  function get_table_def($db, $table, $crlf)
  {
    $schema_create = "";
    $schema_create .= "DROP TABLE IF EXISTS $table; CREATE TABLE $table ($crlf";
       
    $result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die();
    while($row = mysql_fetch_array($result))
    {
      $schema_create .= "  $row[Field] $row[Type]";
       
      if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0"))
        $schema_create .= " DEFAULT '$row[Default]'";
      if($row["Null"] != "YES")
        $schema_create .= " NOT NULL";
      if($row["Extra"] != "")
        $schema_create .= " $row[Extra]";
      $schema_create .= ",$crlf";
    }
    $schema_create = ereg_replace(",".$crlf."$", "", $schema_create);
    $result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die();
    while($row = mysql_fetch_array($result))
    {
      $kname=$row['Key_name'];
      if(($kname != "PRIMARY") && ($row['Non_unique'] == 0))
        $kname="UNIQUE|$kname";
      if(!isset($index[$kname]))
        $index[$kname] = array();
      $index[$kname][] = $row['Column_name'];
    }
       
    while(list($x, $columns) = @each($index))
    {
      $schema_create .= ",$crlf";
      if($x == "PRIMARY")
        $schema_create .= "  PRIMARY KEY (" . implode($columns, ", ") . ")";
      elseif (substr($x,0,6) == "UNIQUE")
        $schema_create .= "  UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
      else
        $schema_create .= "  KEY $x (" . implode($columns, ", ") . ")";
    }
       
    $schema_create .= "$crlf)";
    return (stripslashes($schema_create));
  }
       
  function mysql_die($error = "")
  {
    echo "<b> $strError </b><p>";
    if(isset($sql_query) && !empty($sql_query))
    {
      echo "$strSQLQuery: <pre>$sql_query</pre><p>";
    }
    if(empty($error))
      echo $strMySQLSaid.mysql_error();
    else
      echo $strMySQLSaid.$error;
    echo "<br><a href=\"java script:history.go(-1)\">$strBack</a>";
    exit;
  }
       
  global $bruger, $dbhost, $dbuname, $dbpass, $dbname;
  mysql_connect($dbhost, $dbuname, $dbpass);
  @mysql_select_db("$dbname") or die ("Kunne ikke forbinde til databasen");
       
  $tables = mysql_list_tables($dbname);
       
  $num_tables = @mysql_numrows($tables);
  if($num_tables == 0)
  {
    echo $strNoTablesFound;
  }
  else
  {
    $i = 0;
    $hours = date ("H:i");
    print "# ========================================================$crlf";
    print "#$crlf";
    print "# $strName : $dbname$crlf";
    print "# $strDone $strtoday kl. $hours$crlf";
    print "#$crlf";
    print "# Denne fil er alene beregnet som ren backup af databasen.$crlf";
    print "#$crlf";
    print "# ========================================================$crlf";
    print "$crlf";
           
    while($i < $num_tables)
    {
      $table = mysql_tablename($tables, $i);
       
      print "#$crlf";
      print "# $strTableStructure '$table'$crlf";
      print "#$crlf";
      print $crlf;
       
      echo get_table_def($dbname, $table, $crlf).";$crlf$crlf";
               
      print "#$crlf";
      print "# $strDumpingData '$table'$crlf";
      print "#$crlf";
      print $crlf;
           
      get_table_content($dbname, $table, "my_handler");
       
      $i++;
    }
  }
       
?>
Avatar billede ohmish Nybegynder
20. maj 2003 - 17:20 #3
sorry.. jeg læste vist ikke spørgsmålet grundigt nok igennem.
Avatar billede ohmish Nybegynder
20. maj 2003 - 17:25 #4
er det ikke nemmere at bruge ftp til backup? der skal du jo bare markere dit site (mappen) og vælge "download".
Avatar billede fangel Nybegynder
20. maj 2003 - 17:32 #5
ohmish => det får jo ikke ligefremt MySQL databasen med!
Avatar billede fangel Nybegynder
20. maj 2003 - 17:33 #6
hov... jeg kunne også lade være med at læse spørgsmålet...

Det er muligt at lave ZIP filer med PHP, men det er ret svært når det kommer til forskellige mapper OSV... kræver lidt hæftig programmering... søg lidt her på exp.dk har tidligere være oppe

Morten
Avatar billede ohmish Nybegynder
20. maj 2003 - 17:35 #7
nej det kan du ha ret i... men der kan ovenstående bruges.

det er lidt kluntet at hente og zippe alle filer via php. jeg tænker også på timeout o. lign. Det tar jo lidt tid, hvis det køres fra et loop.
Avatar billede fangel Nybegynder
20. maj 2003 - 17:38 #8
se:

http://www.eksperten.dk/spm/350791

så skal du bare kunne lave en rekursiv funktion til at pakke ting ned i mapper ;)

(men vil nok kræve lidt af serveren)

Morten
Avatar billede mixeren Nybegynder
20. maj 2003 - 17:53 #9
Scriptet er sådan set udemærket. (jeg er på jagt efter noget lidt som mr.t.man.)

Jeg har en ide til en løsning, som spørgeren muligvis også kunne bruge, jeg kan bare ikke gennemskue scriptet godt nok til at kunne lave rettelserne.

Hvis man nu istedet for at få skudt
  header("Content-disposition: filename=$strFileName $dbname $date_jour.sql");
  header("Content-type: application/ms-download");
i hovedet, kunne smide det direkte i en fil og placere den (dem) i en mappe lige klar til download via ftp.

mr.t.man kunne så downloade den mappe. ganske ubesværet. Og jeg kunne køre scriptet via et cronjob.. :-) det ville være ganske fikst med backup på den måde. Bare downloade når man havde tid, istedet for, som man er nødtil som scriptet er nu, at sidde og hente fra alle databaserne en af gangen.

For en som kan gennemskue scriptet må det være rimelig hurtig klaret. Kan man lave det så jeg kan bruge det også, skal jeg da nok dele udgiften.. :-)
Avatar billede fangel Nybegynder
20. maj 2003 - 17:56 #10
mixeren => til MySQL back-up eller Fil back-up? (og kan udgiften være penge?)

Morten
Avatar billede mixeren Nybegynder
20. maj 2003 - 18:04 #11
Fuldstændig som ovenstående script, istedet for at blive tilbudt at downloade mysql-dump filen skal den bare smides på serveren.

Naa, det var nu godt nok de mange point mr.t.man havde udlover jeg ville betale en del af. Der er jo ikke meget omkodning i det.. dump'et er jo fremstillet og filen ligeså. Eneste forskel er jo at den skal gemmes i stedet for downloades.
Avatar billede ohmish Nybegynder
20. maj 2003 - 18:07 #12
det er jo som at klø sig i nakken
Avatar billede mixeren Nybegynder
20. maj 2003 - 18:10 #13
Ja sad lige og kikkede lidt grundigere på det... det er da vist bare at fjerne header'ne og fremstille filen der.
Avatar billede ohmish Nybegynder
20. maj 2003 - 18:10 #14
men hvis den smides på serveren... hvordan vil du så få den ned på din egen computer? højreklikke og vælge "download"? det er jo det ovenstående tilbyder :)
Avatar billede mixeren Nybegynder
20. maj 2003 - 18:16 #15
ohmish => Det har du da helt ret i, men den kan jo ikke tage backup af f.eks 20 databaser om natten, som man kan hive ned via ftp dagen efter.
Avatar billede ohmish Nybegynder
20. maj 2003 - 18:34 #16
næææh..

men hvem skal aktivere dette job mens du sover, hvis siden ligger på et webhotel? hehe

jeg skal ikke lege overklog på området. mon ikke f.eks hotscripts.com har noget liggende et sted.
Avatar billede mixeren Nybegynder
20. maj 2003 - 19:00 #17
Mr cron da.. ;-)

Det er fint mulig at køre et php script i "stille mode" via et cronjob. (Gør jeg da allerede ved nogle optællinger i en mysql database til statestik.)

Muligvis har hotscript noget, men nu så jeg jo lige den her og den er jo meget tæt på det jeg skal bruge.
Avatar billede ohmish Nybegynder
20. maj 2003 - 19:03 #18
okidoki :)
Avatar billede mr.t.man Nybegynder
20. maj 2003 - 23:14 #19
mathiash >> ja, det er den funktion jeg mener. Blot hvor det er filerne på ens webhotel den pakker!

ohmish >> Det script er baseret på at downloade en sql database ikke? Eller inkluderer den også filer? Er den fra phpmyadmin? Det ville være lettere at bruge den download-funktion istedet for brugen af ftp. Men jo, det er en lille detalje - men det kunne være ret smart ;)

mixeren >> Hvis du finder en løsning må du meget gerne skrive :)
Avatar billede mixeren Nybegynder
20. maj 2003 - 23:34 #20
mr.t.man => Har du prøvet det script ohmish foreslog? Hvis jeg forstår dig rigtig mht "download" så er det script lige noget for dig.

Jeg skal da nok skrive.. men det driller lidt, mangler selve indholdet i databasen. Strukturen kan jeg godt smide i en fil, men indhold (alle insert sætningerne) køre gennem en funktion mere og det døjer jeg med at trække ud...
Avatar billede ohmish Nybegynder
21. maj 2003 - 04:22 #21
scriptet jeg postede hiver ALT ud af mysql-databasen. prøv det :)
Avatar billede ohmish Nybegynder
21. maj 2003 - 04:23 #22
med: hiver alt ud, mener jeg sefølli: kopierer alt ud
Avatar billede mr.t.man Nybegynder
21. maj 2003 - 07:19 #23
Jeg har prøvet scriptet, men den giver en masse fejl... Men jeg tror ikke helt i har forstået mit spørsmål. Det er ikke mysql-databasen jeg vil tage backup af! Det er mit webhotel, dvs. alle html, php, gif og hvad der ellers er at finde, der skal tages backup af. Min database kan jeg jo tage backyp af i phpmyadmin...
Avatar billede ohmish Nybegynder
21. maj 2003 - 07:30 #24
din ftp kan tage backup af filerne kunne man så sige..
Avatar billede mixeren Nybegynder
21. maj 2003 - 08:32 #25
Ok... når man læser hele dit start spørgsmål med friske øjne kan jeg bedre se hvad du mener.. :-)

Det er da muligt, men som ohmish siger vil jeg foretrække at hive det hjem med en ftp klient.

Jeg vil tvivle på, at du på et alm. webhotel kan køre exec() men kan du er det sikkert ikke særlig besværlig... men som sagt jeg tror ikke du har rettigheder til exec().

Du kan tjekke det ved at smide følgende fil på dit hotel og besøge den:

<?PHP
$oppetid = exec(uptime);
echo $oppetid;
?>

Når du besøger den skal den give en linjes info om oppe tiden på serveren.
Avatar billede mixeren Nybegynder
21. maj 2003 - 08:40 #26
Linket http://www.eksperten.dk/spm/350791 (Postet af dea_pg i går) ser ud til at gøre hvad du ønsker, men den kræver så at php_zlib.dll er aktiveret. Du kan finde ud af om zlib er aktiv ved at kikke i phpinfo ca. midt i.
Avatar billede mr.t.man Nybegynder
21. maj 2003 - 14:37 #27
mixeren >> Jeg kan ikke rigtigt finde ud af, om zlib er slået fra eller til. Et sted står der "enabled" og et andet sted "Off".
http://thomas-k.dk/phpinfo.php
Avatar billede mixeren Nybegynder
21. maj 2003 - 17:29 #28
Jeg vil mene den er slået til. Min er magen til på nær den der er off. Og jeg har lige testet zlib ser ud til at køre særdeles fornuftig.
Scriptet på før nævnte link vil ikke direkte på min server. Har rettet et par ting og jeg fik det rimelig smerte frit til at virke.

Har du stadig interresse i lidt hjælp til zlib?
Avatar billede mr.t.man Nybegynder
21. maj 2003 - 21:03 #29
joo, hvis det kan føre til noget..?
Avatar billede mixeren Nybegynder
21. maj 2003 - 21:08 #30
Det tror jeg det kan. Den der er off på din server er slet ikke angivet på min. Øverst oppe (i din info fil) står der også at php er configured med zlib.)

Først laver du en fil (den skal hedde zip.lib.php) med følgende indhold:

<?php

/*

Zip file creation class
makes zip files on the fly...

use the functions add_dir() and add_file() to build the zip file;
see example code below

by Eric Mueller
http://www.themepark.com

v1.1 9-20-01
  - added comments to example

v1.0 2-5-01

initial version with:
  - class appearance
  - add_file() and file() methods
  - gzcompress() output hacking
by Denis O.Philippov, webmaster@atlant.ru, http://www.atlant.ru

*/

// official ZIP file format: http://www. // pkware.com/appnote.txt

class zipfile 
{ 

    var $datasec = array(); // array to store compressed data
    var $ctrl_dir = array(); // central directory 
    var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
    var $old_offset = 0;

    function add_dir($name) 

    // adds "directory" to archive - do this before putting any files in directory!
    // $name - name of directory... like this: "path/"
    // ...then you can add files using add_file with names like "path/file.txt"
    { 
        $name = str_replace("\\", "/", $name); 

        $fr = "\x50\x4b\x03\x04";
        $fr .= "\x0a\x00";    // ver needed to extract
        $fr .= "\x00\x00";    // gen purpose bit flag
        $fr .= "\x00\x00";    // compression method
        $fr .= "\x00\x00\x00\x00"; // last mod time and date

        $fr .= pack("V",0); // crc32
        $fr .= pack("V",0); //compressed filesize
        $fr .= pack("V",0); //uncompressed filesize
        $fr .= pack("v", strlen($name) ); //length of pathname
        $fr .= pack("v", 0 ); //extra field length
        $fr .= $name; 
        // end of "local file header" segment

        // no "file data" segment for path

        // "data descriptor" segment (optional but necessary if archive is not served as file)
        $fr .= pack("V",$crc); //crc32
        $fr .= pack("V",$c_len); //compressed filesize
        $fr .= pack("V",$unc_len); //uncompressed filesize

        // add this entry to array
        $this -> datasec[] = $fr;

        $new_offset = strlen(implode("", $this->datasec));

        // ext. file attributes mirrors MS-DOS directory attr byte, detailed
        // at http://support.microsoft.com/support/kb/articles/Q125/0/19.asp

        // now add to central record
        $cdrec = "\x50\x4b\x01\x02";
        $cdrec .="\x00\x00";    // version made by
        $cdrec .="\x0a\x00";    // version needed to extract
        $cdrec .="\x00\x00";    // gen purpose bit flag
        $cdrec .="\x00\x00";    // compression method
        $cdrec .="\x00\x00\x00\x00"; // last mod time & date
        $cdrec .= pack("V",0); // crc32
        $cdrec .= pack("V",0); //compressed filesize
        $cdrec .= pack("V",0); //uncompressed filesize
        $cdrec .= pack("v", strlen($name) ); //length of filename
        $cdrec .= pack("v", 0 ); //extra field length 
        $cdrec .= pack("v", 0 ); //file comment length
        $cdrec .= pack("v", 0 ); //disk number start
        $cdrec .= pack("v", 0 ); //internal file attributes
        $ext = "\x00\x00\x10\x00";
        $ext = "\xff\xff\xff\xff"; 
        $cdrec .= pack("V", 16 ); //external file attributes  - 'directory' bit set

        $cdrec .= pack("V", $this -> old_offset ); //relative offset of local header
        $this -> old_offset = $new_offset;

        $cdrec .= $name; 
        // optional extra field, file comment goes here
        // save to array
        $this -> ctrl_dir[] = $cdrec; 

       
    }


    function add_file($data, $name) 

    // adds "file" to archive 
    // $data - file contents
    // $name - name of file in archive. Add path if your want

    { 
        $name = str_replace("\\", "/", $name); 
        //$name = str_replace("\\", "\\\\", $name);

        $fr = "\x50\x4b\x03\x04";
        $fr .= "\x14\x00";    // ver needed to extract
        $fr .= "\x00\x00";    // gen purpose bit flag
        $fr .= "\x08\x00";    // compression method
        $fr .= "\x00\x00\x00\x00"; // last mod time and date

        $unc_len = strlen($data); 
        $crc = crc32($data); 
        $zdata = gzcompress($data); 
        $zdata = substr( substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
        $c_len = strlen($zdata); 
        $fr .= pack("V",$crc); // crc32
        $fr .= pack("V",$c_len); //compressed filesize
        $fr .= pack("V",$unc_len); //uncompressed filesize
        $fr .= pack("v", strlen($name) ); //length of filename
        $fr .= pack("v", 0 ); //extra field length
        $fr .= $name; 
        // end of "local file header" segment
       
        // "file data" segment
        $fr .= $zdata; 

        // "data descriptor" segment (optional but necessary if archive is not served as file)
        $fr .= pack("V",$crc); //crc32
        $fr .= pack("V",$c_len); //compressed filesize
        $fr .= pack("V",$unc_len); //uncompressed filesize

        // add this entry to array
        $this -> datasec[] = $fr;

        $new_offset = strlen(implode("", $this->datasec));

        // now add to central directory record
        $cdrec = "\x50\x4b\x01\x02";
        $cdrec .="\x00\x00";    // version made by
        $cdrec .="\x14\x00";    // version needed to extract
        $cdrec .="\x00\x00";    // gen purpose bit flag
        $cdrec .="\x08\x00";    // compression method
        $cdrec .="\x00\x00\x00\x00"; // last mod time & date
        $cdrec .= pack("V",$crc); // crc32
        $cdrec .= pack("V",$c_len); //compressed filesize
        $cdrec .= pack("V",$unc_len); //uncompressed filesize
        $cdrec .= pack("v", strlen($name) ); //length of filename
        $cdrec .= pack("v", 0 ); //extra field length 
        $cdrec .= pack("v", 0 ); //file comment length
        $cdrec .= pack("v", 0 ); //disk number start
        $cdrec .= pack("v", 0 ); //internal file attributes
        $cdrec .= pack("V", 32 ); //external file attributes - 'archive' bit set

        $cdrec .= pack("V", $this -> old_offset ); //relative offset of local header
//      &n // bsp; echo "old offset is ".$this->old_offset.", new offset is $new_offset<br>";
        $this -> old_offset = $new_offset;

        $cdrec .= $name; 
        // optional extra field, file comment goes here
        // save to central directory
        $this -> ctrl_dir[] = $cdrec; 
    }

    function file() { // dump out file 
        $data = implode("", $this -> datasec); 
        $ctrldir = implode("", $this -> ctrl_dir); 

        return 
            $data. 
            $ctrldir. 
            $this -> eof_ctrl_dir. 
            pack("v", sizeof($this -> ctrl_dir)).    // total # of entries "on this disk"
            pack("v", sizeof($this -> ctrl_dir)).    // total # of entries overall
            pack("V", strlen($ctrldir)).            // size of central dir
            pack("V", strlen($data)).                // offset to start of central dir
            "\x00\x00";                            // .zip file comment length
    }
} 

?>

Denne fil skal der ikke rettes i.
Næste step følger om et øjeblik i en ny kommentar...
Avatar billede mixeren Nybegynder
21. maj 2003 - 21:18 #31
Næste fil bestemmer du slev hvad hedder, det er den du skal besøge når du vil lave en backup.

<?
include("zip.lib.php");

$zipfile = new zipfile();

$i = 0;

$path = "";
$mapper = Array("mappe1/", "mappe2/");

foreach ($mapper as $mappe) {//Løb de specificerede mapper igennem

$zipfile -> add_dir($mappe);//Opret mapper i zip-fil

# Laver et array med filerne
$handle = opendir($path . $mappe);
    while (($fil = readdir($handle)) !== false) {
    if (($fil != "." && $fil != "..") && strstr($fil, ".")) {
    $filer[] = $fil;
    }
}

closedir($handle);

while($i < count($filer) && $filer[$i] != "") {
$fra = $path . $mappe . $filer[$i];

$fp = fopen($fra, "r");
$file = fread($fp, filesize($fra));
fclose($fp);

$til = $mappe . $filer[$i];
$zipfile -> add_file($file, $til);
$i++;
}

}

$fil_navn = "Fil-backup";
$dags_dato = date ("d-m-Y");

header("Content-disposition: attachment; filename=$fil_navn $dags_dato.zip");
header("Content-type: application/ms-download");
header("Pragma: no-cache");
header("Expires: 0");
echo $zipfile -> file();
?>

Linjen:
$mapper = Array("mappe1/", "mappe2/");
Skal du rette til dine mappe navne, altså skift mappe1 ud med en mappe som finde på din webside.

Upload begge filerne i roden af dit domæne og besøg den med valgfri navn i di browser.
Avatar billede mixeren Nybegynder
21. maj 2003 - 21:25 #32
Sad lige og legede lidt mere med den... hvis du smider de to omtalte filer i en mappe (navn lige meget f.eks zlib eller backup eller sådan noget) også udskifter toppen af "fil 2" med følgende:

<?
include("zip.lib.php");

$zipfile = new zipfile();

$i = 0;

$path = "../";

$mapper = Array("mappe1/", "mappe2/", "/");





Så snupper den roden af dit webhotel med også.. :-)
Avatar billede mr.t.man Nybegynder
21. maj 2003 - 21:55 #33
hmm... den tager ikke roden med...stadig kun de to mapper...
Avatar billede mixeren Nybegynder
21. maj 2003 - 22:00 #34
Begge filer ligger i en mappe?
Og du har skiftet toppen af den side du besøger?

Det er disse to linjer som skal være præcis sådan her:

$path = "../";

$mapper = Array("mappe1/", "mappe2/", "/");
Avatar billede mixeren Nybegynder
21. maj 2003 - 22:06 #35
Prøv evt. at fjerne mapperne så linjen ser sådan her ud:

$mapper = Array("/");

Hvis din mappe hedder "zlib" og filen hedder "backup.php" så skal din sti for at ramme backup filen se sådan her ud:

http://www.ditdomæne.dk/zlib/backup.php

Hvis intet af ovenstående virker så prøv at poste dine rettelser, altså toppen af "fil2".
Avatar billede mr.t.man Nybegynder
21. maj 2003 - 22:09 #36
jep, det er kun mappe1 og mappe2 i roden der bliver taget med... og jo, linierne er præcise som det du har skrevet...
Avatar billede mixeren Nybegynder
21. maj 2003 - 22:11 #37
En ide mere:

Denne linje virker fint på min server....
$mapper = Array("/");

Men denne virker også.
$mapper = Array("./");


Det kunne jo tænkes at din kun vil godtage nummer to...
(Bemærk punktum før frontslash)
Avatar billede mr.t.man Nybegynder
21. maj 2003 - 22:12 #38
med:

$mapper = Array("/");

er det bare en tom zip-fil der downloades...?
Avatar billede mixeren Nybegynder
21. maj 2003 - 22:14 #39
hvad så med:
$mapper = Array("./");
Avatar billede mr.t.man Nybegynder
21. maj 2003 - 22:15 #40
nop.... heller ikke med det punktum virker det....

toppen ser nu således ud:

<?
include("zip.lib.php");

$zipfile = new zipfile();

$i = 0;

$path = "../";
$mapper = Array("./");
Avatar billede mixeren Nybegynder
21. maj 2003 - 22:35 #41
Mystisk... er zipfilen helt tom?

Hvad med følgende:

$path = "";

$mapper = Array("./");

Også skal du flytte filerne til roden af dit website. (samme sted som man smider index.php)
Avatar billede mr.t.man Nybegynder
21. maj 2003 - 22:44 #42
zip-filen er stadig tom... virker din? Kan du så ikke sende den til mig, så jeg kan prøve at smide dem op og se om det så virker?
t_k@get2net.dk
Avatar billede mixeren Nybegynder
21. maj 2003 - 22:49 #43
Ja flere af de forslag jeg er kommet med virker, her er lige et mere:
(Virker også fra roden af mit domæne)

$path = "$DOCUMENT_ROOT";

$mapper = Array("/");
Avatar billede mixeren Nybegynder
21. maj 2003 - 22:50 #44
Hov på din php version hedder det vist $_SERVER["DOCUMENT_ROOT"]
Avatar billede mixeren Nybegynder
21. maj 2003 - 23:02 #45
Så er der et par test filer på vej til din mailboks.

Filerne smides i en mappe som skal befinde sig i roden af dit hotel.
Besøg test1.php og test2.php med din browser.
(begge virker hos mig)
Avatar billede mr.t.man Nybegynder
22. maj 2003 - 07:10 #46
nej, både test1 og test2 giver en tom zip-fil...
Avatar billede mixeren Nybegynder
22. maj 2003 - 11:56 #47
Der er et eller andet der ikke stemmer.... Jeg har lige testet samme to script på en server med samme indstillinger som du har på dit webhotel. Der køre det helt som forventet, laver fint zip filer med indhold også af roden.

Har lavet sendt en ny fil til dig... virker den heller ikke, er jeg bange for at der smutter et eller andet for dig.

Det link du bruger for at fremstille en zip fil, kan du ikke give mig det i en mail. (Fjern evt filer hvis der er noget du ikke ønsker jeg må se.)
Avatar billede mr.t.man Nybegynder
22. maj 2003 - 22:07 #48
Tak for hjælpen mixeren... læg et svar og få point...!
Avatar billede mixeren Nybegynder
22. maj 2003 - 22:12 #49
Det var så lidt.. :-)
Avatar billede ohmish Nybegynder
23. maj 2003 - 00:05 #50
må vi andre se resultatet? :)
Avatar billede mixeren Nybegynder
23. maj 2003 - 00:16 #51
Resultatet er postet længre oppe, min vejledning til scriptet virkede. Resten var desperate forsøg fordi det ikke virkede hos mr.t.man.

Jævnfør 22/05-2003 11:56:39 så prøvede jeg at hente en backup med scriptet og det virkede fint, ergo var det hos ham det gik galt. Jeg sendte en zipfil som var ok fra hans server med mail til ham... og den kunne han heller ikke se indhold i. Det viste sig at han brugte XP's indbyggede zip-program og efter et skift til alm. winzip virkede det.
Avatar billede ohmish Nybegynder
23. maj 2003 - 01:09 #52
aaah ok. go' indsats :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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