Erstellen und Löschen von Dateien

2Pac

Erfahrenes Mitglied
Aber mal eine andere Frage. Habt Ihr Ahnung von PHP und Erstellen von Löschen von Dateien?

Könnt Ihr mir erklären, warum wenn ich eine Datei (PDF) erzeugen lassen habe mit einem Namen den ich vorher eingebe z. B. 06-2009.pdf (für Rechnungen), diese Datei auch wunderbar erzeugt wird, ich diese aber nicht mit einem unlink wieder löschen kann? Er führt das unlink aus, aber die Datei ist nach wie vor auf dem Server vorhanden.

Hab schon probiert der Datei chmod($file, 0777) beim erstellen zu geben bzw. auch der ausführenden Datei. Aber er löscht mit den Rechten die vorhandene Datei einfach nicht. Die Variablen werden richtig übergeben, habe ich bereits überprüft. Auch chmod 0666 ging nicht.

Jemand eine Idee?

Bzw. wenn ich die Dateien in einen unterordner im Verzeichnis erstellen lassen will meckert er auch voll rum, dass die ich das nicht könnte. In dem Hauptverzeichnis ist ein Verzeichnisschutz per access angelegt über meinen provider webinterface. Muss ich da vielleicht irgendwie benutzername und pw mit integrieren um das ausführen zu können?

Wäre nett wenn ihr mal was dazu schreibt, Ahnung habt ihr ja anscheinend^^
 

Gumbo

Erfahrenes Mitglied
Vermutlich stimmt da etwas mit dem Eigentümer der Datei nicht. Wer erzeugt sie denn und wer will sie löschen?
 

2Pac

Erfahrenes Mitglied
Ein PHP Script erzeugt Sie natürlich und löschen soll es das auch. Ausführen tu ich das Script als einzige Person. Das erstellen funktioniert ja auch, solange ich keine Unterordner angebe oder ich benutze den falschen syntax..?

ich hab es so versucht

$filename = "$nummer-$jahr.pdf";
unlink($filename);

und beim erstellen klappt es ja mit fopen...
Aber sobald ich als Pfad beim erstellen /rechnungen/$nummer-$jahr.pdf nehme z.b. bekomme ich die meldung ich wäre nicht berechtigt das auszuführen...

Kann das am htaccess liegen?
 

Gumbo

Erfahrenes Mitglied
Was wird denn bei Folgendem ausgegeben:
PHP:
$filename = "$nummer-$jahr.pdf";
var_dump(touch($filename));
var_dump(unlink($filename));
 

2Pac

Erfahrenes Mitglied
Hallo nochmal.
Hier mal der genaue Quelltext:

Erstellung der Datei
Code:
mysql_query("INSERT INTO rechnungen (an, nr, jahr, zeitraum, sponsorid, bezahlt) VALUES ('$name', '$rechnungsnummer', '$rechnungsjahr', '$zeitraum', '$id', '0')");

printf ("<p>Es ist %d\n Rechnung erfolgreich angelegt worden!</p>", mysql_affected_rows());

$r_datum = date('d.m.Y', time());
$filename = "$rechnungsnummer-$rechnungsjahr.pdf";
if(!file_exists($filename))
{
 $datei = fopen($filename, "w");
 chmod ($filename, 0777);
  $dokument = pdf_open($datei);
    pdf_begin_page($dokument,595,842);
   // hab mal die ganzen Befehle rausgenommen, der Übersicht halber, weil die ja funktionieren
   pdf_end_page($dokument);
  pdf_close($dokument);
 fclose($datei);
}
else
{
 echo "Datei existiert bereits!";
}


Löschen der Datei:
Code:
$abfrage2 = "SELECT * FROM rechnungen WHERE id='$sponsorid'";
$ergebnis2 = mysql_query($abfrage2);

while($row = mysql_fetch_object($ergebnis2))
{
 $nummer = $row ->nr;
 $jahr = $row->jahr;

 $filename = "$nummer-$jahr.pdf";
 var_dump(touch($filename));
 var_dump(unlink($filename));
}

mysql_query("DELETE FROM rechnungen WHERE id='$sponsorid'");

printf ("<p>Es ist %d\n Datensatz erfolgreich gelöscht worden!</p>", mysql_affected_rows());

mysql_close($verbindung);

Eigentlich wollte ich die Dateien auch in den Ordner rechnungen speichern durch
Code:
$filename = "/rechnungen/$rechnungsnummer-$rechnungsjahr.pdf";

Aber dann erstellt er die Rechnung trotzdem im Hauptordner, nicht im angegebenen Unterordner? Zumal gesagt werden muss, er gibt der Datei trotz dem chmod 0777 trotzdem nur 0666?

Der Hauptordner unterliegt einem htaccess Schutz wie gesagt. Hat von mir aber die Rechte 777 bekommen über das FTP Programm. Der Unterordner ebenso, genauso wie die PHP Datei zum Erstellen und zum Löschen.

ICh versteh nicht warum es nicht geht?
 

Loomis

Mitglied Bunt
Poste dochmal das was
PHP:
 var_dump(touch($filename));
 var_dump(unlink($filename));
auf dem Bildschirm schreibt, wie Gumbo oben schon sagte.