Dies wurde bisher nur auf Media Temple (gs) Servern getestet.
Im Ordner mit dem JavaScript sollte die .htaccess-Datei Folgendes enthalten:
<FilesMatch "^.*?api.*?$">
SetHandler php5-script
</FilesMatch>
Im obigen Beispiel wird jede Datei, die den String "api" enthält, als PHP verarbeitet. Sie können diesen RegEx gerne ändern.
Stellen Sie dann in der JavaScript-Datei selbst den ContentType wieder auf JavaScript zurück.
<?php
// Sets the proper content type for javascript
header("Content-type: application/javascript");
?>
Dies stellt sicher, dass Browser, die die Datei lesen, sie als JavaScript interpretieren. Nun können Sie <php ... ?>-Tags in der JavaScript-Datei verwenden, um beliebige PHP-Funktionen auszuführen, die Sie benötigen.
Könnte man das auch für Stylesheets verwenden?
Ja, Sie können das für Stylesheets verwenden.
Der Code würde so aussehen...
Gute Sache, können Sie ein erklärendes Beispiel geben, wie das alles funktioniert?
Ich glaube nicht, dass ich das ohne ein funktionierendes Beispiel verstehen kann.
Wenn ich es richtig verstanden habe, wäre ein Beispiel eine Datei namens
myjavascript.api.js
Verlinken Sie sie in Ihrer HTML.
<script src=’js/myjavascript.api.js’ type=’text/javascript’></script>
Dann können Sie in der myjavascript.api.js-Datei nun PHP-Code verwenden.
<?php
// Setzt den korrekten Inhaltstyp für JavaScript
header(“Content-type: application/javascript”);
?>
// JS Code
function myJavascriptFunction(variable) {
// Machen Sie etwas mit der Variable
}
myJavascriptFunction(<?php echo $variable_from_db; ?>);
Das ist eine sehr wertvolle Sache, die Sie als Trick geteilt haben, und in einigen Fällen wird sie wirklich benötigt. Bevor wir sie jedoch verwenden, müssen wir klären, was uns wichtiger ist: Leistung oder diese Methode, PHP-Variablen in JS zu erhalten. Denn wenn dieser Trick angewendet wird, wird die JS-Datei viel langsamer geladen, da sie als PHP-Datei geladen wird.
Danke trotzdem.
In einigen anderen Fällen wäre es viel schneller... Vermeidung einer Rückreise zum Server, um Initialisierungsdaten abzurufen, die ebenfalls PHP-geparst würden.
Im Fall einer Single-Page-Anwendung zum Beispiel, wo Sie möglicherweise eine Konfigurationsdatei benötigen, die in Ihre app.js-Datei oder deren Abhängigkeiten geladen wird.
Auf der anderen Seite können Sie es in einem data-Attribut eines versteckten Divs in Ihrer index.php-Datei platzieren.
Weiß jemand, ob das in einer J2EE-Umgebung funktionieren würde? Ich habe eine Webanwendung, die in Eclipse mit JavaScript (jsp und jspf-Dateien) erstellt wurde, bei der ich serverseitige Dinge mit Java am Client durchführen muss und nicht auf die Java-Funktionen zugreifen kann. Deshalb wollte ich versuchen, PHP zu verwenden, um dies auf der Clientseite zu tun. Nur ein wenig Dateimanipulation...
Danke!
Jon
Kannst du mir alle neuesten Updates per E-Mail schicken? Danke.
Großartiger Trick, :) Ich liebe ihn. Danke.
Bitte erklären Sie mehr, denn das reicht nicht zum Verstehen.
Ich glaube, ich verstehe es. Was Sie tun, ist, dem Server in .htaccess mitzuteilen, dass jede Datei mit "api" im Namen als PHP verarbeitet werden soll. Das bedeutet, wenn Sie eine Datei "myscript.api.js" hätten, würde der Server die Datei beim Öffnen als PHP-Datei behandeln und sogar sagen, dass es eine PHP-Datei ist. Sie möchten jedoch nicht, dass Ihr Server den Clients mitteilt, dass es sich um eine PHP-Datei handelt, da diese eine JavaScript-Datei erwarten. Daher ist das Erste, was Sie in der Datei tun, die "header"-Funktion von PHP zu verwenden, um den Content-Type-Header wieder auf "text/javascript" zu setzen.
Im Wesentlichen sagen Sie also in .htaccess dem Server: "Hey, diese JavaScript-Datei ist eigentlich eine PHP-Datei, weil sie '.api.' im Namen hat."
Dann, während er die Datei analysiert, sagen Sie ihm: "Sag dem Client, dass dies eine JavaScript-Datei ist."
Sie können auch den umgekehrten Weg versuchen, "myscript.php" als JavaScript-Datei auszuliefern und die Header-Funktion zu verwenden, um ihren Inhaltstyp auf "text/javascript" zu setzen, aber ich bin mir nicht sicher, ob das überall funktioniert, und es kann definitiv die Wartung erschweren.
Ich gebe Ihnen das Beispiel, das mich auf diese Seite gebracht hat.
Ich habe eine ganze Reihe von Webseiten, die auf eine JavaScript-Datei verlinken. Das Markup auf diesen HTML-Seiten kann keine PHP-Seite so einbinden, wie sie meine JavaScript-Datei einbinden. Es wurde jedoch notwendig, dass ich eine Admin-Seite erstelle, die bestimmte Teile der JavaScript-Datei ändert. Nach einer schnellen Google-Suche habe ich diese Seite gefunden. Jetzt kann ich einen PHP-Adminbereich erstellen, um in eine Datenbank zu schreiben und mein PHP *in* meiner JavaScript-Datei zu verwenden, um diese Datenbankwerte zu lesen.
Hier ist, wie ich es gemacht habe
myfolder/myscript.js ist das, worauf alle Seiten verlinken. Also habe ich in 'myfolder' eine .htaccess-Datei erstellt, die Chris' Code enthält, nur dass ich 'api' durch 'MyWhackyExpression' ersetzt habe.
Dann habe ich in meiner JavaScript-Datei die Doctype-Informationen so eingefügt, wie Chris es sagt, aber ich habe '//MyWhackyExpression' hinzugefügt.
Nun wird die .htaccess-Datei den Server anweisen, jede Datei, die 'MyWhackyExpression' enthält, als PHP zu verarbeiten, selbst meine JavaScript-Datei, aber Browser sehen sie immer noch als JavaScript. Mein gesamtes PHP wird nicht in die JS-Datei gerendert, genauso wenig wie PHP im HTML-Format an den Browser gerendert wird.
nicht funktioniert
Hallo!
Schöner Trick und danke fürs Teilen! Ich habe jedoch eine Frage: Normalerweise werden .js- und .css-Dateien von den Browsern zwischengespeichert. In diesem Fall wird der gesamte PHP-Code, der in der Datei geschrieben ist, nur einmal ausgeführt, wenn die Skriptdatei zum ersten Mal geladen wird. Irgendwelche Ideen, wie man dieses Problem überwinden kann?
Sie können so etwas tun
Denken Sie daran, dass Caching eine gute Sache ist. (Caching = schnell = gut).
Das Anhängen einer zufälligen Zeichenfolge an Dateinamen bricht das Caching, daher ist das für die Entwicklung gut, aber für "Live"-Websites nicht so sehr. Wenn Sie diesen Weg gehen möchten, schlage ich vor, eine Variable festzulegen und diese Variable am Ende Ihrer Dateinamen zu verwenden, damit Sie sie an einer Stelle anpassen können, um den Cache zu brechen, aber nicht jedes Mal den Cache zu brechen.
Es war ein Problem für Iulian, also: Problem gelöst :)
Bitte, ich möchte wissen, ob ich das Fotoskript ändern kann, wenn mein cPanel eine höhere PHP-Version hat.
Hallo!
Warum nicht eine PHP-Datei einbinden, als wäre sie JS?
und dann
Sie können immer noch PHP innerhalb von JS ausführen, Sie müssen sich nicht mit .htaccess herumschlagen und Sie beeinträchtigen nicht die Leistung.
Danke!
Das würde funktionieren, aber ich wäre vorsichtig zu sagen "Sie beeinträchtigen nicht die Leistung". Sie bitten Ihren Server, diese Datei jedes Mal zu verarbeiten, wenn sie angefordert wird, anstatt sie einfach bereitzustellen. Es mag Ihnen so gehen, aber ich vermute, dass es aus diesem Grund keine gängige Praxis ist.
Und. Jetzt erkenne ich, dass der Schnipsel, auf dem dieser Kommentar gepostet wird, sich genau darum dreht. Also ja, guter Punkt, Sie können es genau so machen, wie Sie es beschrieben haben.
Hey Chris!
hier,
auch hier bitten Sie den Server, die PHP/JS-Datei jedes Mal zu verarbeiten, wenn sie angefordert wird... Ich sehe keinen Unterschied zum .htaccess-Trick...
Hallo,
Es war kein wirkliches Problem. Ich wollte einfach nur ein besseres Bild vom gesamten Konzept der Verwendung von PHP in CSS und JS bekommen. Persönlich würde ich das nicht verwenden, da es ein Leistungsproblem ist, wie es sich gezeigt hat, aber es ist ein cooler Trick, den man auf Lager haben kann. :)
Was ist mit der Sicherheit, wenn ich solche Hacks verwende?
Beim Herumspielen heute habe ich festgestellt, dass dies funktioniert, aber nur in Chrome.
Um diesen Weg zu gehen, fügen wir dies zu einer zugänglichen Klasse hinzu.
Keine Rewrites, Maskierungen, Dateien oder Template-Engines erforderlich.