hey.
Ich such nach einer Alternative zum PHP5 Befehl "file_put_contents" aber in PHP4.
Kennt da jemand eine Funktion die dasselbe in nur PHP4 machen würde? Aus dem Handbuch werd ich irgendwie nicht schlau....
greets,
A2k
Druckbare Version
hey.
Ich such nach einer Alternative zum PHP5 Befehl "file_put_contents" aber in PHP4.
Kennt da jemand eine Funktion die dasselbe in nur PHP4 machen würde? Aus dem Handbuch werd ich irgendwie nicht schlau....
greets,
A2k
Du kannsts mehrschrittig in der traditionellen Art machen.
Alternativ könntest du die Funktion aber auch selbst schreiben.PHP-Code:
<?php
$file = "datei.txt";
$content = "Dieser tolle Text wird in die Datei geschrieben.";
$handle = fopen($file, "w");
fwrite($handle, $content);
fclose($handle);
?>
....? Wie soll ich mir denn nen PHP5 basierenden Code in PHP4 selber coden?
Ich brauch den Befehl für mein Editor-Popup auf meiner Website, kann mir aber grad nicht so richtig vorstellen wie ich den einbauen kann. Wäre also sehr dankbar wenn mich da wer unterstützen könnte ;)
BTW, gilt eigentlich "get_file_contents" in PHP4?
THX,Code:<p>
<?php
if($_POST['text'])
file_put_contents('index_news.txt', $_POST['text']);
?>
<form method="post" action="news_edit.php" name="source_edit" id="formular">
<table>
<tr>
<td style="padding:2px"><strong>News_Index.txt Source Inhalt:</strong></td>
</tr>
<tr>
<td style="padding:2px">
<textarea cols="140" rows="15" name="text"><?php echo file_get_contents('index_news.txt'); ?></textarea>
</td>
</tr>
<br />
<tr>
<td align="center" style="padding:2px">
<input name="submit" type="submit" id="speichern" value="Speichern" />
<input name="loeschen" type="reset" id="loeschen" value="Zurücksetzen" />
<br />
<input name=sbm type=submit value=Close onClick=window.close() />
</td>
</tr>
</table>
</form>
</p>
A2k
Wurde dir doch schon hier erklärt...
file_put_contents ist keine wirklich neue Funktion, sie setzt quasi einfach nur mehrere Funktionen aneinander, wie Dingsi es halt schreibt. Wenn du also den von ihm beschriebenen Code oben in deine PHP-Datei einfügst, klappt's auf jeden Fall. Oder halt in eine Extra-Datei, und per require ("functions.php") einbinden.
1. Die Funkton heißt "file_get_contents".Zitat:
BTW, gilt eigentlich "get_file_contents" in PHP4?
2. Ab 4.3.0, laut Manual. Mit älterer Version, analog zu oben:
PHP-Code:
if(!function_exists("file_get_contents"))
{
function file_get_contents($filename)
{
$file = file ($filename);
return implode ('\n', $file);
}
}
if (isset ($_POST['text']))Zitat:
Code:if($_POST['text'])
ist afaik sauberer.
Alternativ kann man einige neue PHP Funktionen mit dem Pear Kompatibilitätspaket in älteren Versionen verfügbar machen.
hmm... kann mir da einer sagen warum ich da keine stripslashes()-funktion einbauen kann?
Code:<?php
if(!function_exists("file_get_contents"))
{
function file_get_contents($filename)
{
$file = file ($filename);
return implode ('\n', $file);
}
}
function file_put_contents($n,$d) {
$f=@fopen($n,"w");
if (!$f) {
return false;
} else {
stripslashes(
fwrite(($f),$d);
fclose($f);
)
return true;
}
}
?>
Vermutlich weil Funktion und Klammern falsch verschachtelt sind.
Müsste richtig sein.PHP-Code:
function file_put_contents($n,$d) {
$f=@fopen($n,"w");
if (!$f) {
return false;
} else {
fwrite($f,stripslashes($d));
fclose($f);
return true;
}
Tipp: Funktionsparamenter besser beschriften, bessere Einrückung und einen Editor mit Syntaxhighlighting verwenden ;)
Ups, wirklich? Habe ich nicht geschaut/dran gedacht, aber wenn's so ist, einfach statt "return implode ('\n', $file);" "return implode ('', $file);" verwenden. :)
Wirst du ja dann sehen, A2k, wenn in der Datei immer gleich zwei Zeilenumbrüche hintereinander sind. <_<'
Und ich würde btw auch vor die Funktionsdefinition von file_put_contents eine "if (! function_exists ("file_put_contents"))"-Abfrage machen. Könnte sonst evtl. Probleme geben, wenn du auf PHP 5 aufrüstest. ^^'
Klar, ich. <_< Weil bei Strings in einfachen Anführungszeichen Escape-Sequenzen (außer "\'") grundsätzlich nicht erkannt werden, ich aber zu dumm war, mir das richtig zu merken. -_- Ich dachte, Zeilenumbrüche würden schon gehen, bei doppelten Anführungszeichen könnte man ja auch einfache Zeilenumbrüche verwenden. Tja, so kann man sich irren...-_-
Dieses file_put_contents wird noch mein Waterloo...
Aber Zeilenumbrüche sind nach den "\n"s auch vorhanden, oder wie?
nur so nebenbei, ich hab das mit mitakis aufräum-aktion von meinen funktionen und klammern getestet, und es läuft alles wunderbar.
Also gleich nochmal danke an alle die mir hier mal wieder ne PHP nachhilfestunde gegeben haben ^__^
äh, nur kurz ein kleines html problem möcht ich schnell anschneiden (nur gaaaanz klein).
wie kann ich die länge einer rahmenlinie so definieren, dass sie automatisch über den gesamten bildschirm geht?
ich habe einen text welcher von einer rahmenlinie unterstrichen wird, diese soll jedoch nicht NUR den text unterstreichen, sondern gleich den gesamten bildschirm von links nach rechts teilen. (Es darf aber nicht "<hr> sein!)
da kommt mir automatisch derbefehl in den sinn, aber rahmenlinien gibt es anscheinend keine definition durch "width". Wie kann ich also die länge einer rahmenlinie definieren?Code:<border-bottom width="100%">
Nachdem ich hier ein paar gute antworten bekommen hab, seid ihr alle aus dem Nachhilfeunterricht entlassen :D
THX @ ALL
A2k
border bottom
Rahmenlinien gehen immer über die gesamte Breite des Elements zu dem sie gehören. Wenn du also ein div oder p über die gesamte Bildschirmbreite anlegst und einen Rahmen verpasst geht der auch über den ganzen Bildschirm.
Tja, die Idee hatte ich grundsätzlich ja auch, aber leider funktioniert das nicht.
Ich habe in meiner CSS-Datei die Klasse ".line" so definiert:
Wenn ich jetzt also einen kurzen Text im <Body> stehen hab, möchte aber dass die gesamte Länge des Bildschirms mit der Rahmenlinie durchzogen wird, funktioniert dass so nicht.Code:.line { width:100%;
border-bottom:1px solid #99CCFF;
padding-bottom:1px;
}
zB:
Nun sollte das Wort Testüberschrift mit einer Rahmenlinie über den ganzen Bildschirm unterstrichen sein. "Sollte" wohlgemerkt, weil sie ist es nicht.... kA warum :confused:Code:<html>
<head>
</head>
<body>
<div class="line">
<p><strong>» Testüberschrift:</strong></p>
</div>
</body>
</html>
Thx,
A2k
Ist sie gar nicht unterstrichen?
Nun, entweder liegt es daran, dass du deine CSS Datei nichtmal verlinkt hast.
Wenn doch hilft eventuell die verwendung eines standardkonformen Modus durch Doctype-Angabe:
oderHTML-Code:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Nebenbei: sofern das <div> nicht notwendig ist kannst du die Klasse auch auf das <p> anwenden.HTML-Code:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
Die Angabe 100% dabei außerdem nicht notwendig, da Blockelemente immer 100% breit sind.
Es wird schon unterstrichen, aber eben nur in der länge des textes.
Das war nur ein Beispiel im die Wiedergabe im <div> zu zeigen, in wirklichkeit ist das CSS verlinkt aber anstelle eines strict.dtd oder loose.dtd verwende ich (wegen 99% xHTML meiner Site) den transitional Modus:
Aber letztendlich ist es nicht soooo wichtig, wär aber nett wenn man das irgendwie richten könnte.Code:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Merci,
A2k
Hier tritt ein Sonderfall ein. Du musst, html und body die Eigenschaft width:100%; geben, damit auch das div 100% breit werden kann.Zitat:
Es wird schon unterstrichen, aber eben nur in der länge des textes.
Das war nur ein Beispiel im die Wiedergabe im <div> zu zeigen, in wirklichkeit ist das CSS verlinkt aber anstelle eines strict.dtd oder loose.dtd verwende ich (wegen 99% xHTML meiner Site) den transitional Modus:
Oder eben beim div die 100% Eigenschaft weglassen, da - wie gesagt - Blockelemente, d.h. auch <p> und <div> immer 100% breit sind bzw. sich an die Grenzen links und rechts anpassen. Dann klappts auch mit dem border.
*hust* Schonmal dran gedacht, für Überschriften auch die Tags zu verwenden, die dafür gedacht sind? Folgendes funktioniert einwandfrei:
HTML-Code:<h1 style="border-bottom:1px solid #99CCFF;">Test</h1>
Ja, es ist hoffentlich wirklich nur ein Beispiel.
Außerdem sollte man dazusagen, dass für <h*> auch keine Extraklasse benötigt wird, sondern die Angaben gleich für das Element bestimmt werden können.