datei öffnen, zeichen zählen, datensatz einfügen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
beispiel
code
datei
ersetzen
file
funktion
hallen
http
index
inhalt
laden
liegen
platzhalter
schritt
speichern
string
test
vorlage
zeichen
-
hi,
wie kann ich es bewerkstelligen, das eine datei geöffnet wird, deren zeichen ausgelesen werden und an einer bestimmten stelle dann ein datensatz der über ein formular eingegeben wird eingetragen wird?
selber bin ich in etwa soweit:
datensatzerneuerung.php
<form action="datensatzerneuerung.php"> pfadangabe:<input type="text" value="http://" id="pfad"> <input type="submit" value="senden">
^^ihr seht ich kann nicht coden
also das script sollte aus einer datei bestehen, aber nichts tun, solange über die formulareingabe nichts angegeben wird.
wen jetzt über das formular was eingeben wird, bsp.: http://www.lima-city.de soll die datei index.php geöffnet werden und dort nach dem 3523ten zeichen http://www.lima-city.de eingefügt werden, ohne das darauffolgende zeichen überschrieben werden.
dannach noch datei speichern und schließen...
ich hab mir nämlich ein "galerie-script" zusammengestellt, und für jede neue kategorie die ich eröffne muss ich das script anpassen (Titel der Seite, Pfadangabe zu den scripten, usw...) und damit man nicht jedesmal alle stellen suchen muss im "grundscript" benötige ich solch ein script.
jemand eine idee?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also, wenn ich Dich richtig verstanden habe, hast Du eine Vorlage in der einfach nur http://www.lima-city.de/ eingefüght werden müsste und da nach die Vorlage wo anders gespeichert werden soll?
Ist nicht grade effizent, vor allem weil Du den Script warscheinlich hier bei Lima betreiben willst, würde ich Dir eher raten das ganze mit MySQL zu machen. Geht einfacher und man häuft keine Dateien an. -
nein ich will nichts wo anderst speichern...
meine vorlage besteht aus einem verzeichnis mit 4unterverzeichnisen und 6dateien.
das script kann theoretisch überall problemlos betrieben werden weil es fast nur aus relativen pfadangaben besteht, allerdings müssen manche variabeln eben angepasst werden, vor allem der Seitentitel.
soweit bin ich gestern jetzt noch gekommen:
<?php $Datei = fopen("test.txt", "r+"); fseek($Datei, 45); echo fgetc($Datei); fclose($Datei); ?>
damit kann ich in der datei die stelle suchen, an der die variable definiert werden muss.
bsp:
in der index.php soll der Seitentitel "Egons Bilder" heißen.
index.php
<html> <head> <title></title> </head>...
nun schneide ich den completten code aus bis hin zu <titele> und speicher die datei. anhand der byte anzahl kann man dann sehen wieviele zeichen in dem script sind (glaub ich, beim test hats funktioniert)
und dannach fügt man einfach das ausgeschnittene wieder ein und speichert.
nun weiß ich das in dem beispiel 23 zeichen verwendet werden und setze den dateizeiger auf das 23te zeichen:
fseek($Datei, 23);
jetzt muss ich nur noch mit fwrite(???) den seitentitel hinzufügen und abspeichern.
an dem punkt hänge ich momentan fest, bzw. ich hab keine zeit mehr weiter zu googln weil ich zur abreit muss
falls jm. die lösung zur hand hat, bitte beachten, das der neu geschriebene text nach dem dateizeiger eingefügt werden muss ohne den dahinterliegenden text zu überschreiben.
gruß -
Definiere doch einfach Platzhalter, zum Beispiel {title}, den kannst Du dann einfach via str_replace() ersetzen:
$str = join(file('_Pfad_')); // lädt die Datei in einen String $str = str_replace('{title}', 'Seitenname', $str); // ersetzt im String {title} durch Seitenname
Dann musst Du nur noch den gesamten String in eine Datei speichern, bzw. die Datei überschreiben. -
danke,
aber bei mir kam jetzt gerade bahnhof an.
hab über google rausgefunden das man nicht schreiben kann ohne den dannachfolgenden inhalt zu überschreiben.
sondern man muss irgendwie den inhalt nach dem dateizeiger in ein arry oder in ein file laden. (eher file, weil das script mehrere dateien gleichzeitig bearbeiten soll)
dannach sein zeug reinschreiben und dannach wieder den inhalt des erzeugenten files dazuschreiben.
aber wie das geht, kp!
ich denke mal der code sollte für checker kein all zu großes problem sein.
wäre es vlt. einem möglich mein code so anzupassen das er funktioniert?
<?php $Datei = fopen("index.php", "r+"); fseek($Datei, 23); fwrite($Datei, "Oh ja das ist die Egong Datei"); fclose($Datei); ?>
index.php:
<html> <head> <title></title>
-
Also hier mal ein Beispiel Schritt für Schritt:
vorlage.html
<html> <head> <!-- HeadInhalt mit beliebig vielen Zeichen --> </head> <body> <!-- Bodyinhalt mit beliebig vielen Zeichen --> {platzhalter} <!-- Rest des Bodyinhalts --> </body> </html>
Nun laden wir die vorlage.html in einen String und ersetzen den Platzhalter:
<?php $str = join(file('vorlage.html')); // File in einen String laden $str = str_replace('{platzhalter}', 'Ganz viel Inhalt', $str); // Platzhalter druch Inhalt ersetzen ?>
Die Funktion file() lädt eine Datei Zeile für Zeile in ein Array, dieses wandeln wir mit join() in einen String, damit wir mit str_replace den Platzhalter durch unseren Inhalt ersetzen können. Nun müssen wir nur noch den String in eine Datei speichern und wie das geht weißt Du ja bereits. Es ist kein fopen() merh notwendig, genau so wie seek() und so weiter. Du musst nur noch die Datei überschreiben und schon hast Du das gewünschte Ergebniss. -
ok ,gut erklärt und klingt wesentlich einfacher!
habs mal ausprobiert, funktioniert aber nicht
wahrscheinlich komm ich bei dem überschreiben nicht ganz klar.
muss ich unter dein php script noch fwrite(vorlage.html, §str); oder was ähnliches schreiben? -
ups, ganz ohne fopen gehts nun doch net... so kann man sich irren...
also:
$str = join(file('vorlage.html')); $str = str_replace('{platzhalter}', 'Ganz viel Inhalt', $str); $file = $fopen('vorlage.html', 'r+'); fwrite($file, $str); fclose($file);
-
hä?
Es würde doch reichen, die Datei
strange schrieb:
vorlage.html<html> <head> <!-- HeadInhalt mit beliebig vielen Zeichen --> </head> <body> <!-- Bodyinhalt mit beliebig vielen Zeichen --> {platzhalter} <!-- Rest des Bodyinhalts --> </body> </html>
nach deinem vorbild zu machen und dann
<?php echo str_replace('{platzhalter}', 'Hall ich bin der Titel', file_get_contents('vorlage.html')); ?>
Das funktioniert bei urlfopen auch mit Daten von anderen Servern
Beitrag zuletzt geändert: 20.5.2009 17:26:08 von zenks -
strange schrieb:
ups, ganz ohne fopen gehts nun doch net... so kann man sich irren...
also:
$str = join(file('vorlage.html')); $str = str_replace('{platzhalter}', 'Ganz viel Inhalt', $str); $file = $fopen('vorlage.html', 'r+'); fwrite($file, $str); fclose($file);
habs mir mal angepasst und siehe da:
Fatal error: Function name must be a string in /home/ -
Das kann aber nicht an strages Code liegen, da er keine Funktion definiert. Poste mal den Code, dann können wir dir helfen.
Nur so wie stranges code im mom ist müsste er vorlage.html 2mal ausgeben, einmal ersetzt und einmal nicht... -
zenks schrieb:
Das kann aber nicht an strages Code liegen, da er keine Funktion definiert. Poste mal den Code, dann können wir dir helfen.
Nur so wie stranges code im mom ist müsste er vorlage.html 2mal ausgeben, einmal ersetzt und einmal nicht...
hier bitte:
<?php $str = join(file('index.php')); $str = str_replace('{platzhalter}', 'Ganz viel Inhalt', $str); $file = $fopen('index.php', 'r+'); fwrite($file, $str); fclose($file); ?>
-
$file = $fopen('index.php', 'r+');
fopen ist eine Funktion!
nimm also das $ weg:
$file = fopen('index.php', 'r+');
oder probier mal meinen Code ;)
<?php echo str_replace('{platzhalter}', 'Hall ich bin der Titel', file_get_contents('vorlage.html')); ?>
-
hey super,
jetzt hat es funktioniert!
bei deinem code öffnet es die plapla.php und gibt ihr den angegebenen titel.... jedoch passiert mit dem platzhalter aus der index.php nichts -
erstmal schön, dass es jetzt funktioniert, nur versteh ich nicht wieso mein Code nicht funktioniert?
Ob ich die Datei nun über file als Array einlese und dann zu einem string mache, oder sie direkt als string einlese, so wie in meiner Version, macht für mich nur insofern einen Unterschied, dass meine Version weniger umständlich ist. Wenn du mehrere Platzhalter hast musst du natürlich auch mehr ersetzten.
file_get_contents lässt nicht vorher den PHP Interpreter laufen, dass kannst du dann mit ob_get_contents ... machen, wenn du's interpretieren lassen willt.
echo str_replace(array('{platzhalter1}', '{platzhalter2}'), array('Text1', 'Text2'), file_get_contents('index.php'));
Beitrag zuletzt geändert: 20.5.2009 17:56:18 von zenks -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage