Grafischer Counter funktioniert nicht

Hallo Experten,

auf meiner Webseite versuche ich gerade, einen grafischen Counter mit PHP einzurichten (ohne Datenbankanbindung).

Was mich nur wundert, ist folgendes:

Rufe ich die Seite auf dem Localhost auf, klappt alles wunderbar. Nur online klappt es nicht!?!

Weiß jemand, woran das liegen könnte? PHP ist natürlich auf dem Server aktiv…

Link zur HP: http://www.akk-leo.de

Kerstin

o_O kennst Du die Geschichte von den Glaskugeln?
nicht?

naja, dann lass sie mir Dir kurz erzählen…

Früher gab es viele Leute die sich Magier, Hexen, Zauberer oder Druiden nannten. Alle kannten die Möglichkeit mit Glaskugeln das weiszusagen, was andere ihnen verschwiegen hatten, wenngleich nicht alle diese Fähigkeiten gleichgut nutzen konnten.

Doch leider drehte sich die Welt weiter und zwar gibt es noch immer Leute, die Glaskugeln benutzen können.
Doch leider ging die Firma pleite, die das Weltweite Monopol auf die Glaskugelfabrikation hatte und so konnte niemand mehr nachvollziehen was nicht klappte, wenn ein ander nicht genügend Informationen gab…

Schade - aber das betrifft nun Dich auch.

Munich

Hallo Kerstin,

auf meiner Webseite versuche ich gerade, einen grafischen
Counter mit PHP einzurichten (ohne Datenbankanbindung).
Weiß jemand, woran das liegen könnte? PHP ist natürlich auf
dem Server aktiv…

Hmmmm. Hmmmm.

Ich habe ja gerade eine neue Glaskugel ausgepackt,
aber die ist nicht justiert. Sie sagt aber

„Der Counter ist .php, der Hoster unterstützt aber
nur <?php> in .html“?

Hmmmm …

Grüße

CMБ

Hallo,

ihr habt ja Recht! Habe gestern Abend nur geglaubt, da es ja lokal funktioniert, daß es an der PHP-Datei ja eigentlich nicht liegen könnte. War wohl schon reichlich spät, sorry.

Also hier erst mal das PHP-Skript:

<?php $counterfile="counterdat".$counternr.".txt";<br />
if(file\_exists($counterfile))
{
$dat=file($counterfile);
$zaehler=$dat[0]+1;
}
else
$zaehler=1;

$dat=fopen($counterfile,"w");
fputs($dat,$zaehler);
fclose($dat);

if(!$digit)
$digit=0;

if (strlen($zaehler){
$zaehler=sprintf("%0".$digit. "d",$zaehler);
}

$bilder[]= array();
for($i=0;$i\<=strlen($zaehler)-1;$i++)
{
$bilder[$i]=imagecreatefromjpeg($bildname.substr($zaehler,$i,1).".jpg");

}
$eb=imagesx($bilder[0]);
$eh=imagesy($bilder[0]);
$gb=$eb\*strlen($zaehler);
$img=ImageCreate($gb,$eh);

for($i=0;$i<count></count>{
imagecopyresized($img,$bilder[$i],$eb\*$i,0,0,0,$eb,$eh,$eb,$eh);
}
imagejpeg($img);
imagedestroy($img);
?\>

Auch die Anzeige ist in den verschiedenen Browsern unterschiedlich: Mozilla zeigt gar nichts an, der IE ein Bild, daß er aber nicht findet (das rote x, wenn ihr versteht, was ich meine) und der Opera schreibt „Bild“ hin mit einem Rahmen drumherum.

Hoffentlich kann mir jetzt einer weiterhelfen?

Kerstin

Hallo,

imagejpeg($img);
imagedestroy($img);

Und wo genau gibst Du das Bild, das Du erzeugt hast, aus?
Welchen Content-Header schickst Du voran?

Grüße

CMБ

mögliche Fehler…

$counterfile=„counterdat“.$counternr.".txt";

  1. $counternr ist nicht belegt…

$dat=fopen($counterfile,„w“);
fputs($dat,$zaehler);
fclose($dat);

  1. Datei kann nicht geschrieben werden?
    Ist die Datei da?
    Was ist der Inhalt der Datei?

if(!$digit)
$digit=0;

  1. $digit wird vorher nie gesetzt - ist also immer 0

if (strlen($zaehler)

Hallo,

imagejpeg($img);
imagedestroy($img);

Und wo genau gibst Du das Bild, das Du erzeugt hast, aus?

Aufruf in der html-Datei mit

Welchen Content-Header schickst Du voran?

Ja, also fehlt das noch:

header("Content-type: image/".$ext);

Grüße
CMБ

Grüße zurück,
Kerstin

Hallo,

Ich habe das Bild unter http:// www.akk-leo.de/counter.php?counternr=0&digit=5&bildn… mal aufgerufen, da kommt

Warning : fopen(counterdat0.txt): failed to open stream: Permission denied in /home/www/web941/html/counter.php on line 15 Warning: fputs(): supplied argument is not a valid stream resource in /home/www/web941/html/counter.php on line 16

Warning : fclose(): supplied argument is not a valid stream resource in /home/www/web941/html/counter.php on line 17

Das bedeutet, das PHP keine Schreibrechte auf den Ordner hat. Die musst su mit dem FTP-Programm erst setzen.

Weiterhin:

  1. solltest du die in der URL übergebenen Variablen mit $_GET[’’] abrufen
  2. fehlt nach dem else das { }
  3. fehlt der Content-type-Header
  4. ein leeres Array erzeugt man mit $var = array(); aber nicht mit $var[] = array(); denn damit erzeugst du array(0=>array()).
  5. Wozu übergibst du die Variablen bildname und ext?

also:

> <?php if (isset($_GET['counternr'])) counternr=$_GET['counternr']; else counternr=0; <br />

if (isset($\_GET['digits'])) digits=$\_GET['digits']; else digits=0; 


> $counterfile="counterdat".$counternr.".txt";  
>   
> if(file\_exists($counterfile))  
> {  
> $dat=file($counterfile);  
> $zaehler=$dat[0]+1;  
> }  
> else

{


> $zaehler=1;  
> $dat=fopen($counterfile,"w");  
> fputs($dat,$zaehler);  
> fclose($dat);

}


> if (strlen($zaehler){  
> $zaehler=sprintf("%0".$digit. "d",$zaehler);  
> }

$bilder=array();


> for($i=0;$i{  
> $bilder[$i]=imagecreatefromjpeg($bildname.substr($zaehler,$i,1).".jpg");  
>   
> }  
> $eb=imagesx($bilder[0]);  
> $eh=imagesy($bilder[0]);  
> $gb=$eb\*strlen($zaehler);  
> $img=ImageCreate($gb,$eh);  
>   
> for($i=0;$i<count></count>{  
> imagecopyresized($img,$bilder[$i],$eb\*$i,0,0,0,$eb,$eh,$eb,$eh);  
> }

header("Content-type: image/".$ext);


> imagejpeg($img);  
> imagedestroy($img);  
> ?\>

Versuchs mal.

Johannes Matschke

Hallo Johannes,

hab das PHP-Skript jetzt soweit abgeändert. Jetzt bekomme ich bei Aufruf des Bildes nur folgende Fehlermeldung:

Parse error : parse error, unexpected ‚=‘ in /home/www/web941/html/counter.php on line 2

Was nu?

Kerstin

Hallo Kerstin,

Ich bin zwar nicht der Johannes, aber:

hab das PHP-Skript jetzt soweit abgeändert. Jetzt bekomme ich
bei Aufruf des Bildes nur folgende Fehlermeldung:

Parse error : parse error, unexpected ‚=‘ in
/home/www/web941/html/counter.php on line 2

Was steht denn in der Zeile 2? Kannst Du die ersten Zeilen posten? Danke!

Puersti

Hallo Johannes,

hab das PHP-Skript jetzt soweit abgeändert. Jetzt bekomme ich
bei Aufruf des Bildes nur folgende Fehlermeldung:

Parse error : parse error, unexpected ‚=‘ in
/home/www/web941/html/counter.php on line 2

Mein Lieblings-PHP-Fehler: ich habe die $ vergessen.

if (isset($_GET[‚counternr‘]))
$ counternr=$_GET[‚counternr‘]; else
$ counternr=0;
if (isset($_GET[‚digits‘])) $ digits=$_GET[‚digits‘];
else $ digits=0;

Und da du bildname, wie ich gemerkt habe, doch benutzt, sollte
noch
if (isset($_GET[‚bildname‘]))
$ bildname=$_GET[‚bildname‘]; else $ bildname=0;

Johannes Matschke

1 Like

*****

hm, die Grafik wird jetzt zwar angezeigt, aber leider bleibt der Zähler auf dem jetzigen Stand stehen. Das ist ja irgendwie nicht ganz Sinn der Sache.

Hat das was mit den Schreibrechten für PHP auf den Ordner zu tun? Wie kann ich denn die Schreibrechte vergeben?

Hier noch mal der komplette Code:

<?php if (isset($_GET['counternr'])) $counternr=$_GET['counternr']; else $counternr=0;<br />if (isset($\_GET['digits'])) $digits=$\_GET['digits']; else $digits=0;
if (isset($\_GET['bildname'])) $bildname=$\_GET['bildname']; else $bildname=0;

$counterfile="counterdat".$counternr.".txt";

if(file\_exists($counterfile))
{
$dat=file($counterfile);
$zaehler=$dat[0]+1;
}
else
{
$zaehler=1;
$dat=fopen($counterfile,"w");
fputs($dat,$zaehler);
fclose($dat);
}

if(!$digit)
$digit=0;

if (strlen($zaehler){
$zaehler=sprintf("%0".$digit. "d",$zaehler);
}

$bilder=array();
for($i=0;$i\<=strlen($zaehler)-1;$i++)
{
$bilder[$i]=imagecreatefromjpeg($bildname.substr($zaehler,$i,1).".jpg");

}
$eb=imagesx($bilder[0]);
$eh=imagesy($bilder[0]);
$gb=$eb\*strlen($zaehler);
$img=ImageCreate($gb,$eh);

for($i=0;$i<count></count>{
imagecopyresized($img,$bilder[$i],$eb\*$i,0,0,0,$eb,$eh,$eb,$eh);
}
header("Content-type: image/".$ext);
imagejpeg($img);
imagedestroy($img);
?\>

Kerstin

Mein Fehler…
Hallo
Ich habe dir dein Script kaputtkorregiert. Die Klammern nach dem else müssen wieder weg. Sonst wird der aktuelle Wert nicht gespeichert.

<?php :
if (isset($\_GET['counternr'])) $counternr=$\_GET['counternr']; else $counternr=0; if (isset($\_GET['digits'])) $digits=$\_GET['digits']; else $digits=0; if (isset($\_GET['bildname'])) $bildname=$\_GET['bildname']; else $bildname=0; $counterfile="counterdat".$counternr.".txt"; if(file\_exists($counterfile)) { $dat=file($counterfile); $zaehler=$dat[0]+1; } else $zaehler=1;

$dat=fopen($counterfile,„w“);
fputs($dat,$zaehler);
fclose($dat);

if(!$digit)
$digit=0;

if (strlen($zaehler){
$zaehler=sprintf("%0".$digit. „d“,$zaehler);
}

$bilder=array();
for($i=0;$i<=strlen($zaehler)-1;$i++)
{
$bilder[$i]=imagecreatefromjpeg($bildname.substr($zaehler,$i,1).".jpg");

}
$eb=imagesx($bilder[0]);
$eh=imagesy($bilder[0]);
$gb=$eb*strlen($zaehler);
$img=ImageCreate($gb,$eh);

for($i=0;$i{
imagecopyresized($img,$bilder[$i],$eb*$i,0,0,0,$eb,$eh,$eb,$eh);
}
header(„Content-type: image/“.$ext);
imagejpeg($img);
imagedestroy($img);
?>

Johannes Matschke

Hallo
Ich habe dir dein Script kaputtkorregiert. Die Klammern nach
dem else müssen wieder weg. Sonst wird der aktuelle Wert nicht
gespeichert.

Hallo Johannes,

jetzt habe ich wieder das Problem, daß die Grafik nicht angezeigt werden kann und es (bei Direktaufruf) folgende Fehlermeldugen gibt:

Warning: fopen(counterdat0.txt): failed to open stream: Permission denied in /home/www/web941/html/counter.php on line 17

Warning: fputs(): supplied argument is not a valid stream resource in /home/www/web941/html/counter.php on line 18

Warning: fclose(): supplied argument is not a valid stream resource in /home/www/web941/html/counter.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at /home/www/web941/html/counter.php:17) in /home/www/web941/html/counter.php on line 44

Diese Fehlermeldungen sagen mir leider alle nichts, da ich gerade erst anfange, PHP zu lernen und der Counter ist mein erstes Skript… Also sorry für so manche dumme Frage.

Kerstin

<?php ::
if (isset($\_GET['counternr'])) $counternr=$\_GET['counternr']; else $counternr=0; if (isset($\_GET['digits'])) $digits=$\_GET['digits']; else $digits=0; if (isset($\_GET['bildname'])) $bildname=$\_GET['bildname']; else $bildname=0; $counterfile="counterdat".$counternr.".txt"; if(file\_exists($counterfile)) { $dat=file($counterfile); $zaehler=$dat[0]+1; } else $zaehler=1;

$dat=fopen($counterfile,„w“);
fputs($dat,$zaehler);
fclose($dat);

if(!$digit)
$digit=0;

if (strlen($zaehler){
$zaehler=sprintf("%0".$digit. „d“,$zaehler);
}

$bilder=array();
for($i=0;$i<=strlen($zaehler)-1;$i++)
{
$bilder[$i]=imagecreatefromjpeg($bildname.substr($zaehler,$i,1).".jpg");

}
$eb=imagesx($bilder[0]);
$eh=imagesy($bilder[0]);
$gb=$eb*strlen($zaehler);
$img=ImageCreate($gb,$eh);

for($i=0;$i{
imagecopyresized($img,$bilder[$i],$eb*$i,0,0,0,$eb,$eh,$eb,$eh);
}
header(„Content-type: image/“.$ext);
imagejpeg($img);
imagedestroy($img);
?>

Johannes Matschke

auf welchem Stand bleibt der counter stehen?
Auf 1? dann wunderts mich nicht :wink:
Deinem Script fehlen offenbar die Schreibrechte um diese Datei anzulegen.
Nochmal: Ist die (text-)Datei auf dem Server vorhanden?

Warning: fopen(counterdat0.txt): failed to open stream:
Permission denied in /home/www/web941/html/counter.php on line
17
Warning: fputs(): supplied argument is not a valid stream
resource in /home/www/web941/html/counter.php on line 18
Warning: fclose(): supplied argument is not a valid stream
resource in /home/www/web941/html/counter.php on line 19

deutet darauf hin, dass das file nicht gefunden und nicht geschrieben werden kann…

Warning: Cannot modify header information - headers already
sent by (output started at
/home/www/web941/html/counter.php:17) in
/home/www/web941/html/counter.php on line 44

ist klar - wenn ne Fehlermeldung kommt können keine Header mehr ausgegeben werden…
Header werden vor dem Seitenaufbau geschickt um dem Browser mitzuteilen, dass es eine Grafik ist oder dass eine andere Seite aufgerufen werden soll oder dass eine .htaccess-Abfrage gestartet werden soll etc…

Diese Fehlermeldungen sagen mir leider alle nichts, da ich
gerade erst anfange, PHP zu lernen und der Counter ist mein
erstes Skript… Also sorry für so manche dumme Frage.

deswegen erkläre ichs Dir :wink:

Schreibrechte…
wenn Du mit dem normalen FTP-Commandline-Tool arbeitest sollte ein

> chmod 755 counterscript.php
reichen…

wenn Du einen FTP-Client verwendest dann musst Du selbst danach suchen, wie man das umstellt…
Manche Clients ermöglichen auch Zwischeninputs durch den user…
einfach mal nachgucken…

wenn Du mit dem normalen FTP-Commandline-Tool arbeitest sollte
ein

> chmod 755 counterscript.php
reichen…

Ich denke, dass auf den ganzen Ordner Schreibzugriff erlaubt werden muss, da dort ja neue Dateien angelegt bzw. geändert werden sollen.
Also, Ordner und die enthaltenen counter…txt auf Schreibzugriff für alle stellen. Kann eigentlich jedes FTP-Programm.

nicht zwingend

Ich denke, dass auf den ganzen Ordner Schreibzugriff erlaubt
werden muss, da dort ja neue Dateien angelegt bzw. geändert
werden sollen.
Also, Ordner und die enthaltenen counter…txt auf
Schreibzugriff für alle stellen. Kann eigentlich jedes
FTP-Programm.

wenn die Datei nicht vorhanden ist und erstellt wird erhält sie die gleichen Rechte wie die Datei, die sie erstellt hat…
Ausser man setzt die rechte explizit anders…

wenn die Datei nicht vorhanden ist und erstellt wird erhält
sie die gleichen Rechte wie die Datei, die sie erstellt hat…
Ausser man setzt die rechte explizit anders…

möglich. Ich bin von Windows ausgegangen, wo die Rechte vom Ordner übernommen werden, nicht von der erstellenden Datei.

Johannes Matschke