ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
232
232
EMPFEHLEN
-
Hallo,
irgendwie hab ich ein merkwürdiges Problem mit meiner Klasse und zwei Arrays darin:
So, nun zu den Problemen: Wenn ich die schon erstellten Dateien lösche, das Skript starte, kommt manchmal der Fehler, dass keine Datei gefunden wurde, heißt also, file_exists() funktioniert irgendwie nicht richtig. Die Dateien werden dann komischerweise trotzdem erstellt, unzwar so, wie es auch sein sollte, die Daten wurden also richtig gespeichert. Wenn ich das Skript jetzt nochmal laufen lasse kommt zwar keine Fehler mehr, aber aus der URL, das in dem Array abgespeichert wurde, ist bloß noch "ha" übrig geblieben. Ich hab aber absolut keine Ahnung wieso, weshalb, warum. Könnt ihr mir bitte helfen?PHP-Code:
class snav{
var $urls;
var $names;
function snav()
{
#Definitonen von Dateispeicherorten, etc.
if(file_exists($this->filename_url))
$this->urls=$this->file->read($this->filename_url); #Array mit vorhanden Daten füllen
else
$this->urls=array(); #wenn Datei nicht vorhanden->leeres Array machen
if(file_exists($this->filename_sites))
$this->names=$this->file->read($this->filename_sites);
else
$this->names=array();
}
function set_link($name,$url)
{
$size=sizeof($this->urls); #jetzige Arraygröße
echo "SIZE: ".$size."<br>";
echo "URL: ".$url."<br>"; #Daten erst ausgeben ("http://wekap.funpic.de/index.php")
$this->urls[$size]=""; #Array an neuer Stelle leeren
$this->urls[$size]=$url; #neue Daten einfügen
echo $this->urls[$size]; #neue Daten ausgeben("ha") ?
$this->names[$size]=$name;
#Daten serialisieren und speichern
return $size; #return ID
}
}
Gruß
cesupa
-
Was soll die Funktion "read()" denn machen! Oder meinst du vielleicht readdir() oder readfile() oder dgl. ?
Als Hirte erlaube mir, zu dienen mein Vater dir. Deine Macht reichst du uns durch deine Hand, diese verbindet uns wie ein heiliges Band! Wir waten durch ein Meer von Blut, gib uns dafür Kraft und Mut. In nomine partris et filii et spiritu sancti...
KLICK HIER ;)
Tokio-Hotel's "Durch den Monsun" mal anders.
(\_/)
(O.o) This is Bunny. Copy Bunny into your signature
(> <) to help him on his way to world domination.
-
30.08.07 10:26 #3
Leider fehlt in deiner Angabe der Klasse anscheinend ne Menge an Informationen - So genau kann ich dein Problem daher nicht rekostruieren. Bevor ich mich draufstürze, möchte ich dir gerne sowieso noch eine "ordentlichere" Schreibweise in PHP ans Herz legen. Damit meine ich nicht, wie man Funktionen und Variablen benennt, aber wie man seinen Code einrückt und lesen und schreiben kann. Habe einfach mal das, was du angegeben hast, ein wenig umgeformt und einen Ticken performanter gemacht.
An deinen Kommentaren zwischen den Zeilen war zu erkennen, dass da noch einiges mehr an Code ist, oder? Wäre nett, wenn du den nicht vorenthälstPHP-Code:<?php
class snav{
var $urls = array();
var $names = array();
function snav()
{
#Definitonen von Dateispeicherorten, etc.
if(file_exists($this->filename_url)) {
# Wo wird $this->file definiert? Wo $this->file->read ?
$this->urls = $this->file->read($this->filename_url); // Array mit vorhanden Daten füllen
}
if (file_exists($this->filename_sites)) {
# Wo wird $this->file definiert? Wo $this->file->read ?
$this->names = $this->file->read($this->filename_sites);
}
}
function set_link($name, $url)
{
$count = count($this->urls);
echo "LAST: " . ($count - 1) . "<br>"; // immer gleich, daher unnötig
echo "URL: {$url}<br>";
$this->urls[] = $url; // neues Element anhängen
echo $this->urls[$count];
$this->names[$size] = $name;
// Daten serialisieren und speichern
// momentane Größe zurückgeben?
return $count + 1;
// oder Index des letzten Elements?
return $count;
}
}
Zu deinem eigentlichen Problem kann ich, wie gesagt, noch nicht viel sagen - Ich denke zur Zeit einfach mal, dass die Datei noch geschrieben wird, während du sie schon wieder lesen möchtest. Oder gibst du die Daten in dem Fall aus, direkt nachdem du sie in das Array eingefügt hast, ohne dass du bereits die Datei neu geschrieben hast? Ist mir ein wenig unklar... Wenn das der Fall sein sollte, könnten nicht akzeptierte Sonderzeichen eventuell die Stringausgabe beenden - Sollte aber eigentlich nicht passieren.
erzeugt auf meiner MaschinePHP-Code:$test = new snav();
$test->set_link('toast', 'http://abc.de');
Also das, was gewollt istCode :1 2 3
Size: 0<br> URL: http://abc.de<br> http://abc.de
Sollte es sich um ein Lese-bevor-geschrieben Problem handeln, könnte die Funktion flock() Abhilfe schaffen. Da du des Weiteren meintest, die Datei wird gelöscht und neu geschrieben, könnte ein Blick auf fopen($file, 'w+'); statt Löschen und Neuerzeugen von Vorteil sein, was die gesamte Geschwindigkeit angeht.
-
Zeig mal deinen Klassen/Funktionsaufruf... Viele meiner Fehler beim OOP habe ich am Anfang gemacht, weil ich eine Funktion in der Klasse gleich genannt habe wie die Klasse selber. PHP interpretiert diese dann als Konstruktor und führt sie bei der Klasseninstanzierung aus. Als ich sie dann noch einmal manuell ausführte ($class_ref->function()) hatte ich plötzlich merkwürdige Fehler wegen dem Doppelaufruf...
-
So, also jetzt die ganze Klasse:
Die Klasse file() hab ich auch geschrieben, aber da wird die Datei auch nur geschrieben bzw. gelesen. Hier nochmal die dafür relevanten Funktionen:PHP-Code:<?
include_once("./data/php/file_io/file.php");
include_once("./data/php/html/selements.php");
class snav{
var $file;
var $filename_url; #Filename of file with all necessary URL's
var $filename_sites; #names
var $urls;
var $names;
function snav()
{
$this->file=new file(); #eigene Klasse um Datei zu schrieben/zu lesen
$this->filename_url="./data/files/URL/urls.txt";
$this->filename_sites="./data/files/URL/sites.txt";
#$this->urls=array();
#$this->names=array();
if(file_exists($this->filename_url))
$this->urls=$this->file->read($this->filename_url); #Daten einlesen (unserialize wird automatisch ausgeführt), Array wird zurückgegeben
else
$this->urls=array();
if(file_exists($this->filename_sites))
$this->names=$this->file->read($this->filename_sites);
else
$this->names=array();
}
function get_url($id)
{
if($id>sizeof($this->urls)-1 || $id<0)
return false;
return $this->urls[$id];
}
function get_name($id)
{
if($id>sizeof($this->names)-1 || $id<0)
return false;
return $this->names[$id];
}
function set_link($name,$url)
{
$size=sizeof($this->urls);
echo "SIZE: ".$size."<br>";
echo "URL: ".$url."<br>";
$this->urls[$size]="";
$this->urls[$size]=$url;
echo $this->urls[$size];
$this->names[$size]=$name;
$this->file->write($this->filename_url,$this->urls); #Datei überschreiben(serialize wird automatisch ausgeführt)
$this->file->write($this->filename_sites,$this->names);
return $size; #return ID
}
function get_links(&$container)
{
if(!is_object($container))
return false;
for($i=0;$i<sizeof($this->urls);$i++)
{
$id=$container->link($this->urls[$i]);
$container->link[$id]->text($this->names[$i]);
}
return true;
}
}
?>
Das ganze rufe ich dann in meiner index.php so hier auf:PHP-Code:function writeFile($dst,$buf,$incp=true)
{
if(is_object($buf) || is_array($buf))
$buf=serialize($buf);
if(($handle=fopen($dst,"w+",$incp)))
{
if(!fwrite($handle,$buf))
return false;
else
return true;
}
else
return false;
}
function readFile($src,$incpath=true)
{
$handle=fopen($src,"r",$incpath);
if($handle)
{
$content=fread($handle,filesize($src));
fclose($handle);
if(!unserialize($conten) && $content!=serialize(false))
return $content;
else
return unserialize($content);
}
else
return false;
}
Hoffe, das bringt euch weiter.PHP-Code:$nav=new snav();
#sonstiger code
$nav->set_link("Startseite","http://wekap.funpic.de/index.php");
#echo $nav->get_url(0);
#$nav->get_links($h->body->div[0]);
#sonstiger code
Gruß
cesupa
-
okay, das Problem hat sich gelöst. Ein Tippfehler in der read()-Funktion der file Klasse hat sich eingeschlichen. Dadurch wurde unserialize() nicht ausgeführt und hat somit alles durcheinander geworfen. Passiert halt

Dennoch Danke für eure Hilfe.
Gruß
cesupa
Ähnliche Themen
-
Warum werden die Daten nicht korrekt in der MySql-Db gespeichert? [UTF-8]
Von VanHellsehn im Forum PHPAntworten: 17Letzter Beitrag: 18.03.10, 20:23 -
Daten werden nicht gespeichert
Von bodoschmidt im Forum .NET DatenverwaltungAntworten: 2Letzter Beitrag: 22.01.08, 00:13 -
Daten werden nicht in der Datenbank gespeichert
Von Dirk_1973 im Forum PHPAntworten: 6Letzter Beitrag: 06.02.05, 20:39 -
php-daten als as-Array gespeichert, aber nicht abfragbar
Von littlerichard im Forum Flash PlattformAntworten: 4Letzter Beitrag: 22.09.04, 15:58 -
Daten werden nicht gespeichert...
Von chpa im Forum PHPAntworten: 11Letzter Beitrag: 04.08.04, 19:49





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren