Ergebnis 1 bis 19 von 19

Thema: [PHP] file_put_contents in PHP4

  1. #1

    [PHP] file_put_contents in PHP4

    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

  2. #2
    Du kannsts mehrschrittig in der traditionellen Art machen.

    PHP-Code:
    <?php
    $file 
    "datei.txt";
    $content "Dieser tolle Text wird in die Datei geschrieben.";
    $handle fopen($file"w");
    fwrite($handle$content);
    fclose($handle);
    ?>
    Alternativ könntest du die Funktion aber auch selbst schreiben.

  3. #3
    Zitat Zitat von bar Beitrag anzeigen
    Alternativ könntest du die Funktion aber auch selbst schreiben.
    ....? 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?

    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&uuml;cksetzen" />
    <br />
    				<input name=sbm type=submit value=Close onClick=window.close() />
    			</td>
           </tr>
        </table>
    </form>
     
    </p>
    THX,
    A2k

  4. #4
    Zitat Zitat von Armitage2k Beitrag anzeigen
    ....? Wie soll ich mir denn nen PHP5 basierenden Code in PHP4 selber coden?
    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.
    Zitat Zitat
    BTW, gilt eigentlich "get_file_contents" in PHP4?
    1. Die Funkton heißt "file_get_contents".
    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);
      }

    Zitat Zitat
    Code:
      if($_POST['text'])
    if (isset ($_POST['text']))
    ist afaik sauberer.

  5. #5
    Alternativ kann man einige neue PHP Funktionen mit dem Pear Kompatibilitätspaket in älteren Versionen verfügbar machen.

  6. #6
    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;
      }
    }
    ?>

  7. #7
    Vermutlich weil Funktion und Klammern falsch verschachtelt sind.

    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;
      } 
    Müsste richtig sein.
    Tipp: Funktionsparamenter besser beschriften, bessere Einrückung und einen Editor mit Syntaxhighlighting verwenden

  8. #8
    Zitat Zitat von drunken monkey Beitrag anzeigen
    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);
      }

    Ohne trim sind bei file sowieso die \n am Ende der Zeile noch vorhanden, oder?

  9. #9
    Zitat Zitat von Niwa Daisuke Beitrag anzeigen
    Ohne trim sind bei file sowieso die \n am Ende der Zeile noch vorhanden, oder?
    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. ^^'

  10. #10
    Zitat Zitat von drunken monkey Beitrag anzeigen
    Wirst du ja dann sehen, A2k, wenn in der Datei immer gleich zwei Zeilenumbrüche hintereinander sind. <_<'
    Hab's am localhost getestet und da werden die '\n's als Text ausgegeben. Setzt man sie allerdings im Code zwischen "", werden sie zu richtigen Zeilenumbrüchen.
    Weiß wer, warum?

  11. #11
    Zitat Zitat von Niwa Daisuke Beitrag anzeigen
    Hab's am localhost getestet und da werden die '\n's als Text ausgegeben. Setzt man sie allerdings im Code zwischen "", werden sie zu richtigen Zeilenumbrüchen.
    Weiß wer, warum?
    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?

  12. #12
    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 der
    Code:
    <border-bottom width="100%">
    befehl in den sinn, aber rahmenlinien gibt es anscheinend keine definition durch "width". Wie kann ich also die länge einer rahmenlinie definieren?

    Nachdem ich hier ein paar gute antworten bekommen hab, seid ihr alle aus dem Nachhilfeunterricht entlassen
    THX @ ALL

    A2k


    border bottom

  13. #13
    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.

  14. #14
    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:
    Code:
    .line	{	width:100%;
    		border-bottom:1px solid #99CCFF;
    		padding-bottom:1px;
    	}
    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.

    zB:
    Code:
    <html>
    
    <head>
    </head>
    
    <body>
    
         <div class="line">
         <p><strong>» Testüberschrift:</strong></p>
         </div>
    
    </body>
    
    </html>
    Nun sollte das Wort Testüberschrift mit einer Rahmenlinie über den ganzen Bildschirm unterstrichen sein. "Sollte" wohlgemerkt, weil sie ist es nicht.... kA warum

    Thx,
    A2k

  15. #15
    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:
    HTML-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    oder
    HTML-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
    Nebenbei: sofern das <div> nicht notwendig ist kannst du die Klasse auch auf das <p> anwenden.

    Die Angabe 100% dabei außerdem nicht notwendig, da Blockelemente immer 100% breit sind.

    Geändert von mitaki (07.10.2006 um 18:22 Uhr) Grund: Anmerkung+

  16. #16
    Zitat Zitat von mitaki Beitrag anzeigen
    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:
    HTML-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    oder
    HTML-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
    Nebenbei: sofern das <div> nicht notwendig ist kannst du die Klasse auch auf das <p> anwenden.

    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:
    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    Aber letztendlich ist es nicht soooo wichtig, wär aber nett wenn man das irgendwie richten könnte.

    Merci,
    A2k

  17. #17
    Zitat 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:
    Hier tritt ein Sonderfall ein. Du musst, html und body die Eigenschaft width:100%; geben, damit auch das div 100% breit werden kann.
    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.

  18. #18
    *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>

  19. #19
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •