• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bekomme nur hieroglyphen

Werbung:
Klappt alles nicht.Irgendwie gibt mir file nur ein gross geschriebenes "Array" zurück .Sonst steht da nix drinne.
Der rest ist bestimmt auch Müll,aber soweit komme ich nicht weil file() niix macht
Code:
<?php
echo "Script wurde gerufen<br>";
error_reporting(E_ALL);
$fehler = ini_set('display_errors', true);
$n='\n';

$dateitext="vierter.txt";
$filename=(basename($_SERVER['PHP_SELF'], '.php'));
$B=$_SERVER['PHP_SELF'];
echo 'Gerufen von <a href="'.$B.'">Link</a><br>';
 
 
      if (file_exists($dateitext))
        {
        
         echo "Datei gefunden.<br>Dateiname:$filename;<br>\n";
        }
      else
        {
         $count = '<tr><td class="nummer">1</td><td class="link"><a href="'.$B.'">'.$dateitext.'</a></td><td class="zahler">0</td><tr>'.$n;
         echo "Else Zweig wurde gerufen<br>\n";
        }
        
      $array = file($dateitext); 
     $test =$array;
     echo $test;
   for ($i = 1; $i <= strlen($array); $i++) {   // Zählt er bis  5 Obwohl nur  eine Reihe vorhanden  ist
   echo $i;
   echo $array[$i];
   $line=$array[$i];
   $pos = strpos($line, $B);
   if($pos==true){
   echo $line.' in Reihe $1 gefunden';
   $linelesen=$array[$i];
   }
   }
        
        
  $counter=trim(explode('</td>', explode('<td class="zahler">', $linelesen)[1])[0]);
        echo  ''.$counter.'Aus array gelesen';
        $counter++;
        $neu = '<tr><td class="nummer">1</td><td class="link"><a href="'.$B.'">'.$dateitext.'</a></td><td class="zahler">'.$counter.'</td><tr>'.$n;

array_splice($array, $i, 1, $neu);
 
$string = implode("", $array);
 

     echo "Neuer Wert $count;<br>\n";
 file_put_contents($dateitxt, $string);
     echo "Script Ende .<br>Fehler:$fehler;<br>\n";
?>
 
Zweiter Versuch ,geht natürlich auch nicht
Code:
<?php
echo "Script wurde gerufen<br>";
error_reporting(E_ALL);
$fehler = ini_set('display_errors', true);


$dateitext="vier.html";
$filename=(basename($_SERVER['PHP_SELF'], '.php'));

                 echo 'Gerufen von <a href="'.$filename.'">Link</a><br>';
    if (file_exists($dateitext)){
      
                 echo "Datei gefunden.<br> Dateiname: $filename; <br>\n";

    $daten = file($dateitext);        // Datei einlesen
                 echo "Lese  file <br>";
    $fp = fopen($dateitext, 'w');            // Datei neu erstellen
                 echo "Erstelle Datei zum ändern<br>";
    foreach ($daten as $zeile){
    $felder = explode('---', $zeile);        // Zeile aufteilen
                 echo "Teile   Zeile = $zeile;<br>\n";
    if (!strcmp($felder[1], $filename)){    // Wenn gesuchte Zeile
                 echo "Zeile gefunden mit Text $filename;<br>\n";
    $counter=strcmp($felder[0]);   //Counter auslesen
                 echo "Counter steht auf $counter;<br>\n";
    $counter++;
    $felder[2] = $counter;                // 2. Feld ändern
                 echo "feld geändert in $felder[2];<br>\n";
    $zeile = implode('---', $felder);    // Zeile wieder zusammensetzen
                 echo "Zeile zusammen bauen $zeile;<br>\n";
    }
    fwrite($fp, $zeile);                // Zeile schreiben
                 echo "Schreibe Datei<br>\n";
}
fclose($fp);                            // neue Datei schliessen
                 echo "Datei geschlossen,Script zuende<br>\n";




   }else{
       $count = "1---$filename---0<br>\n";
                echo "Else Zweig wurde gerufen<br>\n";
       $datei1 = fopen($dateitext, 'w');
                echo 'Erstelle >'.$count;
   fwrite($datei1, $count);
  fclose($datei1);

      
        }
?>

Glaube es liegt an der Zeile
if (!strcmp($felder[1], $filename)){

Der finde den Seitennamen wohl nicht.

Edit:
Warning: strcmp() expects exactly 2 parameters, 1 given in

Verstehe ich nicht ,da sind doch 2 drinne.( Habe alle Hochkomma Varianten ausprobiert ,ändert nix );
Ist wohl alles schei....was ich da gebaut habe ,funktioniert irgendwie nix
 
Zuletzt bearbeitet:
Werbung:
ui... hast du einen Plan, wie du vorgehen willst?
der file(dateiname) liest den Inhalt der Datei zeilenweise in ein Array...
das Array enthält dann
$array[0] ... die Zeile 1
$array[1] ... die Zeile 2
$array[2] ... die Zeile 3
.... usw
PHP fängt bei Null mit der Zählung an.
Um an die dritte zu kommen muss du also echo $array[2] aufrufen

oder zur Kontrolle, was du eingelesen hast, mit
echo "<pre>\n";
print_r($array);
echo "</pre>\n";
dir das ganze Array anzeigen lassen.
 
Was macht der dritte Parameter in deiner Datei???
$count = "1---$filename---0<br>\n";

Deine Idee ist wohl ganz richtig... etwas ungeschickt umgesetzt vielleicht - aber das wird schon.
Wenn ich nachher etwas Zeit habe, dann 'bastel' ich dir mal einen Entwurf, wie ich das umsetzen würde.
 
Der driite soll der besucherzähler sein .Der erste sollte eine fortlaufende nummer sein,aber das brauche ich ja nicht .. wichtig ist erst mal die Seite und die besucherzahl.

Jo wäre schön wenn du mir nachher helfen kannst.
Ich drehe mich gerade im kreiss
 
Werbung:
Schneller als erwartet... konnte aber Teile aus alten Scripten nutzen und da hielt sich die 'neue' Arbeit in Grenzen.
Hier mal der Code von meiner Idee:
PHP:
<?php
$speicherort = "zaehler.csv";
$daten = array();
/* Die folgenden 5 Codezeilen sind nur notwendig, wenn Aufruf auch aus Unterordnern erfolgt*/
$up_dir = "";
$level = substr_count($_SERVER['PHP_SELF'], '/');  // zählt die Anzahl der '/' im Dateipfad
for($a = 1; $a < $level; $a++)      // erstellt einen String, mit '../' zum Rootverzeichnis führt
   {$up_dir .= "../";}
$speicherort = $up_dir."zaehler.csv";
/* --------------------------------------------------------------------------------------- */
$filename = basename($_SERVER['PHP_SELF']);  // der Dateiname ohne Pfad der aufrufenden Datei
echo $speicherort." / ".$level."<br>\n";  // dient nur der Kontrolle, kann auskomentiert werden

      if (file_exists($speicherort))
        {
         $daten = file($speicherort, FILE_IGNORE_NEW_LINES);  // liest die Daten zeilenweise in das Array $daten
         $count1 = 0;
         $check = 0;
         while(isset($daten[$count1]))   // wiederhole so lange, wie Daten in $daten[$count1] vorhanden sind
            {
             $daten[$count1] = explode(";", $daten[$count1]);  // trenne String an ";"
             if($daten[$count1][0] == $filename)    // Abfrage ob Dateiname schon vorhanden ist
                {
                 $daten[$count1][1]++;             // wenn ja - erhöhe den Zähler
                 $check = 1;
                }
             $count1++;
            }
         if($check == 0)                        // Dateiname noch nicht vorhanden
           {
            $daten[$count1][0] = $filename;    // anhängen der neuen Daten ans Ende des Arrays
            $daten[$count1][1] = 1;
           }
        }
      else                     // Speicherdatei noch nicht vorhanden
        {
         $daten[0][0] = $filename;     // erzeuge ersten Datensatz
         $daten[0][1] = 1;
        }
     echo "<pre>\n";        // Kontrollausgabe des Arrays auf dem Bildschirm - kann/soll auskomentiert werden
     print_r($daten);
     echo "</pre>\n";
     $count2 = 0;
     $dateizeiger = fopen($speicherort, "w");        // speicher Array in Datei
     while(isset($daten[$count2][0]))
        {
         fwrite($dateizeiger, $daten[$count2][0].";".$daten[$count2][1]."\n");
         $count2++;
        }
     fclose($dateizeiger);

?>

Hab versucht, im Code mit Kommentaren die Schritte so ein bisschen zu beschreiben - hoffentlich kommst du damit klar.
In Kürze ...
der erste Teil (bis Zeile 12) stelle ich nur die benötigten Variablen zusammen und bastel mir einen Pfad zu der Datei, die ich speichern bzw lesen will - die soll im Root sein. Geht aber auch an jeder anderen Stelle.

Zeile 14 bis 32 liest dann die Datei (wenn sie denn existiert) in ein Array ein...
Ab Zeile 19 wird dann eingelesene String $daten[x] in die gewünschten Teilstrings $daten[x][0] und $daten[x][1] geteilt (explode) und gleichzeitig (Zeile 22) geprüft, ob die aufrufende Datei schon vorhanden ist...$check=1;
Wenn ja wird der Zähler erhöht... wenn nein wird ein neuer Eintrag an das Ende des Arrays hinzugefügt!
ab Zeile 44 wird dann das Array wieder zeilenweise in der Datei gespeichert.
Hab das mit einer .csv Datei gemacht... Daten durch Semikolon getrennt ... gemacht. Das kann dann auch 1zu1 von einem Tabellenkalkulationsprogramm gelesen und bearbeitet werden.
Viel Spaß.. und wenn du Fragen hast, nur her damit!
 
Hmmm, das kann man mit einer Ini-Datei total simple lösen.
PHP:
<?php
   $key = basename($_SERVER['PHP_SELF'], '.php');
  
   $data = array();
  
   if (file_exists("counter.ini"))
     $data = parse_ini_file("counter.ini");
    
   if (array_key_exists($key, $data))
      $data[$key]++;
   else
     $data[$key] = 1;
  
   $output = "";
  
   foreach($data as $key => $value)
     $output .= "$key=$value\n";
    
   file_put_contents("counter.ini", $output);
  
   echo $output;
?>
 
Werbung:
Man kann ja auch einen absoluten Pfad bei der counter.ini angeben, dann passt das immer.
 
Schreibender Zugriff auf einen absoluten Pfad (URL) funktioniert bei mir leider nicht :(!
Liegt das an den Sicherheitseinstellungen des Servers?
 
Versuche mal
PHP:
<?php
   $key = basename($_SERVER['PHP_SELF'], '.php');
 
   $ini_file = $_SERVER['DOCUMENT_ROOT'] . "/counter.ini";
 
   $data = array();
 
   if (file_exists("counter.ini"))
     $data = parse_ini_file($ini_file);
 
   if (array_key_exists($key, $data))
      $data[$key]++;
   else
     $data[$key] = 1;
 
   $output = "";
 
   foreach($data as $key => $value)
     $output .= "$key=$value\n";
 
   file_put_contents($ini_file, $output);
 
   echo $output;
?>

Wenn du die Ini-Datei in einem Unterverzeichnis ablegen willst, musst du den Pfad im Script anpassen, das Verzeichnis muss vorhanden sein und PHP muss darin eine Datei schreiben dürfen.
 
Werbung:
Jetzt müsste man das nur noch ein wenig absichern, denn den Counter kann man nach belieben mit einem Aktualisieren der Seite hochzählen
 
So habe das Script aus post#47 mal Studiert und getestet.
1. Es funktioniert wie ich mir es vorgestellt habe,BESTEN DANK dafür.
2.Frage ,warum benutzt du als Format csv? Hat das vor oder nachteile ? Das gute ist ich kann sie nicht ausversehen auf machen und beschreiben ,weil sie auf den Server nicht aufgeht.(Bin über Browser mit Server verbunden).

Ihr redet jetzt über eine ini Datei,was bring das? Bin da noch nicht durch gestiegen.

EDIT: Beim Studieren habe ich gemerkt das mein Ansatz zu 90% Mist wahr
 
Werbung:
Vergleiche doch alleine mal die Länge der Quellcodes. Mit einer Ini-Datei ist das deutlich kürzer und einfacher.
 
Ach.
Ich dachte das wäre nur ein Zusatz oder so,weil es so kurz ist.:)
Ja das kucke ich mir mal genauer an .Nur verstehe ich nicht warum es damit kürzer ist ,weil es wird doch der gleiche Inhalt in der Datei geschrieben .Das verwirrt leicht.
Aber werde mich da mal durch arbeiten und natürlich auch testen und dann bescheid sagen
 
Hier das Ganze mit Kommentaren, damit verstehst du es vielleicht einfacher:
PHP:
<?php
   // Key bestimmen
   $key = basename($_SERVER['PHP_SELF'], '.php');
 
   // Name der Ini-Datei festlegen
   $ini_file = $_SERVER['DOCUMENT_ROOT'] . "/counter.ini";
 
   // Initialisierung eines Arrays
   $data = array();
 
   // Wenn es die Datei gibt, mit parse_ini_file einlesen
   if (file_exists("counter.ini"))
     $data = parse_ini_file($ini_file);
 
   // Wenn es den Key schon im Array gibt, erhöhen, sonst auf 1 setzen
   if (array_key_exists($key, $data))
      $data[$key]++;
   else
     $data[$key] = 1;
 
   // Initialisierung eines Strings
   $output = "";
 
   // Array in einen String schreiben
   foreach($data as $key => $value)
     $output .= "$key=$value\n";
 
   // String in Ini-Datei schreiben
   file_put_contents($ini_file, $output);
 
   // String ausgeben
   echo $output;
?>
 
Werbung:
Und hier gleich eine Version, die zumindest ein Reload abfängt:
PHP:
<?php
   // Session starten. Falls dieser Aufruf schon vorher irgendwo steht,
   // diese Zeile entfernen
   session_start();
  
   // Key bestimmen
   $key = basename($_SERVER['PHP_SELF'], '.php');
      
   // Nur ausführen, wenn noch nicht gezählt wurde
   if (! isset($_SESSION[$key]))
   {
      // Key in Session speichern
      $_SESSION[$key] = true;
  
      // Name der Ini-Datei festlegen
      $ini_file = $_SERVER['DOCUMENT_ROOT'] . "/counter.ini";
 
      // Initialisierung eines Arrays
      $data = array();
 
      // Wenn es die Datei gibt, mit parse_ini_file einlesen
      if (file_exists("counter.ini"))
        $data = parse_ini_file($ini_file);
 
      // Wenn es den Key schon im Array gibt, erhöhen, sonst auf 1 setzen
      if (array_key_exists($key, $data))
         $data[$key]++;
      else
        $data[$key] = 1;
 
      // Initialisierung eines Strings
      $output = "";
 
      // Array in einen String schreiben
      foreach($data as $key => $value)
        $output .= "$key=$value\n";
 
      // String in Ini-Datei schreiben
      file_put_contents($ini_file, $output);
 
      // String ausgeben
      echo $output;
   }
   else
      echo "Wurde schon gezählt";
?>
 
Ich dachte das wäre nur ein Zusatz oder so,weil es so kurz ist.
Das ist so kurz, weil diese clevere Funktion 'parse_ini_file' uns die mühselige Arbeit des zeilenweise Einlesens der Datei ... und das damit verbunden Erstellen eines multidimensionalen Arrays abnimmt. Ich denke wohl einfach zu konservativ :)... was schon mal gut funktioniert hast, muss ja nicht unbedingt die beste Lösung sein.
Hmmm... allerdings schätze ich, dass der aufwändige Weg, den ich vorgeschlagen hatte, zum Lernen der Grundlagen ganz gut geeignet ist - na ja... @m.scatello ist da sicherlich anderer Meinung ;)! Aber PHP ist eben so vielseitig, dass man a.) nicht alles im Kopf haben kann... und man sich b.) sehr darüber freut, wenn man von außen mal in eine andere Richtung geschubst wird!
 
Zurück
Oben