Impressum Suchfunktion

NOF-Schule | Forum

zur Schule NOF-NetObjects-Tutorials von Tommy Herrmann


Scriptfehler nur bei Nicht-Frame-Seiten ?!?
#1
Ich muss euch nochmal nerven, denn ich habe offenbar einen Fehler produziert, den ich nicht weg bekomme bzw. nicht einmal weiß, wo ich ansetzen soll:

Es geht um Tommys Bild-Klick-Zähler-Script, welches ich modifiziert habe um auch die Dateigröße auszugeben.
In meinem Projekt habe ich bisher mit Frames gearbeitet
(hier: http://www.kreiselternrat22.de/uber-uns.html) die Frames sind im Ordner ./html/ (hier: ./html/body_uber-uns.php)

Der Code zu dem Script sieht im BODY-Frame zwischen den HEAD-Tags folgendermaßen aus (wird auf mehreren Ebenen verwendet):
PHP-Code:
<?php
$clicks_file 
file('../db/klicks.txt');
// Der restliche Codeteil befindet sich in der includierten Datei!
include ('../scripts/download_mod.php');
?>
(Zeile 8-12)

die includierte Datei so:
PHP-Code:
<?php
// Dies ist der weitere Teil vom Bilderklickzähler,
// welcher modifiziert wurde und zwischen die Headtags gehört!

for ($i 0$i count($clicks_file); $i++) {
 list(
$id$hits$fl) = explode('|'$clicks_file[$i]);
 
$fl trim($fl);
 
$fsize filesize($fl);

 
 $fsize = ($fsize 1024) ? $fsize " B" : (($fsize >= 1048576) ?
 
  number_format(($fsize 1024 1024), 2","".") . " MB" :
 
  number_format(($fsize 1024), 0","".") . " KB");

 
$clicks[$id] = $hits;
 
$size[$id] = $fsize;
}

function 
get_clicks($id) {
 global 
$clicks;
 return 
$clicks[$id];
}

function 
get_size($id) {
 global 
$size;
 return 
$size[$id];
}
?>

In der o.g. Frame-Seite wird sowohl auf die Datei ordnungsgemäß verlinkt, als auch deren Größe korrekt angezeigt...
PHP-Code:
<span style="font-size: 0.75em;">- bisher <?php echo get_clicks(DLK08)?>x runtergeladen seit dem 01.03.2016 - (<?php echo get_size(DLK08)?>)</span> 
(Zeile 48)

Nun habe ich mich in den letzten Tagen damit beschäftigt die Frames abzuschaffen und haben nun alles in einer Datei (hier: http://www.kreiselternrat22.de/uber-uns.php) stehen:
Der Code zu dem Script sieht hier zwischen den HEAD-Tags folgendermaßen aus (wird weiterhin auf mehreren Ebenen verwendet):
PHP-Code:
<?php
$clicks_file 
file('./db/klicks.txt');
// Der restliche Codeteil befindet sich in der includierten Datei!
include ('./scripts/download_mod.php');
?>
(Zeile 10-14)

der Rest (die beiden Dateien in ./db/ und ./scripts/) sind unverändert

Mein Problem ist nun, daß die Datei zwar weiterhin ordnungsgemäß verlinkt wird, die Dateigröße aber bei /NULL bleibt, obwohl auch dieser Code-Teil unverändert ist...:
PHP-Code:
<span style="font-size: 0.75em;">- bisher <?php echo get_clicks(DLK08)?>x runtergeladen seit dem 01.03.2016 - (<?php echo get_size(DLK08)?>)</span> 
(Zeile 175)

Kann mich jemand des Rätsels Lösung näher bringen und verraten, warum die Dateigröße bei A angezeigt wird und bei B nicht???

LG RF
Wer etwas erreichen will sucht Wege, wer etwas verhindern will sucht Gründe !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#2
Hallo Rettungsfuzzy.
Ist DLK08 eine Konstante oder hast du nur vergessen Anführungszeichen zu setzen?

<span style="font-size: 0.75em;">- bisher <?php echo get_clicks(DLK08)?>x runtergeladen seit dem 01.03.2016 - (<?php echo get_size(DLK08)?>)</span>

Ansonsten empfehle ich dir bei Änderungen im PHP-Code die Fehlermeldungen anzeigen zu lassen.
PHP-Code:
<?php
error_reporting
(E_ALL);
ini_set('display_errors'true);
?>
Gruß Werner
werner-zenk.de - Tipps und Lösungen rund um HTML, CSS, JavaScript und PHP

„Effekte beeindrucken vielleicht einmal - Inhalt und Service jedoch ein Homepage-Leben lang.”

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#3
Ich würde  Konstante dazu sagen... Die " gehören lt. Tommys TUT jedenfalls nicht dahin...!

Den PHP-Code habe ich an den betreffenden Stellen ja gar nicht geändert, sondern nur das Frameset (der den body bereits als PHP-Datei eingebunden hatte) rausgeschmissen...

Der PHP-Error Report sagt in 325 Zeilen folgendes aus (Zeilen wiederholen sich dabei mit allen Zielen):
Code:
Notice: Undefined offset: 2 in /<serverpfad>/scripts/download_mod.php on line 6
Notice: Undefined offset: 1 in /<serverpfad>/scripts/download_mod.php on line 6
Warning: filesize(): stat failed for ../downloads/Kreis/Der_Kreiselternrat_22_stellt_sich_vor.pdf in /<serverpfad>/scripts/download_mod.php on line 8
(Das Schema entspricht dem Aufbau der TXT-Datei.)

Die ersten beiden Zeilen bestehen demnach aufgrund der Leerzeilen in der TXT-Datei
Interessant wäre also nur/insbesondere der Fehler in Zeile 8, oder - Hier nochmal beide Zeilen:
PHP-Code:
list($id$hits$fl) = explode('|'$clicks_file[$i]);
...
 
$fsize filesize($fl); 
(ganzer Code siehe oben.)

Rätselhaft (für mich) ist, daß in der Frameset-Version beides ordnungsgemäß angezeigt wird und in der Framlos-Version die "clicks" ja, aber die "size" nicht !!!
Alle Dateien sind vorhanden.

LG RF
Wer etwas erreichen will sucht Wege, wer etwas verhindern will sucht Gründe !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#4
Zitat:Die ersten beiden Zeilen bestehen demnach aufgrund der Leerzeilen in der TXT-Datei

Lösche die beiden Leerzeilen in der TXT-Datei.
Und füge beim einlesen der Daten: FILE_SKIP_EMPTY_LINES hinzu:
PHP-Code:
<?php
$clicks_file 
file('../db/klicks.txt'FILE_SKIP_EMPTY_LINES);
// Der restliche Codeteil befindet sich in der includierten Datei!
include_once '../scripts/download_mod.php';
?>
Gruß Werner
werner-zenk.de - Tipps und Lösungen rund um HTML, CSS, JavaScript und PHP

„Effekte beeindrucken vielleicht einmal - Inhalt und Service jedoch ein Homepage-Leben lang.”

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#5
Guten Morgen,

ich habe eben  sowohl die Leerzeilen gelöscht (was die Ordnung vermissen lässt), als auch den vorgeschlagenen Zusatz eingesetzt...

Half leider beides nichts... in der Framelos-Version sind die "Notice"-Zeilen zwar weg, nachdem ich diese in der TXT-Datei entfernte, aber die ganzen "Warning"-Zeilen sind geblieben !


- Nachtrag -

In der FrameSet-Version erscheinen die Fehler nach Eintrag des Error-Reporting ebenfalls, allerdings werden die Werte weiterhin angezeigt.
Die Codezeilen sind identisch (hier direkt aus der body_uber-uns.php):
PHP-Code:
     <span style="font-size: 0.75em;">- bisher <?php echo get_clicks(DLK08)?>x runtergeladen seit dem 01.03.2016 - (<?php echo get_size(DLK08)?>)</span></span></p> 
Ausgabe:
Zitat:- bisher Notice: Use of undefined constant DLK08 - assumed 'DLK08' in /<serverpfad>/html/body_uber-uns.php on line 51 49x runtergeladen seit dem 01.03.2016 - ( Notice: Use of undefined constant DLK08 - assumed 'DLK08' in /<serverpfad>/html/body_uber-uns.php on line 51 1.012 KB)
ohne Error-Reporting:
Zitat:- bisher 49x runtergeladen seit dem 01.03.2016 - (1.012 KB)


gleiches erwarte ich auch in der neuen Version, aber hier will das nicht ...:
PHP-Code:
    <span style="font-size: 0.75em;">- bisher <?php echo get_clicks(DLK08)?>x runtergeladen seit dem 01.03.2016 - (<?php echo get_size(DLK08)?>)</span></span></p> 
Ausgabe:
Zitat:- bisher Notice: Use of undefined constant DLK08 - assumed 'DLK08' in /<serverpfad>/uber-uns.php on line 155 49x runtergeladen seit dem 01.03.2016 - ( Notice: Use of undefined constant DLK08 - assumed 'DLK08' in /<serverpfad>/uber-uns.php on line 155 B)
ohne Error-Reporting:
Zitat:- bisher 49x runtergeladen seit dem 01.03.2016 - ( B)

LG RF
Wer etwas erreichen will sucht Wege, wer etwas verhindern will sucht Gründe !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#6
Moin,

also - das kann der Werner ganz sicher besser erkennen als ich, denn dieses Skript hat er ja selbst entwickelt Smiling

Mir fällt nur auf, was soll denn DLK08 eigentlich sein. Im ursprünglichen Skript ist das eine Zahl in der .txt Datei:

Code:
1|27|../assets/images/Eichkater.jpg
2|24|../assets/images/Hibiskus.jpg
3|19|../assets/images/Peonie.jpg
4|16|../assets/images/Tulpe.jpg
5|28|../html/tutorial.html
6|5|../download/imagecounter.zip

... wenn jetzt der ECHO Befehl die Klicks dieser Zahl ausgibt

PHP-Code:
<?php echo get_clicks(5)?>

... dann wird die Anzahl der Klicks (hier 28) der Zeile 5 dargestellt. Dabei ist die Variable $i numerisch. So etwas wie "DLK08" ist ja nicht numerisch, sondern ein String und der würde in Anführungszeichen gehören und auch nicht mit dem Skript unten korrespondieren.

PHP-Code:
<?php
 
// Bilderklickzähler
 // Das Script stammt von W. Zenk
 // Homepage: www.homepage-total.de
 // Das Script darf frei genutzt werden,
 // solange dieser Vermerk nicht entfernt wird!

$clicks_file file('./imagecounter/daten.txt');
for (
$i 0$i count($clicks_file); $i++) {
 
$temp explode('|'$clicks_file[$i]);
 
$clicks[$temp[0]] = $temp[1];
}

function 
get_clicks($id) {
 global 
$clicks;
 return 
$clicks[$id];
}
?>

Wenn Du diesen Klick-Zähler verwenden willst, warum übernimmst Du den nicht ganz genauso wie auf meiner Seite beschrieben ?

Was steht denn genau in Deiner Text-Datei?
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#7
Hallo.

ich kann mich jetzt wieder erinnern  :D im Original-Script wurden nur Zahlen an die Funktion
übergeben get_clicks(8) und kein Buchstaben/Zahlen-Mix wie DLK08 ...
Wie bereits oben vorgeschlagen solltest du Anführungszeichen setzen:

PHP-Code:
<span style="font-size: 0.75em;">- bisher <?php echo get_clicks("DLK08")?>x runtergeladen seit dem 01.03.2016 - 
(<?php echo get_size("DLK08")?>)</span></span></p> 

Danke Tommy, du warst etwas schneller Wink
Gruß Werner
werner-zenk.de - Tipps und Lösungen rund um HTML, CSS, JavaScript und PHP

„Effekte beeindrucken vielleicht einmal - Inhalt und Service jedoch ein Homepage-Leben lang.”

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#8
In der Textdatei habe ich so an die 300 Ziele definiert (Dateien & Links) - Das ganze in mehrere Rubriken unterteilt und irgendwann mal um die Funktion zur Anzeige der jeweiligen Dateigröße erweitert... bisher war das auch alles kein Problem und hat tadellos funktioniert (im FrameSet tut es das ja immernoch!)

Nur weil ich die Frames endlich rausschmeißen will, will die Größenanzeige auch nicht mehr... ?!?

Hier einen Auszug der TXT-Datei:

Code:
// Schulen und ERe -> /mitglieder.html
SCH01|18|http://www.schule-barlsheide.hamburg.de
SCH02|18|http://www.elbkinder-grundschule.de
...
// Öffentliche Downloads -> /downloads.html
DLA01|13|../downloads/aktuell/Programm_Elternfortbildung.pdf
DLA02|26|../downloads/aktuell/Anmeldebogen_fuer_Elternseminare.pdf
...
DLK08|49|../downloads/Kreis/Der_Kreiselternrat_22_stellt_sich_vor.pdf
...
usw.

Ich habe, aufgrund @Tommys Antwort, den Bezeichner in beiden PHPs und in der TXT von "DLK08" auf "9999" (mit und ohne " bzw. ') geändert - Nun ist in der Ausgabe zwar der Fehlertext weg, aber das Problem der Größenangabe besteht weiterhin...!!!


Gerne kann ich euch einen FTP einrichten und per PN zukommen lassen, damit ihr die Dateien live einsehen könnt, wenn ihr möchtet.

LG RF
Wer etwas erreichen will sucht Wege, wer etwas verhindern will sucht Gründe !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#9
Zitat:// Schulen und ERe -> /mitglieder.html
SCH01|18|http://www.schule-barlsheide.hamburg.de
SCH02|18|http://www.elbkinder-grundschule.de
...
// Öffentliche Downloads -> /downloads.html
DLA01|13|../downloads/aktuell/Programm_Elternfortbildung.pdf

Da wurde das Format der TXT-Datei vollkommen geändert!?
Normalerweise wird in jeder Zeile ein neuer Datensatz geschrieben der dann ausgelesen wird.
Kommentare wie: // Öffentliche Downloads -> /downloads.html kann das Programm nicht verarbeiten.

So wie in Tommys Beispiel sollte das aussehen:
Code:
1|27|../assets/images/Eichkater.jpg
2|24|../assets/images/Hibiskus.jpg
3|19|../assets/images/Peonie.jpg
4|16|../assets/images/Tulpe.jpg
5|28|../html/tutorial.html
6|5|../download/imagecounter.zip
Gruß Werner
werner-zenk.de - Tipps und Lösungen rund um HTML, CSS, JavaScript und PHP

„Effekte beeindrucken vielleicht einmal - Inhalt und Service jedoch ein Homepage-Leben lang.”

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#10
Wie ich schon schrieb...
(14.06.2017, 07:30)Rettungsfuzzy schrieb: ich habe eben  sowohl die Leerzeilen gelöscht (was die Ordnung vermissen lässt), als auch den vorgeschlagenen Zusatz eingesetzt...

Half leider beides nichts...

Auch habe ich den Bezeichner bereits auf "9999" geändert und in " gesetzt
und eben nochmal die ganze TXT-Datei auf eine Zeile reduziert
Code:
9999|50|../downloads/Kreis/Der_Kreiselternrat_22_stellt_sich_vor.pdf
(alle Links funktionieren jetzt nicht mehr, bis auf diese Datei)

Link getestet: Zähler geht hoch, Größenangabe wird weiterhin angezeigt und auch weiterhin nicht angezeigt!!!

*heul* langsam verzweifle ich...
Wir bearbeiten das Thema gerade, als ob das ganze Script nicht funktionieren würde... aber das tut es doch auf der einen Seite (mit Frames!), sogar zu 100%
Nur auf der anderen Seite (ohne Frames) funktioniert das gleiche Script (,also dieselben Zeilen, ) nur zu 50%... Hier liegt doch das Problem... Die Kommentare, als auch der alpha-numerische Bezeichner dürften hier nicht wirklich das Problem sein...

LG RF
Wer etwas erreichen will sucht Wege, wer etwas verhindern will sucht Gründe !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#11
... wenn es mal geht und mal nicht - dann kann sich ja fast nur eine Pfad-Angabe ändern. Bitte überprüfe das.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#12
Das wäre auch mein Vorschlag die Pfad-Angabe anpassen.
Womöglich stimmt in der TXT-Datei die Pfad-Angabe nicht.
Die PHP Funktion filesize() greift direkt auf die Pfad-Angabe zu, ist diese fehlerhaft
kann die Dateigröße nicht ermittelt werden.

Hiermit kannst du überprüfen ob der Dateipfad, der in der TXT-Datei angegeben wurde, überhaupt existiert:
PHP-Code:
<?php
// Dies ist der weitere Teil vom Bilderklickzähler,
// welcher modifiziert wurde und zwischen die Headtags gehört!

for ($i 0$i count($clicks_file); $i++) {
 list(
$id$hits$fl) = explode('|'$clicks_file[$i]);
 
$fl trim($fl);

 
// Überprüfen ob die Datei existiert
 
if (file_exists($fl)) {
 
 echo 'Der Dateipfad "' $fl '" ist richtig.';
 }
 else {
 
 echo 'Der Dateipfad "' $fl '" ist falsch!';
 }

 
$fsize filesize($fl);

 
 $fsize = ($fsize 1024) ? $fsize " B" : (($fsize >= 1048576) ?
 
  number_format(($fsize 1024 1024), 2","".") . " MB" :
 
  number_format(($fsize 1024), 0","".") . " KB");

 
$clicks[$id] = $hits;
 
$size[$id] = $fsize;
}

function 
get_clicks($id) {
 global 
$clicks;
 return 
$clicks[$id];
}

function 
get_size($id) {
 global 
$size;
 return 
$size[$id];
}
?>
Gruß Werner
werner-zenk.de - Tipps und Lösungen rund um HTML, CSS, JavaScript und PHP

„Effekte beeindrucken vielleicht einmal - Inhalt und Service jedoch ein Homepage-Leben lang.”

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#13
(14.06.2017, 14:46)Tommy Herrmann schrieb: ... wenn es mal geht und mal nicht - dann kann sich ja fast nur eine Pfad-Angabe ändern. Bitte überprüfe das.
Das war auch mein erster Gedanke - laaange, bevor ich diesen Thread eröffnete... Das war ich schon alles 50x am durchgehen (Links die offene PHP-Dateien / Rechts mein FTP-Programm)

Nun habe ich die exakt gleiche Datei in den Hauptroot und in den Unterordner HTML geschoben - Einzige Änderung war ein weiterer Punkt der Pfadangaben (für den Unterordner)
PHP-Code:
<!-- // Clickcounter - Anfang // -->
<?php
$clicks_file 
file('./db/klicks.txt');
// Der restliche Codeteil befindet sich in der includierten Datei!
include ('./scripts/download_mod.php');
?>
<!-- // Clickcounter - Ende // --> 
vs.
PHP-Code:
<!-- // Clickcounter - Anfang // -->
<?php
$clicks_file 
file('../db/klicks.txt');
// Der restliche Codeteil befindet sich in der includierten Datei!
include ('../scripts/download_mod.php');
?>
<!-- // Clickcounter - Ende // --> 
Ergebniss: Die PHP in dem HTML-Ordner zeigt die Größenangabe an, die im Hauptroot nicht - Fazit es kann also nicht an der PHP-Datei liegen ( a la Konstante wird von dieser geändert oder gelöscht etc.)

Als nächstes habe ich Werners Code in die ./scripts/download_mod.php zwischengefügt und erhielt (fast logischer Weise) unter der "Hauptroot-Datei"  = ist falsch und unter der Datei im Unterordner = ist richtig...

Der Fehler ist somit gefunden! Es gehört für die neue Site-Version in der TXT-Datei ein Punkt gelöscht...!
Gerade der Ort, an den ich nie denken würde, da die Datei als auch der darauf zugreifende Code nicht geändert wurde und genau das verstehe ich nicht:
Die TXT-Datei liegt im Unterordner ./db/ - parallel zu ./scripts/ und ./downloads/ ...
Somit muss der relative Pfad in der TXT-Datei doch erstmal wieder aus diesem Ordner herausführen, um in den Download-Ordner gelangen zu können, oder?!?

Außerdem sind die Downloads von beiden Ebenen aus erreichbar und counten auch richtig.
Aber, ... ich glaube zumindest dieser Punkt ist mir dank Werners letzter Antwort soeben aufgegangen, denn die Counts werden aus der TXT direkt (also ohne weiteren Dateipfad) gezogen...
Das alles müsste ja aber wiederum bedeuten, daß die Downloadlinks (welche vom Root (./download.php?=idx) ausgehen) irgendwo automatisch korrigiert werden - Ich kriege das irgendwie nicht auf die Kette...

Erstmal aber:
Vielen vielen lieben Dank euch beiden - ich hatte vorhin schon ernsthaft spekuliert, das Thema "Frameless" an den Nagel zu hängen.

LG RF
Wer etwas erreichen will sucht Wege, wer etwas verhindern will sucht Gründe !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#14
Moin,

relative Pfadangaben - gucke mal hier:

http://www.tommyherrmanndesign.com/nof/Relative-Pfade/

./ = bleibe im gleichen Verzeichnis oder auch ohne Punkt /
../ = gehe ein Verzeichnis höher
../../ = gehe zwei Verzeichnisse höher
usw.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#15
Hallo,

ja, das weiß ich ja... deswegen doch:

Pfad: ./db/klicks.txt
Eintrag: DLK0|49|../downloads/aktuell/Programm_Elternfortbildung.pdf
führt zu
Ziel-Dateipfad: ./downloads/aktuell/Programm_Elternfortbildung.pdf

LG RF
Wer etwas erreichen will sucht Wege, wer etwas verhindern will sucht Gründe !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren




Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
nach oben An den Anfang der Seite scrollen
NetObjects Fusion Infos, Downloads und Updates Diese Website wird durch Bot-Trap vor Spam geschützt!