demerzel: js mit php einbinden

hallo leute,

hab da ein problem und nach endlosem suchen im netz noch keine lösung gefunden.
ich möchte einen countdown auf meiner internetseite einbauen und habe da eine funktion in js gefunden.
ich habe sie in die datei "counter.js" gespeichert.
jetzt möchte ich diese funktion über php aufrufen.
z.b
<?php
    document.write('<script type="text/javascript"
    src="/counter.js"></script>');
?>

ich bekomme dann die fehlermeldung:
Fatal error: Call to undefined function: write() in /mnt/be2/02/037/00000022/htdocs/klassentreffen/mitte.php on line 2

was mach ich falsch?
mfg und danke im voraus

  1. Ho,

    ganz einfach, binde dein JavaScript mit Include(); ein.
    <head>
    <?php
    include("Datei.js");
    ?>

    1. Hi there,

      ganz einfach, binde dein JavaScript mit Include(); ein.
      <head>
      <?php
      include("Datei.js");
      ?>

      Hast Du wohl einen Waffenschein für Deine Ratschläge?

      1. Hi,

        Hast Du wohl einen Waffenschein für Deine Ratschläge?

        wie meinen?
        Natürlich kann man so ganz einfach sein JavaScript im Header einbinden....

        1. Sers,

          Natürlich kann man so ganz einfach sein JavaScript im Header einbinden...

          Aber der Fehler wird der geliche bleiben, denn auch mit dem include wird der Inhalt von PHP Interpretiert... Genau wie vorher.

          1. Hi,

            Aber der Fehler wird der geliche bleiben, denn auch mit dem include wird der Inhalt von PHP Interpretiert... Genau wie vorher.

            quatsch, PHP Interpretiert die Includierten JavaScripte nicht.
            Includier mal eine HTML Datei, wird die von PHP Interpretiert? Ganz bestimmt nicht.

            1. Hello,

              quatsch, PHP Interpretiert die Includierten JavaScripte nicht.

              Eben Doch!
              Include bindet den eingebunden Code so ein, als stünde er direkt an der Stelle, an der das die "Funktion" include() ausgeführt worden ist.
              Der Befehlszeiger wird nach der Einbindung auf den Anfang des eingebunden Blockes zurückgestellt.

              Deshalb spricht man bei derartigen Programmbefehlen auch nicht von einer Funktion, sondern von einem Compiler-Konstrukt oder bei PHP einem Parser-Konstrukt.

              Unterschied Konstrukt/Funktion:
              Man kann die Funktionalität eines Konstruktes in der jeweiligen Sprache üblicherweise _nicht_ nachbauen.
              (Ausnahmen bestätigen die Regel...)

              Harzliche Grüße vom Berg
              http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau

              1. Ho,

                ok, ich gebe mich geschlagen, da habe ich wohl etwas falsch 'interpretiert' ;)

                1. Hi there,

                  ok, ich gebe mich geschlagen, da habe ich wohl etwas falsch 'interpretiert' ;)

                  Jein. Wie ich gerade nochmals nachgelesen habe, haben wir alle etwas übersehen:

                  "Beim Einbinden einer Datei wechselt der Parser vom PHP-Modus zu Beginn der Zieldatei in den HTML-Modus und kehrt am Ende der eingebunden Datei wieder in den PHP-Modus zurück. Deshalb muss jeglicher Code innerhalb der eingebundenen Datei, der als PHP-Code ausgeführt werden soll, von gültigen PHP-Start- und Ende-Tags eingefaßt sein."

                  Was immer der PHP-Parser im "HTML-Modus" macht, wenn Du keine "<? ?>"-Begrenzer setzt, dann wird der Inhalt zumindest nicht als PHP-Code interpretiert.

                  Inwieweit der Inhalt dann an den Browser gesandt wird und der das dann als Javascript ausführt mag von Fall zu Fall unterschiedlich sein, in jedem Fall aber ist das Einbinden von .js-Dateien per include in PHP eine eher falsche Zugangsweise und unter Garantie nicht im Sinne des Erfinders...

                  1. Hello,

                    "Beim Einbinden einer Datei wechselt der Parser vom PHP-Modus zu Beginn der Zieldatei in den HTML-Modus und kehrt am Ende der eingebunden Datei wieder in den PHP-Modus zurück. Deshalb muss jeglicher Code innerhalb der eingebundenen Datei, der als PHP-Code ausgeführt werden soll, von gültigen PHP-Start- und Ende-Tags eingefaßt sein."

                    Oh, natürlich... Du hast Recht.

                    <?php
                      ## und
                    ?>

                    müssen die Datei begrenzen, wenn sie als PHP-Datei geparst werden soll.
                    Nun habe ich das tatsächlich mit eval() verwechselt, wo es genau umgekehrt ist.
                    http://www.php.net/manual/de/function.eval.php

                    Das war dann wohl eine "chiasmische Fehlleistung" *tztz*

                    Harzliche Grüße vom Berg
                    http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau

                    1. Ho Tom,

                      ok, also ist das Includieren von JavaScript doch ohne weiteres möglich da PHP die Datei als HTML parst, richtig?
                      huhhh....

                      1. Hello,

                        ok, also ist das Includieren von JavaScript doch ohne weiteres möglich da PHP die Datei als HTML parst, richtig?

                        Ja.
                        Entschuldige bitte die Verwirrung.
                        Ich arbeite erst seit sieben Jahren mit PHP *duck*

                        Als Ergebnis der Diskussion bleibt mMn aber der Hinweis, dass Include() hier nicht angebracht ist, weil es eben eine "aktive Einbindung" des Dateiinhaltes darstellt, erkannte Tags also auswertet.

                        Um JS einzubinden würde daher eine "passive Einbindung" genügen.  --> readfile()

                        Harzliche Grüße vom Berg
                        http://www.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau

                        1. Hi Tom,

                          ok, alles klar und ich dachte schon das alle meine Seiten jetzt fehlerhaft sind ... aber nun haben wir alle mal Intensiv über unser liebes 'include' nachgedacht.
                          Danke für den Tip mit Readfile(), da habe ich echt noch nie drüber nachgedacht....

                          Schönen Sonntag!

            2. Hi there,

              quatsch, PHP Interpretiert die Includierten JavaScripte nicht.
              Includier mal eine HTML Datei, wird die von PHP Interpretiert? Ganz bestimmt nicht.

              Also, das PHP Handbuch sagt ganz klar:

              Die include() Anweisung bindet die angegebene Datei ein und wertet diese aus.

              (look at this)

              Ein viele andere Bedeutung von "Auswerten" als "Interpretieren" wirst Du nicht finden. Und da, wie schon darauf hingewiesen wurde, die Syntax von JS und PHP fast identisch sind, kann es scheinbar funktionieren, aber mit Sicherheit wird dabei nichts sinnvolles herauskommen, ausser, Deine JS-Datei enthält Code, der in PHP Sinn macht oder aber Du verstehst hier generell etwas miss...

              1. Hello,

                Also, das PHP Handbuch sagt ganz klar:

                Die include() Anweisung bindet die angegebene Datei ein und wertet diese aus.

                (look at this)

                Inzwischen haben wir unseren Denkfehler ja glücklicherweise gefunden... *schäm*

                Die Formulierung "wertet aus" bezieht sich also darauf, dass Texte in erkannten Tags dem entsprechenden Handler zugeführt werden, was bei einem readfile() nicht passieren kann, da der Dateiinhalt dort "unbehandelt" an die Standardschnittstelle weitergereicht wird.

                Harzliche Grüße vom Berg
                http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau

        2. Hallo,

          Hast Du wohl einen Waffenschein für Deine Ratschläge?
          wie meinen?
          Natürlich kann man so ganz einfach sein JavaScript im Header einbinden....

          Mag sein. Die Frage ist nur, ob der Browser ihn dann darstellen - weil es ja einfach nur Text ist, oder unterdrücken soll - weil er im <head> steht.

          Ausgeführt wird er aber ganz sicher nicht. Dazu bedarf es eines <script type="text/javascript">-Elements, welches in der externen js-Datei mit Sicherheit nicht vorhanden ist.

          mfg. Daniel

          1. Hi,

            ja, das sollte doch wohl klar sein das man vorher die anweisung:
            <script type="text/javascript">
            <?php
            include("Irgendwas.js");
            ?>
            </script>
            also den script-einleiten tag setzen muss.

            1. Hallo,

              ja, das sollte doch wohl klar sein…

              Naja, dein Code-Beispiel sah so aus:

              <head>
              <?php
              include("Datei.js");
              ?>

              Und das würde so nicht funktionieren.

              …das man vorher die anweisung:
              <script type="text/javascript">
              <?php
              include("Irgendwas.js");
              ?>
              </script>
              also den script-einleiten tag setzen muss.

              Schon besser.

              Allerdings frage ich mich, warum man das Script nicht einfach über <script src="foo.js" type="text/javascript"></script> einbinden sollte.

              mfg. Daniel

              1. hi D.R,

                Allerdings frage ich mich, warum man das Script nicht einfach über <script src="foo.js" type="text/javascript"></script> einbinden sollte.

                Ja, das natürlich auch.

                <script type="text/javascript" src="<?php echo
                "Irgendwas.js";?>"></script>

                sollte doch einfacher sein...

                1. Hi,

                  sorry eher so:

                  <script type="text/javascript" src="<?php echo 'js.js';?>">
                  </script>

                2. Hello,

                  <script type="text/javascript" src="<?php echo

                  "Irgendwas.js";?>"></script>

                  So sollte es besser funktionieren.
                  Die Häkchen gehören hier zum Echo-Befehl und dürfen deshalb nicht escaped werden.
                  Man kann aber auch einfache Häkchen nehmen, da 'irgendwas.js' nur ein Dateiname und keine PHP-Variable ist.

                  <script type="text/javascript"
                           src="<?php echo 'Irgendwas.js';?>">
                   </script>

                  Harzliche Grüße vom Berg
                  http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau

                  1. Hi Tom,

                    ok, wenn PHP dann die JavaScript Datei Interpretiert, wieso klappt das dann bei mir:

                    <script type="text/javascript">
                    <?php
                    include("javascript.js");
                    ?>
                    </script>

                    Es gibt keinen fehler und der Inhalt der JS Datei wird richtig includiert... oder verstehe ich jetzt was von grund auf falsch?
                    So habe ich das immer gemacht, also dynamisch js eingebunden..

                    Danke!

                    1. Hello,

                      ok, wenn PHP dann die JavaScript Datei Interpretiert, wieso klappt das dann bei mir:

                      <script type="text/javascript">
                      <?php
                      include("javascript.js");
                      ?>
                      </script>

                      Dazu müsstest Du schon bekanntgegen, was in der Datei drinsteht.

                      ?>
                       //jede Menge Javascript
                      <?php

                      Würde z.B. funktionieren.

                      Aber warum mit Kanonen auf Spatzen schießen?
                      Readfile() ist hier angebrachter.

                      Harzliche Grüße vom Berg
                      http://www.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau

                      1. Ho Tom,

                        in de JS stehen nur functionen, wieso? Ist das wichtig?

                        1. Hello,

                          in der JS stehen nur functionen, wieso? Ist das wichtig?

                          Das ist in diesem Thread doch schon diskutiert worden.
                          Wenn man den PHP-Parser nicht davon abhält, würde er versuchen, diese als PHP-Code und -Funktionen zu interpretieren. Da JS und PHP auch noch den gleichen geschützen Begriff für die Kennzeichnung einer Funktionsdefinition verwenden und auch der Körper sehr ähnlich ist, muss das einfach krachen.

                          Warum das bei Dir nicht so ist, kann ich ohne Kenntnis der weiteren Umstände nicht beantworten.
                          Vielleicht fällt da einem Mitleser noch etwas ein?

                          Harzliche Grüße vom Berg
                          http://www.annerschbarrich.de

                          Tom

                          --
                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                          Nur selber lernen macht schlau

                          1. Hello,

                            Warum das bei Dir nicht so ist, kann ich ohne Kenntnis der weiteren Umstände nicht beantworten.
                            Vielleicht fällt da einem Mitleser noch etwas ein?

                            Einzige Idee, die mir spontan kommt, ist dass die JS-Funktionsdeklarationen gleichzeitig gültige PHP-Funktionsdeklarationen darstellen. Das ist u.U. möglich. PHP hat immer noch die unanangenehme Eigenschaft, dass es vergessene $ als Variablenkennzeichner manchmal stillschweigend ersetzt.

                            Harzliche Grüße vom Berg
                            http://www.annerschbarrich.de

                            Tom

                            --
                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                            Nur selber lernen macht schlau

                            1. Hi Tom,

                              mhhh, also die JavaScript funktionen überprüfen z.B eingabefelder und sowas. Also müsste es doch theoretisch knallen? Also bis auf den functions einleitung "function xyz()" kommt nichts vor was PHP "verstehen" könnte.
                              Bis jetzt lief alles einwandfrei aber nun bin ich echt stuzig geworden....
                              Wie includierst du dein JavaScript mit PHP?
                              Also bei Dynamischen seiten überprüfe ich ob GET-Variablen gesetzt sind, wenn ja switch ich welche wie z.B if(isset($_GET['side'])) schaue ich nach welche werte sich in 'side' befinden, befindet sich z.B der wert 'kontakt' in der Variable 'side' includiere ich das JavaScript wo ich die Functionen für die Überprüfung der Textfelder etc. geschrieben habe. Das alles spielt sich im Head ab... also alles in einer Datei, meistens der Index.
                              Aber auch so Includiere ich auch ganze Webseiten... wieso wird das nicht Interpretiert?

                              1. Hi there,

                                Aber auch so Includiere ich auch ganze Webseiten... wieso wird das nicht Interpretiert?

                                Weil, wie ich in dem anderen Posting geschrieben habe, in inkludierten Dateien nur der Bereich geparsed wird, der zwischen PHP-Begrenzern steht...

        3. Hi there,

          Natürlich kann man so ganz einfach sein JavaScript im Header einbinden....

          Klar. Du kannst auch den Text aus einem Harry Potter-Buch in PHP includen. Trotzdem darfst Du nicht erwarten, deshalb fliegen zu können...

    2. Hello,

      ganz einfach, binde dein JavaScript mit Include(); ein.
      <head>
      <?php
      include("Datei.js");
      ?>

      Include sorgt dafür, dass die eingebunde Datei durch den PHP-Parser ausgewertet wird. Eben gerade _das_ soll hier _nicht_ geschehen!

      readfile()

      wäre dann also die bessere Funktion für den erwünschten Zweck.

      http://www.php.net/manual/en/function.readfile.php

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

  2. n'Abend,

    <?php
        document.write('<script type="text/javascript" src="/counter.js"></script>');
    ?>

    ich bekomme dann die fehlermeldung:
    Fatal error: Call to undefined function: write() in /mnt/be2/02/037/00000022/htdocs/klassentreffen/mitte.php on line 2

    ja, sicher - PHP kennt keine Funktion write(), ich bin verblüfft, dass nicht sogar das nicht definierte Objekt document reklamiert wird.

    was mach ich falsch?

    Möchtest du nun eine Funktion _in PHP aufrufen_, oder mit PHP _Javascript-Code ausgeben_?

    So long,
     Martin

    --
    Frauen sind wie Elektrizität: Fasst man sie an, kriegt man eine gewischt.
    1. hi,

      <?php
          document.write(...);
      ich bekomme dann die fehlermeldung:
      Fatal error: Call to undefined function: write()

      ja, sicher - PHP kennt keine Funktion write(), ich bin verblüfft, dass nicht sogar das nicht definierte Objekt document reklamiert wird.

      Ist nicht so verblüffend.

      Diese Verwendung von document würde eine "Notice: Use of undefined constant document - assumed 'document'" bringen - wenn denn das error_reporting nicht geknebelt wäre.

      document wird bei Nichtexistenz also großzügigerweise als 'document' angenommen, damit wäre das Script noch lauffähig.
      Anschliessend folgt der Stringverkettungsoperator, der 'document' mit dem Rückgabewert von write() verknüpfen würde - wenn diese Funktion denn existierte. Tut sie aber leider nicht, und das ist dann ein Fatal Error, der eine Meldung erzeugen muss, weil so das Script nicht sinnvoll ausführbar ist.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Moin wahsaga,

        ja, sicher - PHP kennt keine Funktion write(), ich bin verblüfft, dass nicht sogar das nicht definierte Objekt document reklamiert wird.

        Ist nicht so verblüffend.

        Nein? Der Mechanismus, den du darstellst, also Konstante zu String, Stringverkettung, ...

        Diese Verwendung von document würde eine "Notice: Use of undefined constant document - assumed 'document'" bringen - wenn denn das error_reporting nicht geknebelt wäre.

        ... war mir schon klar. Und genau diese Notice hätte ich erwartet. Okay, dass jemand das error reporting kastrieren könnte, daran habe ich wieder nicht gedacht.

        Schönen Sonntag noch,
         Martin

        --
        Wer schläft, sündigt nicht.
        Wer vorher sündigt, schläft besser.
    2. also mir würde es reichen die funktion aufzurufen und die werte dann übergeben zu bekommen die ich dann wieder auf meiner internetseite ausgebe.
      ciao peter

      1. Hallo,

        also mir würde es reichen die funktion aufzurufen und die werte dann übergeben zu bekommen die ich dann wieder auf meiner internetseite ausgebe.

        dann mache dir bitte noch einmal klar, in welchem Kontext die Scripte ausgeführt werden:
         PHP auf dem Server
         Javascript im Browser des Besuchers

        Damit sollte dir klar werden, dass es völlig unmöglich ist, dass die eine der beiden Scriptsprachen eine Funktion aufruft, die die andere definiert.

        Bestenfalls kann PHP Javascript-Code erzeugen (ausgeben), der später beim Client ausgeführt wird - wenn er denn Javascript zulässt.

        So long,
         Martin

        --
        Lieber Blödeleien als blöde Laien.
  3. Hi,

    <?php
        document.write('<script type="text/javascript"
        src="/counter.js"></script>');
    ?>

    das sieht aus wie PHP mit Tourette-Syndrom.

    was mach ich falsch?

    Du are mixing différents linguae ohne sense ili intellegentia. That ne klappt jamais.

    Chea "Esta sont pjat different Sprachen." tah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah,

      <?php
          document.write('<script type="text/javascript"
          src="/counter.js"></script>');
      ?>
      das sieht aus wie PHP mit Tourette-Syndrom.

      öhm, wie meinst du das? Wo siehst du die nicht willentlich kontrollierbaren Muskelzuckungen oder Zwangshandlungen? Ich habe mich vor einiger Zeit mal über diese Krankheit informiert, weil eine Kollegin von mir darunter leidet. Und den Zusammenhang sehe ich hier nicht wirklich.

      Du are mixing différents linguae ohne sense ili intellegentia. That ne klappt jamais.

      *fg*

      Chea "Esta sont pjat different Sprachen." tah

      *rofl*
      Das war noch der Kracher vor dem Schlafengehen, danke. :-)

      Gute Nacht,
       Martin

      --
      Wer schläft, sündigt nicht.
      Wer vorher sündigt, schläft besser.
      1. Hi,

        das sieht aus wie PHP mit Tourette-Syndrom.
        öhm, wie meinst du das?

        ich meinte die berühmteste Art der Auswirkung, also das, was üblicherweise mit dem Begriff (und nicht mal mit der Krankheit) assoziiert wird. Zum Glück haben schließlich nur die wenigsten Menschen einen Grund, sich genauer mit der Krankheit zu beschäftigen.

        Das war noch der Kracher vor dem Schlafengehen, danke. :-)

        Stets zu Diensten :-)

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  4. hallo leute,

    also erstmal wow - hätte nicht gedacht das es soweit ausartet, aber ich weiß nun immer noch nicht was ich machen soll.hier ist meine seite(in html):

    <script language="JavaScript">

    var end = new Date('July 18, 2009 09:00:00');
    function toSt2(n) {
      s = '';
      if (n < 10) s += '0';
      return (s + n).toString();
    }
    function toSt3(n) {
      s = '';
      if (n < 10) s += '00';
      else if (n < 100) s += '0';
      return (s + n).toString();
    }
    function countdown() {
      d = new Date();
      count = Math.floor(end.getTime() - d.getTime());
      if(count > 0) {
        miliseconds = toSt3(count%1000); count = Math.floor(count/1000);
        seconds = toSt2(count%60); count = Math.floor(count/60);
        minutes = toSt2(count%60); count = Math.floor(count/60);
        hours = toSt2(count%24); count = Math.floor(count/24);
        days = count;
        document.all.c1.innerHTML = days + ' TAGE';
        document.all.c2.innerHTML = hours + ':' + minutes + ':' + seconds + '.' + miliseconds;
        setTimeout('countdown()', 50);
      }
    }
    </script>

    <div onload='countdown()'>
      <table style=" background-image:url(bilder/start1.jpg);background-position:center; background-repeat:no-repeat;" width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td align="center" >
            <div>
              <p id=c1></p><br>
              <p id=c2></p><br>
            </div>
          </td>
        </tr>
      </table>
    </div>

    ich will sie später als ***.php über include() in eine andere seite einbinden.
    der ganze html teil ist kein problem, nur das mit dem js hab ich noch nie gemacht. wie gesagt ich will den teil auslagern (in counter.js) und dann später wieder einbinden denn weil es ein zähler ist muss er ja komplett nicht auf server sondern auf client seite ausgeführt werden. so kann jetzt irgendeiner mir helfen, habe nähmlich noch keine sieben jahre erfahrung ;-(
    ciao peter

    1. Hi there,

      <div onload='countdown()'>

      interessant, ob das wohl geht? Onload ist imho nur in den Tags frameset und body erlaubt, aber anyway -

      ich will sie später als ***.php über include() in eine andere seite einbinden.

      Wo liegt der Sinn aus einer js-Datei eine php-Datei zu machen? Du kannst natürlcih den gesamten js-Code mit dem echo-Befehl ausgeben, (damit der Server mehr zu tun hat;) besser wäre es, den js-Code in eine Datei mit der Erweiterung js zu schreiben und dann mit

      <script type="text/javascript" src="NAME_DEINER_JS_DATEI"></script> einzubinden.

      den onload-eventhandler kannst Du ja in der ursprgl. Datei belassen.

      habe nähmlich noch keine sieben jahre erfahrung ;-(

      Darauf kommts nicht an, manche lernens nie, manche etwas schneller...

      1. danke

        habs jetzt.
        und ja - onload funktioniert nur bei body.
        ciao