Versuche eine Seite mit einer Zeile JavaScript und PHP Script zu laufen bringen

M

master.rv

Gast
Hi,

Ganz in vorweg, ich bin absoluter Neuling bei PHP und JavaScript auch.:rolleyes:

ich habe eine Seite wo man eine Datei "download.zip" herunterladen könnte. Dabei möchte ich mit PHP einen Zähler setzen und in einer Datei speichern. Das die bisherige download Zahl an der Seite zeigt. Dabei wird auch die IP ($adresse) von Downloader auf der Seite gezeigt.
Nach dem download sollte ich eine Mail über den download bekommen. Was auch funktioniert, aber der Zähler wird nicht erhöht und nicht in der "zahler.txt" "Datei gespeichert. Es wird nur der alte Stand gezeigt. Die Zugriffsrechte auf dem Server sind korrekt gesetzt.
Leider vertragen sich die beide nicht so recht. Sobald die JavaScript Zeile aktiviert wird schmiert die Seite ab. Und auch der Zähler wird in der "$datei" nicht erhöht und auch nicht gespeichert. Ich kann den Fehler leider nicht finden.:(
Das sind die Codes:
PHP:

$adresse = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : "127.0.0.1";
print "<font size="5" face='Times'><br />";
print "Das ist Deine IP: $adresse<br />" ;
print "</font>";

$meineIP = "xxx.xxx.x.xxx";
$datei = "zaehler.txt";

$datei =fopen($datei,"r");
$aufruf =fgets($datei,6);
$aufruf = ($aufruf +1);
$aufruf = (int) preg_replace('/[^\d]/', '', $aufruf);
fclose($datei);

print "<font size="4" color="#66ffff" face='Times'><br />";
print "( Die download.zip wurde bis jetzt insgesamt <span id="jsCount">$aufruf</span> mal heruntergeladen )";
print "</font>";


if ($_GET['file']=="zip") AND (!$meineip == $adresse)){

$datei=fopen($datei, "r+");
$aufruf =fgets($datei,6);
$zaehler = ($aufruf + 1);
rewrite($datei);
fwrite($datei, $zaehler);
fclose($datei);

$subject="download.zip wuerde heruntergeladen.";
$subject1="Epson Treiber (als ZIP Datei) wuerde von dieser IP Adresse: $adresse heruntergeladen.\n
(Insgesammt zum $zaehler-ten mal)";
$message=" Hallo Webmaster von $domain,\n\n der $subject1 \n\n ";
mail($to,$subject,$message,$headers,"-f ".$from);
} else

die();

?>

JavaScript:

<a href="?file=zip" onClick="document.getElementById('jsCount').innerHTML= parseInt(document.getElementById('jsCount').innerHTML)+1">download.zip / als ZIP Datei</a>


Und damit sollte der Zähler auf der Seite gezeigt werden:

print "<font size="4" color="#66ffff" face='Times'><br />";
print "( Die download.zip wurde bis jetzt insgesamt <span id="jsCount">$aufruf</span> mal
heruntergeladen.)";
print "</font>";
 
Zuletzt bearbeitet von einem Moderator:
Hi,

das habe ich auch schon probiert, leider keine Besserung. Sobald ich den Link anklicke schmiert das ganze PHP Script ab. Es bleib nur eine Zeile (print "( Die download.zip wurde bis jetzt insgesamt <span id="jsCount">$aufruf</span> mal heruntergeladen )";) auf schwarzen Hintergrund.
 
schuldigung aber den code kotz mich so an.. bist wohl auf tutorials von 2004 oder so gestoßen..
schreib bitte dein html nicht in php.. und den font tag gibts doch gar nicht mehr.. man soll css nutzen..

hier mal ein hoffentlich funktionierendes beispiel für den ersten teil des codes.. vll hilft es ja

PHP:
<?php

$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1';

$count = (int)file_get_contents('zaehler.txt');
$count++;
file_put_contents('zaehler.txt', $count);

?>

<div class="ip">
    Das ist deine IP: <?= $ip ?>
</div>

<div class="download">
    Die download.zip wurde bis jetzt insgesamt <span id="count"><?= $count ?>  mal heruntergeladen</span>
</div>

<a href="?file=zip" id="download">download.zip / als ZIP Datei</a>

<style>
    .ip {
        font-size: large;
    }

    .download {
        font-size: larger;
        color: #66ffff;
    }
</style>

<script>
    document.addEventListener('DOMContentLoaded', function () {
        document.querySelector('#download').addEventListener(function () {
            var count = document.querySelector('#count');
            count.textContent = parseInt(count.textContent) + 1;
        });
    });
</script>
 
Hi,

@kling1

danke für den Script, wie ich erwähnt habe bin absolutes Neuling in der Sache. Und das alles habe ich als Beispiele in Netz gefunden und auf meine Bedürfnisse verändert. Wüsste nicht da es so veraltet ist. :(
Werde versuchen es zum laufen bekommen.

Danke. :)
Ergänzung ()

Hi,
Habe Dein Script in die Seite integriert. Es gibt keine Fehler, aber es gibt 2 Probleme: 1 Der Counter wird erhöht sobald man die Seite aufruft und 2 Problem ist: es wird nichts heruntergeladen.
Wenn ich den download Link anklicke wird die Seite reloadet und der Counter wird erhöht.
Aber kein download wird ausgeführt. Es wäre nett von Dir wenn Du schaust woran es liegt.

Danke im voraus.
 
Zuletzt bearbeitet von einem Moderator:
hab das script nur schnell runtergeschrieben.. weil mir paar sachen aufgefallen sind.. hab es nicht getestet und wusste auch nicht genau was du wolltest.. hier nun das funktionierende script :D hab es getestet.. funktioniert wenn du eine download.zip die im selben ordner wie das script liegt.. runterladen mächtest

PHP:
<?php
 
$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1';
 
$count = (int)file_get_contents('zaehler.txt');

switch ($_GET['action']) {
    case 'download':
        incrementCount($count);
        download();
        break;
}

function incrementCount($count)
{
    $count++;
    file_put_contents('zaehler.txt', $count);
}

function download($file = 'download.zip')
{
    header('Pragma: public');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Cache-Control: public');
    header('Content-Description: File Transfer');
    header('Content-type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . $file . '"');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file));
    ob_end_flush();
    @readfile($file);
}

?>
 
<div class="ip">
    Das ist deine IP: <?= $ip ?>
</div>
 
<div class="download">
    Die download.zip wurde bis jetzt insgesamt <span id="count"><?= $count ?></span>  mal heruntergeladen
</div>
 
<a href="?action=download" id="download">download.zip / als ZIP Datei</a>
 
<style>
    .ip {
        font-size: large;
    }
 
    .download {
        font-size: larger;
        color: #f00;
    }
</style>

<script>
    document.addEventListener('DOMContentLoaded', function () {
        document.querySelector('#download').addEventListener('click', function () {
            var count = document.querySelector('#count');
            count.textContent = parseInt(count.textContent) + 1;
        });
    });
</script>
 
Hi,

es ist sehr lieb von Dir, vielen Dank. :D Habe nicht erwartet das Du sich die Mühe gibst um mir weiter zu helfen.

Werde es testen und dann gebe ich hier Bescheid.

Gruß
Ergänzung ()

Hi,

hier das Ergebnis: der Counter funktioniert und auch der download. Aber statt der "download.zip) Datei kommt der ganze Script von Dir in Textform in der download.zip Datei statt richtigen Inhalt an, und mit geänderten Namen der Datei (_download_download.zip)? Die Datei download.zip liegt in anderen Verzeichnis ("download") als das Script selbst. Das Script liegt in "html" Verzeichnis.

Habe auch die download.zip in den "html" Verzeichnis verschoben, und die Datei wird herunter geladen. Aber der Inhalt kommt nicht als zip sonder in einen Format das man nicht entpacken und auch nicht lesen kann.
Beispiel:
PK –@D9 LIB/PK ý†Ø,]ÜdÆþˆ
0
LIB/hhupd.exeìZPT×~¿»°ÀÂ.ÊF5YŸi~_6( –@D½ºä.I C¼l0p/±-覻ÛBÖM3}&ϦIG£Í8&mófìI
b4¢M^ƦF™1󆾚—K—y%
Ašìóöó=ç.Á—f^ûo‡ë|öžû=ç|Ï÷|¿ßó=ßsdóc/É‚ ˜]„A?¥Âï@Öïf 'Ò~±|ÐTó‹åµr[·«³«cWWÓÓ®MííŠëÉW—ÚîjkwUlõºžîhnÉËÌLÏ5xˆA¨1%½;?tÓ÷¿% ˜œœaJ„@èLgíV®Æ8Ä>M¬Œ¶ÃœjM£Ú˜A/^CméÇÁ›8æÌ¡ù'‚°Ÿ
ÂPüTú,}ì¶aØ9§áA(ø_èdöÁ qÓWç)-{¼«ž7zá;Á\VêØhu ÂyÍMJ¾lK¹›…„fŸRHŸ×Õݵ“>H_˜‹°ï£ßkWú™Âü3ÿÌ?óÏü3ÿÌ?óÏü3ÿÌ?óÏüóÿçÙó’ L¿ˆ#3Þ· UÀÀèŠ÷Aàð.ð10öï›Í¯ „sÅ¿·üT:p(³ÀEà3à?¥À]ÀŠƒ8Z5@ =À~à p8ç( ’þý "ž
Þ!à pxF
˜¬/ƒÉ€w) 2°èǁAà,pø0 ¤c¾+€µ@%ðàz€ç×'1Æ䜣ÏÚ¿æ:Zñ
䊀‡ Èš x8_Ó€õUð”«ð®Z.àO€ç—€×Ào ÇpÏ«|ldÐPþæÕ›} q÷BWŽÄ…#ã¦:º#º˜fTeÿp]ï˦›êRÈd•¼®æèÍut?³Ìnøó!=ocY-•»[µ³©³-¯y÷îÙï=üKjéênëhÊš{šÚw¶4WoáÌ··<ÙÑ¡BʏyF…‹tx[¼²ª4w<Ó.vµõ´ínÙÕ"T´ìÞÒÑܲ]m¯¨©qß/45÷t6í|Š

Ist das Binär?

Es ist schon der richtige Weg, so weit war ich noch nicht. :rolleyes:

P.S. Wenn Du es möchtest dann kann ich Dir die komplette "download.php" per PN schicken?

Gruß
 
Zuletzt bearbeitet von einem Moderator:
versuch mal die download function so abzuändern..
PHP:
function download($file = 'download.zip')
{
    header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
    header("Content-Type: application/zip");
    header("Content-Transfer-Encoding: Binary");
    header("Content-Length: ".filesize($file));
    header("Content-Disposition: attachment; filename=\"".basename($file)."\"");
    readfile($file);
}

hab das downloaden auch nur irgendwo kopiert.. und auf meinem system (linux/php7 mit built in php server) funktioniert es.
 
Hi,

danke für Deine Mühe. Es funktioniert leider auch nicht. Der Server auf dem meine HP gehostet wird lauft unter PHP 5.4.
Das sind die paar Zeilen von der heruntergeladenen Datei, nach der änderung der "function download":

PK –@D9 LIB/PK ý†Ø,]ÜdÆþˆ
0
LIB/hhupd.exeìZPT×~¿»°ÀÂ.ÊF5YŸi~_6( –@D½ºä.I C¼l0p/±-覻ÛBÖM3}&ϦIG£Í8&mófìI
b4¢M^ƦF™1󆾚—K—y%
Ašìóöó=ç.Á—f^ûo‡ë|öžû=ç|Ï÷|¿ßó=ßsdóc/É‚ ˜]„A?¥Âï@Öïf 'Ò~±|ÐTó‹åµr[·«³«cWWÓÓ®MííŠëÉW—ÚîjkwUlõºžîhnÉËÌLÏ5xˆA¨1%½;?tÓ÷¿% ˜œœaJ„@èLgíV®Æ8Ä>M¬Œ¶ÃœjM£Ú˜A/^CméÇÁ›8æÌ¡ù'‚°Ÿ
ÂPüTú,}ì¶aØ9§áA(ø_èdöÁ qÓWç)-{¼«ž7zá;Á\VêØhu ÂyÍMJ¾lK¹›…„fŸRHŸ×Õݵ“>H_˜‹°ï£ßkWú™Âü3ÿÌ?óÏü3ÿÌ?óÏü3ÿÌ?óÏüóÿçÙó’ L¿ˆ#3Þ· UÀÀèŠ÷Aàð.ð10öï›Í¯ „sÅ¿·üT:p(³ÀEà3à?¥À]ÀŠƒ8Z5@ =À~à p8ç( ’þý "ž
Þ!à pxF

Sie sind genauso wie die frühere. Aber die Größe der Datei ist exakt wie bei der korrekten Datei, war auch früher ok. Vieleicht schickt der Server die Datei in falschen Format rüber?
Ergänzung ()

Hi,

@kling1

es funktioniert. Habe mir genauer Dein Script (die erste Version) angeschaut und habe den Fehler gefunden:
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename="".$file.""");
ob_end_clean();
readfile($file);

Statt "$file_name" sollte einfach nur die Variable "$file" dort stehen.
Problem beseitigt, geht alle wie es sollte. Bin überglücklich, dank Deiner Hilfe. Weiter per PN, Ok?
 
Zuletzt bearbeitet von einem Moderator:
vll ja irgendwas mit den zugriffsrechten..
ansonsten vll mal mit was ganz billigem versuchen :D

PHP:
function download($file = 'download.zip')
{

    header('Location: ' . $file);
    exit;
}
 
Hi,

ich möchte mich hier bei dem User "kling1" herzlich für seine Tatkräftige Unterstützung bedanken. Ohne seine Hilfe würde mein Vorhaben nicht funktionieren. Eigentlich hat Er den Script so umgeschrieben, das jetzt funktioniert es so wie ich es wollte und auch sollte.
Von solchen Mitglieder eines Forum können auch viel andre das gute lernen. Und auch Hilfe bei Problemen bekommen. :D

@kling1

Vielen Dank für Deine Unterstützung. :):):)

LG Ludwig
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben