| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

03-10-2002, 15:01
|
|
bastian
Registrierter Benutzer
|
|
Registriert seit: Aug 2001
Beiträge: 492
|
|
txt öffnen, vars ändern und wieder speichern...
hallo zusammmen,
möchte mit flash und php ne txt-datei ändern:
PHP-Code:
<?
$datei = fopen("textdatei.txt","w+");
rewind($datei);
fwrite($datei, "&text=" .$text. "&text2=" .$text2.);
fclose($datei);
?>
leider passiert da rein garnix.
wenn ich aber nur eine variable ändere, funzt alles super,
dann sieht das script folgendermassen aus.
PHP-Code:
<?
$datei = fopen("textdatei.txt","w+");
rewind($datei);
fwrite($datei, "&text=".$text."&");
fclose($datei);
?>
wo liegt der fehler?
|

03-10-2002, 15:08
|
|
beebob
PHP Junior
|
|
Registriert seit: Jul 2002
Ort: Köln
Beiträge: 604
|
|
wieso rewind? ich glaub, du solltest das besser mit serialize machen.
wenn du an's ende der datei was anhängen willst, dann fopen("file","a"), oder am anfang: fopen("file","w").
wenn du jeweils ein + ("w+") dranhängst, wird der bisherige dateiinhalt gelöscht. daher ist's auch kein wunder, wenn du kein ergebnis bekommst.
|

03-10-2002, 15:11
|
|
bastian
Registrierter Benutzer
|
|
Registriert seit: Aug 2001
Beiträge: 492
|
|
komisch,
aber warum wird bei der sache mit der einen variable die geänderte textdatei gespeichert?
was muss ich jetzt tun, damit ich mit einem php-script drei oder mehrere vars ändern kann?
gruss
b.
|

03-10-2002, 15:21
|
|
beebob
PHP Junior
|
|
Registriert seit: Jul 2002
Ort: Köln
Beiträge: 604
|
|
ist eigentlich ganz einfach:
PHP-Code:
?php
// sagen wir mal, du legst ein array an ...
$poop = Array("poop1" =>"numero uno","poop2" => "numero duo");
// dann schiebste das array durch den serialisierer ...
$bytestream = serialize($poop);
// array wieder 'loeschen'
$poop="";
// dann öffnest du eine datei. in dem bsp. hier ein temporaeres file ...
$temp = tempnam("/tmp", "temp.");
$fp = fopen($temp,"w");
// jetzt schreibste quasi das array serialisiert in eine datei
fwrite($fp,$bytestream);
fclose($fp);
// jetzt holen wir uns das array wieder ...
$fp1 = fopen($temp,"r");
$poop_string = fread($fp1, filesize($temp));
fclose($fp1);
// .... und unserialisieren das wieder
$poop_new_array = unserialize($poop_string);
// tja, und nun kannst du damit machen, was du willst. z.b. eine addition. wenn du fertig bist, speicherst du einfach wieder wie oben das array wieder ab
// das ist einfach eine testausgabe. falls du lamp unter linux verwendest, müsste das skript gleich laufen. falls nicht, musst du oben den pfad, zum verzeichnis entsprechend aendern
echo $poop_new_array["poop1"]."<br>".$poop_new_array["poop2"];
unlink($temp);
?>
|

03-10-2002, 15:31
|
|
bastian
Registrierter Benutzer
|
|
Registriert seit: Aug 2001
Beiträge: 492
|
|
jo beebob,
das ist ja echt eindrucksvoll,
nur leidre ist mir das zu kompliziert...
kannst du nicht das von mit gepostete script so editieren, das
ich damit drei oder meherere variabeln ändern/abspeichern kann,
oder gehts das nicht?
1000dank+gruss
bastian
|

03-10-2002, 15:42
|
|
beebob
PHP Junior
|
|
Registriert seit: Jul 2002
Ort: Köln
Beiträge: 604
|
|
ok, kann ich. das beispiel ist allerdings nichts anderes, als das, was du vor hast.
sollen in der datei wirklich nur variablen gespeichert werden? oder ist da noch was anderes drin?
|

03-10-2002, 15:48
|
|
bastian
Registrierter Benutzer
|
|
Registriert seit: Aug 2001
Beiträge: 492
|
|
jo beebob,
sind nur vars drinne.
aber wo ich ja jezt einen experten drann hab,
vielleicht kannst du das folgende mit einbauen, weiss nicht rechts wie ichs anstellen sollte.
will 52 variablen ändern folgendes soll "irgendwie" dazu dienen nicht alle 52 vars anzugeben:
bestimmt erkennst du mehr darin als ich :-)
<?
for($i=0;$i<sizeof($HTTP_POST_VARS);$i++) {
$str .= "&".key($HTTP_POST_VARS)."=".current($HTTP_POST_VARS);
next($HTTP_POST_VARS);
}
$str.="&";
echo $str;
?>
vielen dank jetzt schonmal
b.
|

03-10-2002, 15:52
|
|
beebob
PHP Junior
|
|
Registriert seit: Jul 2002
Ort: Köln
Beiträge: 604
|
|
PHP-Code:
<?
$datei = fopen("textdatei.txt","w+");
$text["text1"] = $text;
$text["text2"] = $text2;
fwrite($datei, serialize($text));
fclose($datei);
?>
wieder rausholen:
PHP-Code:
$datei = fopen("textdatei.txt","r");
$text = fread($datei, filesize("textdatei.txt"));
fclose($datei);
$theText = unserialize($text)
echo "&text=".$theText["text1"]."<br>";
echo "&text2=".$theText["text2"]."<br>";
ich glaube, damit erübrigt sich gleich auch die sache mit den 52 variablen.
|

03-10-2002, 15:57
|
|
bastian
Registrierter Benutzer
|
|
Registriert seit: Aug 2001
Beiträge: 492
|
|
hi beebob,
also das erste script schreibt mir die vars, welche ich in flash angebe in die textdatei.txt,
das zweite liest diese dann aus,
richtig?
----------------------------------------------------
edit:
warum erübrigt sich das???
----------------------------------------------------
was sagt/macht das script, welches ich in meinem vorherigem thread gepostet habe?
gruss und allerbesten dank
bastian
|

03-10-2002, 16:08
|
|
beebob
PHP Junior
|
|
Registriert seit: Jul 2002
Ort: Köln
Beiträge: 604
|
|
das dein erstes script müsste folgendes in die datei schreiben:
&var1=poop1&var2=poop2&var3=poop3 ... usw.
die vars müsstest du hier dann mit einem loop überprüfen, indem du den trenner "&" herausnimmst und dann jede 'variable' abspeicherst.
z.b. so:
PHP-Code:
// nehmen wir mal an, wir haben das file ausgelesen und den inhalt in $vars gespeichert
.
.
.
$theVars = explode("&", $vars);
$vCnt = count( $theVars )
for($i=0; $i < $vCnt; ++$i){
$content = explode("=",$theVars[$i]);
echo "VarName: ".$content[0]." | Value: ".$content[1];
}
jetzt nehmen wir mal an, in den values deiner variablen steckt bereits ein '&' oder meherer '=', die eigentlich für was anderes gedacht sind. dann wird's erst richtig kompliziert. deshalb besser serialize. zumal man dann nicht so einfach die datei auslesen kann, weil die daten binär vorliegen.
|

03-10-2002, 16:13
|
|
beebob
PHP Junior
|
|
Registriert seit: Jul 2002
Ort: Köln
Beiträge: 604
|
|
Zitat:
Original geschrieben von bastian
hi beebob,
also das erste script schreibt mir die vars, welche ich in flash angebe in die textdatei.txt,
das zweite liest diese dann aus,
richtig?
----------------------------------------------------
edit:
warum erübrigt sich das???
----------------------------------------------------
was sagt/macht das script, welches ich in meinem vorherigem thread gepostet habe?
gruss und allerbesten dank
bastian
|
1) richtig, richtig
2) du hast alle informationen als echte variablen vorliegen. d.h. du kannst explizit auf die werte zugreifen. z.b. hast du ein assoziatives array arr["Usernames"][$i]. versuch das mal mit der ascii-version ...
3) siehe mein letztes posting
beebob
|

03-10-2002, 16:19
|
|
bastian
Registrierter Benutzer
|
|
Registriert seit: Aug 2001
Beiträge: 492
|
|
mhhh,
also folgendes wird ausgegeben:
a:2  s:5:"text1";s:11:"erste eingabe";s:5:"text2";s:12:"zweite eingabe";}
es sollte aber folgendea nach eingabe ins textfeld herauskommen, eben wie in meinem ersten script:
&text1=erste eingabe&&test2=zweite eingabe&
ist wegen flash eben wichtig....
versuchs mit deinen scripten nochmal, probier mal etwas rum...
dank dir beebob.
|

03-10-2002, 16:24
|
|
beebob
PHP Junior
|
|
Registriert seit: Jul 2002
Ort: Köln
Beiträge: 604
|
|
die 52 geschichte, soll wohl verhindern, dass nicht alle vars an die url übergeben werden (wg. der 4096 bytes beschränkung).
da du aber ja explizit auf deine inhalte zugreifen kannst, ist dieser schritt nicht mehr nötig.
theoretisch brauchst du sogsr gar nix mehr zu übergeben. du erinnerst dich an das erste beispiel mit der temprären datei? diese dateien erhalten automatisch einen eindeutigen namen vom system.
wenn du nun diesen namen per url verschickst, kannst du ihn auf der anderen seite aufnehmen und die serialisierten daten anhand des dateinames auslesen. d.h. du schlägst zwei fliegen mit einer klappe: man 'sieht' die values nicht mehr und man kann grössere datenmengen verarbeiten.
allerings würde ich nicht den kompletten pfad, sondern wirklich nur den dateinamen verschicken. der tempordner kann auch ausserhalb des webroots liegen. "/tmp" bzw "C:\\WINDOWS\\TEMP" würde sich anbieten.
|

03-10-2002, 16:26
|
|
beebob
PHP Junior
|
|
Registriert seit: Jul 2002
Ort: Köln
Beiträge: 604
|
|
Zitat:
Original geschrieben von bastian
mhhh,
also folgendes wird ausgegeben:
a:2 s:5:"text1";s:11:"erste eingabe";s:5:"text2";s:12:"zweite eingabe";}
es sollte aber folgendea nach eingabe ins textfeld herauskommen, eben wie in meinem ersten script:
&text1=erste eingabe&&test2=zweite eingabe&
ist wegen flash eben wichtig....
versuchs mit deinen scripten nochmal, probier mal etwas rum...
dank dir beebob.
|
jo, mach das. ich hab den code allerdings nicht wirklich geprüft. daher keine gewähr. aber das prinzip stimmt.
du darfst halt nicht vergessen, die vars wieder zurückzuschreiben.
am besten, du liest noch folgendes durch:
http://www.php.net/manual/de/function.serialize.php
http://www.php.net/manual/de/function.tempnam.php
weil mehr ist das eigentlich gar nicht.
Geändert von beebob (03-10-2002 um 16:33 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|