我正在尝试使用zend框架在jmtl视图脚本文件中包含javascript文件。 javascript文件和phtml文件都是php库的一部分,位于我项目的doc根文件夹之外。所以文件结构看起来像
/var/www/vhosts/project/
/var/www/vhosts/libraries/my-lib/view/viewscript.phtml
/var/www/vhosts/libraries/my-lib/js/javascript.js
已使用set_include_path将/ var / www / vhosts / libraries / my-lib添加到PHP路径中。在viewscript.phtml中,我使用以下行来包含javascript.js。
<?php $this->headScript()->appendFile('js/javascript.js'); ?>
由于某种原因,即使我指定绝对路径而不是相对路径,也不包括javascript.js。相反,我在head部分的标签内获得了我的网页的完整副本。如果我将javascript.js放入doc根文件夹/ var / www / vhosts / project并更改appendFile()路径,它就可以正常工作。如何在doc root之外加入javascript?
答案 0 :(得分:2)
appendFile()
中提供的路径是相对于网站的文档根目录(例如,您的“公共”文件夹)。它不会接受php include_path。
您可以将js文件移动到doc根目录中,在doc根目录中创建一个符号链接,或者您可以使用php读取该文件并将其内容输出为<script>
标记。
答案 1 :(得分:2)
基于之前的问题,您一直在问我认为您的目录对您来说是个问题。 这是Zend Framework(部分)的功能和安全示例或目录组织
var/
www/
vhosts/
otherproject/
project/
src/ <-- maybe some project src can be here and not in your libraries
htdocs/ <--- real apache document root
css/
js/
var/
log/
sessions/
etc/
doc/
libraries/
Zend/
my-lib/
js/
所以apache documentRoot
是 / var / www / project / htdocs 。在这里,我们可以找到index.php文件,这是唯一可用于公共访问的php文件。
在htdocs / js&amp; htdocs / css你可以把你的一些项目js&amp; css文件。然后你就会遇到外部php库的css和js文件的问题,这些文件现在完全不在web根目录下。
我通常所做的就像其他人在这里所说的那样,链接从外部目录到web根目录中的js目录。但是为了更加精确,并在这里保持井井有条,你应该在那里做什么:
ln -s /var/www/project/libraries/my-lib/js /var/www/project/htdocs/js/my-lib
ln -s /var/www/project/libraries/my-lib/css /var/www/project/htdocs/css/my-lib
您应该为所有具有应该位于文档根目录中的文件的外部lib执行此操作。 这样,my-lib的js文件的基本URL是/ js / my-lib /.
不要害怕使用符号链接(Windows上的联结),甚至可以将它们存储在subversion存储库中。只需检查您的apache配置是否允许符号链接(Options + FollowSymlinks)
答案 2 :(得分:1)
将添加到页面的标记是浏览器在哪里查找JavaScript文件的参考。
JavaScript是一种客户端语言,它在用户计算机上运行并在那里进行解释,因此用户需要能够访问该文件,因此它需要位于根路径内,因为用户(客户端)不应该可以访问您的应用程序目录。
您可以在您的doc根目录中保存一个PHP文件并使用它来获取您的JS:
getJS.php (保存在doc根目录中):
<?php
header("Content-type: text/javascript");
include_once '/../var/www/vhosts/libraries/my-lib/js/someJSfile.js';
?>
然后在你的代码中:
<?php
$this->headScript()->appendFile('getJS.php');
?>
你可以包含开关以包含不同的JS文件或任何你想要的东西,我没有测试它的功能,但点击时的文件确实获得了JS文件的内容。
注意:如果这是出于安全原因,获取用户想要的文件内容不会花费太多!
答案 3 :(得分:1)
形成你的道路,我可以告诉你正在使用linux
所以你可以像这样使用symlink
:
ln -s /var/www/vhosts/libraries/my-lib/ /var/www/vhosts/project/mylib/
因此你可以附加文件:
<?php $this->headScript()->appendFile('/mylib/js/javascript.js'); ?>
和田田,完成了