此方法仅在 Media Temple (gs) 服务器上进行了测试。
在包含 JavaScript 的文件夹中,.htaccess 文件应包含以下内容:
<FilesMatch "^.*?api.*?$">
SetHandler php5-script
</FilesMatch>
在上面的示例中,任何包含字符串“api”的文件都将被处理为 PHP。您可以随意更改该正则表达式。
然后在 JavaScript 文件本身中,将 ContentType 重新设置为 JavaScript
<?php
// Sets the proper content type for javascript
header("Content-type: application/javascript");
?>
这将确保读取该文件的浏览器将其解释为 JavaScript。现在,您可以在 JavaScript 文件中使用 <php … ?> 标签来执行所需的任何 PHP 操作。
您是否可以将此用于样式表?
是的,您可以将其用于样式表。
代码将是这样的…
不错,您能提供一些解释性的示例说明它是如何工作的吗?
我认为没有看工作示例我无法理解它。
如果我理解正确,一个例子是使用一个名为
myjavascript.api.js
在您的 HTML 中链接到它
<script src=’js/myjavascript.api.js’ type=’text/javascript’></script>
然后,在 myjavascript.api.js 本身中,您现在可以使用 PHP 代码
<?php
// 设置适当的 JavaScript 内容类型
header(“Content-type: application/javascript”);
?>
// JS 代码
function myJavascriptFunction(variable) {
// 使用变量执行操作
}
myJavascriptFunction(<?php echo $variable_from_db; ?>);
您分享的技巧非常有价值,在某些情况下确实需要用到它。但是,在使用它之前,我们必须明确哪种方式更适合我们:性能还是这种在 JS 中获取 PHP 变量的方法。因为当应用此技巧时,JS 文件的加载速度会慢得多,因为它会作为 PHP 文件加载。
无论如何,谢谢。
在其他情况下,它会快得多… 避免回到服务器获取初始化数据,这也会被 PHP 解析。
例如,在单页应用程序中,您可能需要在您的 app.js 文件或需要的地方加载配置文件。
另一方面,您可以将其放在您 index.php 文件中隐藏 div 的 data-attribute 中。
有人知道这是否适用于 J2EE 环境吗?我在 Eclipse 中构建了一个使用 JavaScript(jsp 和 jspf 文件)的 Web 应用程序,我需要在客户端使用 Java 做一些服务器端操作,但无法访问 Java 函数,因此我想尝试使用 PHP 在客户端执行它。只是进行一些文件操作…
谢谢!
Jon
您能将所有最新的更新发布到我的邮箱吗?谢谢。
很棒的技巧,:) 我喜欢它。谢谢。
请解释得更详细一些,因为这还不够理解。
我认为我明白了。您所做的就是在 htaccess 中告诉服务器将任何包含“api”的文件名称的文件都作为 php 处理。这意味着,如果您有一个名为“myscript.api.js”的文件,那么当服务器打开该文件时,它将将其视为 php 文件,甚至声明它是一个 php 文件。但是您不希望服务器告诉客户端它是一个 php 文件,因为他们希望它是一个 JavaScript 文件。因此,您在文件中的第一个操作是使用 php 的“header”函数将内容类型标头重新设置为“text/javascript”。
因此,本质上,您在 htaccess 中告诉服务器:“嘿,这个 JavaScript 文件实际上是一个 php 文件,因为它包含“.api.”在文件名中。”
然后在解析该文件时,您告诉它:“告诉客户端这是一个 JavaScript 文件。”
您也可以尝试反过来,将“myscript.php”作为 JavaScript 文件提供,并使用 header 函数将其内容类型设置为“text/javascript”,但我不确定这是否在所有地方都有效,并且它肯定会导致维护混乱。
我会给您带来我找到此页面的示例。
我有很多网页链接到一个 JavaScript 文件。这些 html 页面上的标记无法像它们引入 JavaScript 文件一样引入 php 页面。但是,必须创建一个管理页面来更改 JavaScript 文件的某些部分。经过一番快速谷歌搜索,我找到了此页面。现在,我可以创建一个 php 管理区域来写入数据库,并在我的 JavaScript 文件中使用我的 php 来读取这些数据库值。
以下是我所做的操作
myfolder/myscript.js 是所有页面链接到的文件。因此,在“myfolder”中,我创建了一个包含 Chris 代码的 htaccess 文件,只是我将“api”更改为“MyWhackyExpression”。
然后,在我的 JavaScript 文件中,我添加了 Chris 所说的文档类型信息,但我向其中添加了“//MyWhackyExpression”。
现在,htaccess 文件将告诉服务器将任何包含“MyWhackyExpression”的文件都作为 php 处理,即使是我的 JavaScript 文件,但浏览器仍然将其视为 JavaScript。我所有的 php 不会渲染到 js 文件中,就像 php 不会渲染到带有 html 的浏览器中一样。
不起作用
你好!
不错的技巧,感谢分享!但是我有一个问题,通常 .js 和 .css 文件会被浏览器缓存。在这种情况下,文件中编写的所有 php 代码都只执行一次,即第一次加载脚本文件时。您有什么想法可以克服这个问题吗?
您可以执行以下操作
请记住,缓存是一件好事。(缓存 = 快 = 好)。
在文件名末尾追加一个随机字符串确实会破坏缓存,因此对于开发来说这可能很好,但对于“实时”网站来说却不是很好。如果您想走这条路,我建议设置一个变量,并在文件名末尾使用该变量,这样您就可以在一个地方进行调整来破坏缓存,但不会每次都破坏缓存。
这是 Iulian 的问题,因此问题已解决:)
请告诉我,如果我的 cpanel 有更高版本的 php,我是否可以更改照片脚本?
嗨!
为什么不将 php 文件包含进去,就好像它是 js 一样
然后
您仍然可以在 js 中运行 php,您不需要使用 htaccess,并且不会影响性能。
谢谢!
这样可以,但我建议谨慎使用“不会影响性能”。您要求服务器在每次请求该文件时都处理它,而不是仅仅将其提供。您可能这样做没问题,但我怀疑这不是常见的做法,原因就在这里。
Annnnnd。现在我意识到这则评论所在的片段就是专门针对这种做法。所以没错,您完全可以按照您描述的那样做。
嗨,Chris!
这里,
您也要求服务器在每次请求 php/js 文件时都进行处理… 我没有看到与 htaccess 技巧有什么区别…
你好,
这不算什么大问题。我只是想更好地了解在 CSS 和 JS 中使用 PHP 的整体概念。个人而言,我不会使用这种方法,因为它会导致性能问题,这一点已被证实,但这确实是一个很酷的技巧,可以备用。:)
如果我要使用这种 hack,安全性如何?
今天捣鼓的时候,我发现这个方法有效,但只在 Chrome 浏览器中有效。
为了实现这个路线,我们将此代码添加到一个可访问的类中。
不需要重写、掩盖、文件或模板引擎。