Warning: fopen("", "r") - No error in .....
Michael
- php
Hallo,
Entschuldigt bitte, dass ich mich wieder an Euch wenden muss, aber es ist ein Problem beim Öffnen von Dateien aufgetreten, den ich mir nicht erklären kann.
Ich habe die Anweisungen zum Öffnen bzw. Schliessen von Dateien in eigene Funktionen ausgelagert:
function datei_oeffnen_r($datei_name)
{
if(file_exists($datei_name))
{
$datei_zeiger = fopen($datei_name, "r") or die ("Datei $datei_name kann nicht geöffnet werden.");
flock($datei_zeiger, LOCK_EX);
return ($datei_zeiger);
}
}
function datei_schliessen($datei_zeiger)
{
flock($zeiger,LOCK_UN);
fclose ($datei_zeiger);
}
Wenn auf eine Datei zugegriffen wird, geschieht dies beispielsweise über folgende Funktion:
function statistik_anzeigen($datei_name)
{
[ ... ]
datei_oeffnen_r($datei_name);
$datei_zeiger = func_get_arg(1);
$anzahl_eintraege = count(file($datei_name)) - 1;
$datei_schliessen($datei_zeiger);
[ ... ]
}
Nun erhalte ich aber folgende Warnung:
Warning: fopen("", "r") - No error in C:\FoxServ\www\hp\PHP_formulare_funktionen.php on line 326
und es wird der die-Zweig ausgeführt => Datei kann nicht geöffnet werden. Die Warnung besagt, dass kein Fehler vorliegt. Trotzdem wird die Statistik nicht angezeigt.
Was ist noch nicht ganz richtig implementiert ?
Meines Erachtens habe ich doch alle notwendigen Parameter entsprechend übergeben.
Zudem bin ich mir bei der Anweisung $datei_zeiger = func_get_arg(1) nicht ganz sicher, ob sie so funktoniert.
Nochmals vielen Dank für Eure Hilfe :-)
Gruss, Michael
Hi,
$datei_zeiger = fopen($datei_name, "r") or die ("Datei $datei_name kann nicht geöffnet werden.");
Warning: fopen("", "r")
und es wird der die-Zweig ausgeführt => Datei kann nicht geöffnet werden.
Was sollte zwischen den "" im fopen stehen?
Was sollte laut Deinem Code in der die-Ausgabe zwischen "Datei" und "kann" stehen?
cu,
Andreas
Hallo Andreas,
Die zu öffnende Datei wird über die Variable $datei_name bestimmt und sollte somit feststehen. Damit steht auch die Variable $datei_zeiger fest.
Die Ergänzung $datei_name im die-Zweig habe ich testhalber entfernt, führt aber nichtsdestotrotz zum gleichen Ergebnis (Warnung).
Gruss, Michael
Hi,
Die zu öffnende Datei wird über die Variable $datei_name bestimmt und sollte somit feststehen.
Steht denn auch tatsächlich ein Dateiname drin in $datei_name?
cu,
Andreas
Hallo Andreas,
Die verwendeten Variablen, die immer gleich bleiben, habe ich in der Datei CSV_gaestebuch_config definiert:
<?php
$datei_name = "CSV_gaestebuch_eintraege.csv";
$eintraege_pro_seite = 10;
[ ... ]
?>
Diese Datei wird in die Datei PHP_gaestebuch_funktionen.php eingebunden. Diese Datei (PHP_gaestebuch_index.php) ist in die Startdatei unseres Gästebuches (PHP_gaestebuch_index.php) integriert:
<html>
<head>
[ ... ]
</head>
<body>
<?php
include "PHP_formulare_funktionen.php";
$auswahl = $_GET['auswahl'];
switch ($auswahl)
{
case "eintraege_lesen":
{
eintraege_lesen();
break;
}
case "administrator":
{
administrator();
break;
}
default:
{
if ($speichern == false)
formular_ausgeben();
else
eintrag_speichern();
break;
}
}
?>
</body>
</html>
Ich habe die Aufteilung deshalb so untergliedert vorgenommen, um die einzelnen Dateien übersichtlicher zu halten.
Gruss, Michael
Hello,
abgesehen davon, dass die Funktion eigentlcih keinen Fehlerwert zurückgibt, wenn die Datei nicht existiert und wenn ein Locking nicht möglich ist, bis zum Timeout wartet...
Hast Du Dir das Filehandle testhalber schon mal ausgeben lassen, anstrelle des die()-Zweiges?
Auf welchem Betriebssystem läuft das ganze?
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin!
Ich habe die Anweisungen zum Öffnen bzw. Schliessen von Dateien in eigene Funktionen ausgelagert:
Warum das denn? Ok, es bringt dir einen absolut _WINZIGEN_ Vorteil: Statt fopen() und flock() nacheinander aufzurufen, muß du jetzt nur noch dauei_oeffnen_r() aufrufen, aber tatsächlich gesehen verkomplizierst du die Dinge damit eigentlich nur unnötig.
Abgesehen davon hast du massive Fehler in deine Auslagerung eingebaut:
function datei_oeffnen_r()
{
if(file_exists($datei_name))
{
$datei_zeiger = fopen($datei_name, "r") or die ("Datei $datei_name kann nicht geöffnet werden.");
flock($datei_zeiger, LOCK_EX);
return ($datei_zeiger);
}
else? Was passiert dann? Kein definierter Rückgabewert!
}
function datei_schliessen($datei_zeiger)
{
flock($zeiger,LOCK_UN);
$zeiger ist nicht definiert.
fclose ($datei_zeiger);
Keine Fehlerabfrage.
}
function statistik_anzeigen($datei_name)
{
[ ... ]
datei_oeffnen_r($datei_name);
Rückgabewert (der Dateizeiger) wird nicht gespeichert.
$datei_zeiger = func_get_arg(1);
Damit kriegst du das zweite der Funktion statistik_anzeigen() übergebene Argument - das ist mit Sicherheit nicht der Dateizeiger.
$anzahl_eintraege = count(file($datei_name)) - 1;
Hier liest du die komplette Datei in ein temporäres Array, zählst dann deren Einträge und wirfst das Array dann wieder weg. Sehr uneffektiv!
$datei_schliessen($datei_zeiger);
Und hier schließt du die Datei dann wieder (mit einem falschen Dateizeiger wird das allerdings nichts), ohne irgendwas aus ihr gelesen zu haben. Warum das? file() funktioniert auch ohne Dateiöffnen/-schließen.
[ ... ]
}Nun erhalte ich aber folgende Warnung:
Von mir erhälst du auch eine Warnung: Junge, so wird das nichts! :)
Mein Tipp: file() ist eine tolle Funktion. Man übergibt ihr einen Dateinamen und erhält als Ergebnis ein Array mit allen Zeilen der Datei darin. Das könnte für dein Vorhaben bestens geeignet sein: Gästebuch komplett in das Array einlesen, und fertig. Alle weiteren Dinge werden dann nicht mit der Datei, sondern mit dem Array geregelt. Am Skriptende bei Veränderungen wieder speichern. Und ansonsten: Mach dein Skript nicht unnötig komplizierter, als es sein muß. Dinge in Funktionen auszulagern mag toll sein, aber man kann es auch übertreiben!
- Sven Rautenberg