Fopen/fwrite/fclose

hai leute

hab mal wieder ne frage :slight_smile:

und zwar:
das backup-script von den codeschnipseln von php-infach

[code]<?php
@set_time_limit(0);
//Verbindung zur Datenbank
$verbindung = mysql_connect(“localhost”,“User”,“Passwort”) or die(“Username/Passwort falsch”);

// MySQL Datenbanken
$dbname = array();
$dbname[]= “datenbank1”;
$dbname[]= “datenbank2”;

// 0: Normale Datei
// 1: GZip-Datei
$compression = 1;

//Falls Gzip nicht vorhanden, kein Gzip
if(!extension_loaded(“zlib”))
$compression = 0;

// Pfad zur aktuellen Datei
$path = ereg_replace ("\\","/",FILE);
$path = dirname ($path);
$path = trim($path);

// Pfad zum Backup
$path .= “/backup/”;

//Speicherart
//0: Nur Server speichern
//1: Zusätzlich per Email versenden
$send = 0;

//Email-Adresse für Backup
$email = “email@adresse”;

//Dateityp
if ($compression==1) $filetype = “sql.gz”;
else $filetype = “sql”;

//Dateieigenschaften
$cur_time=date(“d.m.Y H:i”);
$cur_date=date(“Y-m-d”);

//Pfade zu den neuen Backup-Dateien (fur den Mailversand)
//Nicht verändern_
$backup_pfad = array();

//Erstelle Struktur von Datenbank
function get_def($dbname, $table) {
global $verbindung;
$def = “”;

$def .= "CREATE TABLE $table (\n";
$result = mysql_db_query($dbname, "SHOW FIELDS FROM $table",$verbindung);
while($row = mysql_fetch_array($result)) {
    $def .= "    $row[Field] $row[Type]";
    if ($row["Default"] != "") $def .= " DEFAULT '$row[Default]'";
    if ($row["Null"] != "YES") $def .= " NOT NULL";
    if ($row[Extra] != "") $def .= " $row[Extra]";
    $def .= ",\n";
}
$def = ereg_replace(",\n$","", $def);
$result = mysql_db_query($dbname, "SHOW KEYS FROM $table",$verbindung);
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)) {
      $def .= ",\n";
      if($x == "PRIMARY") $def .= "  PRIMARY KEY (" . implode($columns, ", ") . ")";
      else if (substr($x,0,6) == "UNIQUE") $def .= "  UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
      else $def .= "  KEY $x (" . implode($columns, ", ") . ")";
}

$def .= "\n);";
return (stripslashes($def));

}

//Erstelle Eintäge von Tabelle
function get_content($dbname, $table) {
global $verbindung;
$content="";
$result = mysql_db_query($dbname, “SELECT * FROM $table”,$verbindung);
while($row = mysql_fetch_row($result)) {
$insert = “INSERT INTO $table VALUES (”;
for($j=0; $j<mysql_num_fields($result);$j++) {
if(!isset($row[$j])) $insert .= “NULL,”;
else if($row[$j] != “”) $insert .= “’”.addslashes($row[$j])."’,";
else $insert .= “’’,”;
}
$insert = ereg_replace(",$","",$insert);
$insert .= “);\n”;
$content .= $insert;
}
return $content;
}

//Funktion um Backup auf dem Server zu speichern
function write_backup($val,$newfile,$newfile_data)
{
global $compression,$path,$cur_date,$filetype,$backup_pfad;

$backup_pfad[] = $path.$val.“structur”.$cur_date.".".$filetype;
$backup_pfad[] = $path.$val.“data”.$cur_date.".".$filetype;

if ($compression==1)
{
$fp = gzopen($path.$val.“structur”.$cur_date.".".$filetype,“w9”);
gzwrite ($fp,$newfile);
gzclose ($fp);

  $fp = gzopen($path.$val."_data_".$cur_date.".".$filetype,"w9");
  gzwrite ($fp,$newfile_data);
  gzclose ($fp);
  }

else
{
//ab hier
$fp = fopen ($path.$val.“structur”.$cur_date.".".$filetype,“w”);
fwrite ($fp,$newfile);
fclose ($fp);

  $fp = fopen($path.$val."_data_".$cur_date.".".$filetype,"w");
  fwrite ($fp,$newfile_data);
  fclose ($fp);
  }

//bis hier sollten fehler existieren
}
//Backup per Email verschicken
function mail_att($to, $from, $subject, $message) {
// $to Empfänger
// $from Absender ("email@domain.de" oder “Name email@domain.de”)
// $subject Betreff
// $message Inhalt der Email
global $backup_pfad; //Die Pfade zu den Dateien

if(is_array($backup_pfad) AND count($backup_pfad) > 0)
   {
   $mime_boundary = "-----=" . md5(uniqid(rand(), 1));


  $header = "From: ".$from."\r\n";
  $header.= "MIME-Version: 1.0\r\n";
  $header.= "Content-Type: multipart/mixed;\r\n";
  $header.= " boundary=\"".$mime_boundary."\"\r\n";

  $content = "This is a multi-part message in MIME format.\r\n\r\n";
  $content.= "--".$mime_boundary."\r\n";
  $content.= "Content-Type: text/plain charset=\"iso-8859-1\"\r\n";
  $content.= "Content-Transfer-Encoding: 7bit\r\n\r\n";
  $content.= $message."\r\n";

  //Dateien anhaengen
  foreach($backup_pfad AS $file)
      {
      $name = basename($file);
     $data = chunk_split(base64_encode(implode("", file($file))));
     $len = filesize($file);
     $content.= "--".$mime_boundary."\r\n";
     $content.= "Content-Disposition: attachment;\r\n";
     $content.= "\tfilename=\"$name\";\r\n";
     $content.= "Content-Length: .$len;\r\n";
     $content.= "Content-Type: application/x-gzip; name=\"".$file."\"\r\n";
     $content.= "Content-Transfer-Encoding: base64\r\n\r\n";
     $content.= $data."\r\n";
      }

  if(mail($to, $subject, $content, $header)) return true;
  else return false;
  }

return false;
}

//Backup erstellen
while (list(,$val) = each($dbname))
{
$newfile="# Strukturbackup: $cur_time \r\n# www.php-einfach.de \r\n";
$newfile_data="# Datenbackup: $cur_time \r\n# www.php-einfach.de \r\n";

//backup schreiben
$tables = mysql_list_tables($val,$verbindung);
$num_tables = @mysql_num_rows($tables);
$i = 0;
while($i < $num_tables)
{
$table = mysql_tablename($tables, $i);

  $newfile .= "\n# ----------------------------------------------------------\n#\n";
  $newfile .= "# structur for Table '$table'\n#\n";
  $newfile .= get_def($val,$table);
  $newfile .= "\n\n";


  $newfile_data .= "\n# ----------------------------------------------------------\n#\n";
  $newfile_data .= "#\n# data for table '$table'\n#\n";
  $newfile_data .= get_content($val,$table);
  $newfile_data .= "\n\n";
  $i++;
  }

write_backup($val,$newfile,$newfile_data);
} //End: while

//Backup per Email senden
if($send == 1)
{
$text=“Datenbank-Backup vom: “.date(“d.m.Y H:i”).”\n\n\n www.php-einfach.de PHP lernen leicht gemacht”;
$from = "backup@server.de";

if(!mail_att($email, $from, "Datenbank-Backup ".date(“Y-m-d”), $text))
echo “Es konnte keine Email gesendet werden
”;

}

echo “

Backup ist fertig

”;
?> [/code]

hier die fehlermeldung:

[i][b]
Warning: fopen(/users/asd/www/backup/asd_frei_structur_2011-04-22.sql) [function.fopen]: failed to open stream: No such file or directory in /users/asd/www/backup.php on line 309

Warning: fwrite() expects parameter 1 to be resource, boolean given in /users/asd/www/backup.php on line 310

Warning: fclose() expects parameter 1 to be resource, boolean given in /users/asd/www/backup.php on line 311

Warning: fopen(/users/asd/www/backup/asd_frei_data_2011-04-22.sql) [function.fopen]: failed to open stream: No such file or directory in /users/asd/www/backup.php on line 314

Warning: fwrite() expects parameter 1 to be resource, boolean given in /users/asd/www/backup.php on line 315

Warning: fclose() expects parameter 1 to be resource, boolean given in /users/asd/www/backup.php on line 316[/b][/i]

kommt diese fehlermeldung weil:

  1. fopen… nicht funktioniert
  2. die datei nicht existiert?(> es sollte doch eine neue entstehen)
  3. oder sonst eine fehler existiert?

Ich danke schon mal im voraus.

Es existiert keine Zeile 309. Bitte poste doch den ganzen Ausschnitt oder kennzeichne besagte Zeile.
Mfg :wink2:

So habs markiert: [code]
//ab hier
$fp = fopen ($path.$val.“structur”.$cur_date.".".$filetype,“w”);
fwrite ($fp,$newfile);
fclose ($fp);

  $fp = fopen($path.$val."_data_".$cur_date.".".$filetype,"w");
  fwrite ($fp,$newfile_data);
  fclose ($fp);
  }

//bis hier sollten fehler existieren[/code]

Danke!

Steht doch alles da was du wissen musst.
Und wenn du mit fopen keinen Handler erzeugst den du an die weiteren Funktionen gibts sind die Fehler auch klar.
Wahrscheinlich solltest du erstmal den Ordner erstellen.

[quote=“letsgö”]kommt diese fehlermeldung weil:

  1. fopen… nicht funktioniert
  2. die datei nicht existiert?(> es sollte doch eine neue entstehen)
  3. oder sonst eine fehler existiert?[/quote]
    Antwort 3.

Genauer: Das Verzeichnis, in dem die Datei erstellt werden soll, existiert nicht.
fopen legt die Datei an, aber nicht ggf. noch nicht existierende Verzeichnisse im Pfad zu dieser.

Hei das ist auch cool!! Ich habe gedacht ich komme nicht mehr drauf!
Danke danke danke!!!