CSV auslesen, anschließend mit unlink löschen (geht nicht)

Tix

Erfahrenes Mitglied
Hier mein Quelltext:

PHP:
$link = mysql_connect("localhost","***","****");
mysql_select_db("immobilien",$link);
$sql = "TRUNCATE TABLE `verkauf`";
mysql_query($sql,$link);
$row = 0;
$name = $files[$numt];
$handle = fopen ($name ,"r");
while ( ($data = fgetcsv ($handle, 5000, "|")) !== FALSE ) {
$num = count ($data);
$row++;

$sql = "INSERT INTO `verkauf` (     `highlights` , 
                                    `immo_art` , 
                                    `anschrift` , 
                                    `hausnummer` , 
                                    `plz` , 
                                    `ort` , 
                                    `wohnflaeche` , 
                                    `raum` , 
                                    `baujahr` , 
                                    `detail_art` , 
                                    `kaufpreis` ,
                                    `ueberschrift` , 
                                    `aufteilung` , 
                                    `ausstattung` ,
                                    `sonstiges` , 
                                    `bild1` , 
                                    `name1` , 
                                    `bild2` ,
                                    `name2` ,
                                    `bild3` ,
                                    `name3` ,
                                    `bild4` ,
                                    `name4` , 
                                    `bild5` ,
                                    `name5` ,
                                    `bild6` ,
                                    `name6` , 
                                    `bild7` ,
                                    `name7` ,
                                    `bild8` ,
                                    `name8` ,
                                    `bild9` ,
                                    `name9` ,
                                    `bild10` ,
                                    `name10` ,
                                    `bild11` ,
                                    `name11` ,
                                    `bild12` ,
                                    `name12` )
                                    
         VALUES (                     '".$data[36]."' , 
                                    '".$data[37]."', 
                                    '".$data[50]."' , 
                                     '".$data[51]."' , 
                                    '".$data[52]."', 
                                    '".$data[53]."' , 
                                     '".$data[61]."' , 
                                    '".$data[63]."', 
                                    '".$data[67]."' , 
                                     '".$data[78]."' , 
                                    '".$data[90]."', 
                                    '".$data[99]."' , 
                                     '".$data[100]."' , 
                                    '".$data[101]."', 
                                    '".$data[102]."' , 
                                     '".$data[107]."' , 
                                    '".$data[111]."', 
                                    '".$data[112]."' , 
                                     '".$data[116]."' , 
                                    '".$data[117]."', 
                                    '".$data[121]."' , 
                                     '".$data[122]."' , 
                                    '".$data[126]."', 
                                    '".$data[127]."' , 
                                     '".$data[131]."' , 
                                    '".$data[132]."', 
                                    '".$data[136]."' , 
                                     '".$data[137]."' , 
                                    '".$data[141]."', 
                                    '".$data[142]."' , 
                                     '".$data[146]."' , 
                                    '".$data[147]."', 
                                    '".$data[151]."' , 
                                     '".$data[152]."' , 
                                    '".$data[156]."', 
                                    '".$data[157]."' , 
                                     '".$data[161]."' , 
                                    '".$data[162]."', 
                                    '".$data[166]."')";
                                     mysql_query($sql,$link);

   }
fclose ($handle);
unlink($name);

Die CSV-Datei wird komplett ausgelesen, allerdings wird die Datei am Ende nicht gelöscht. Es wird auch keine Fehlermeldung ausgegeben.
Weiß jemand woran das liegen kann?
 
Tja, laut Manual (http://at.php.net/manual/de/function.unlink.php) gibt diese Fehlermeldung im Falle eines Fehlers gar keinen Fehlercode aus, sondern TRUE oder FALSE zurück...

Wenn du Fragen oder Ungewissheiten zu einer Funktion hast, solltest du immer im Manual nachschauen... :rtfm:

Dein Code sollte daher lauten:

PHP:
if ( !unlink($name) )
    echo "Löschen hat nicht funktioniert!";

PHP:unlink - Manual hat gesagt.:
before you could unlink a file created which uses a handle e.g.,

$handle = sqlite('temp.db');

unset($handle); first befofe
unlink($handle);

to avoide permission denied error.
Laut diesem Betrag aus dem Manual musst du die geöffnete Datei vorher noch "unseten" ;) Probiers mal aus

Lg, Yanick
 
Zuletzt bearbeitet:
Dann kommt Warning, unlink not allowed on test.csv obwohl der in dem gleichen verzeichnis sonst alle dateien ohne probleme gelöscht hat
 
unset

(PHP 3, PHP 4, PHP 5)
unset -- Löschen einer Variablen

Will ja nicht nerven, aber ich meine das "unsetten" ist nicht nötig da es sich nicht um eine Variable handelt.
Was er machen sollte ist den Handle zu löschen, aber dies wird ja gemacht mit fclose().

Wenn die Datei richtig eingelesen wird und nur beim löschen ein false zurück kommt, kann es ja nur noch an den chmod liegen.
 
Auch wenn die Datei mittels fclose() geschlossen wird, kann es dennoch sein, das der Dateihandle noch drauf zeigt!
Deswegen sollte man den Handle mittels unset() leeren, und anschliessend die Datei mittels unlink() löschen...

Meine Meinung! ;)
 
hubeR83 hat gesagt.:
Auch wenn die Datei mittels fclose() geschlossen wird, kann es dennoch sein, das der Dateihandle noch drauf zeigt!
Deswegen sollte man den Handle mittels unset() leeren, und anschliessend die Datei mittels unlink() löschen...

Meine Meinung! ;)

Okay Meinung ist Meinung, zudem ist es bei dir die ganz saubere Lösung.

Ob nu unlink oder ftp_delete wenn eines der beiden nicht geht, wird beides wohl kaum
"plötzlich" funktionieren. Ich schätze es hat was mit den zugriffsrechten zu tun.

Und sonst noch eine Vorschlag -> shell_exec('rm Datei'); :suspekt:
 
Folgendes passiert in meinem Script.
Es wird ein Zip-Archiv geöffnet und die Dateien werden in ein Verzeichnis kopiert. Danach sollen alle Dateien gelöscht werden, außer die CSV-Datei, die wird erst geöffnet, bearbeitet, geschlossen und dann gelöscht. Da das Löschen bei den anderen Dateien auch funktioniert, kann es ja eigentlich nicht an fehlenden Rechten liegen, oder sehe ich das falsch?
 
Zurück