Php 使用zend framework在doc root之外包含javascript文件
我正在尝试使用zend框架在phmtl视图脚本文件中包含一个javascript文件。javascript文件和phtml文件都是php库的一部分,位于我的项目的doc根文件夹之外。所以文件结构看起来像Php 使用zend framework在doc root之外包含javascript文件,php,javascript,zend-framework,Php,Javascript,Zend Framework,我正在尝试使用zend框架在phmtl视图脚本文件中包含一个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 /var/www/vhosts/l
/var/www/vhosts/project/
/var/www/vhosts/libraries/my-lib/view/viewscript.phtml
/var/www/vhosts/libraries/my-lib/js/javascript.js
/var/www/vhosts/libraries/my lib已使用set_include_path添加到PHP路径中。在viewscript.phtml中,我使用以下行包含javascript.js
<?php $this->headScript()->appendFile('js/javascript.js'); ?>
出于某种原因,javascript.js不包括在内,即使我指定了绝对路径而不是相对路径。取而代之的是,我在标题部分的标签中得到了我的网页的一整份副本。如果我将javascript.js放入doc root文件夹/var/www/vhosts/project并更改appendFile()路径,它就可以正常工作。如何在文档根目录之外包含javascript?在
appendFile()
中提供的路径相对于站点的文档根目录(例如,您的“公共”文件夹)。它不会在php include_路径上拾取
您可以将js文件移动到文档根目录中,在文档根目录中创建指向它的符号链接,也可以使用php读取文件并将其内容输出为
标记。将添加到页面的标记是浏览器查找JavaScript文件的参考
JavaScript是一种客户端语言,它在用户计算机上运行并在那里进行解释,因此用户需要能够访问该文件,因此它需要位于根路径内,因为用户(客户端)不应该访问您的应用程序目录
您可以在文档根目录中保存一个PHP文件,并使用该文件获取JS:
getJS.php(保存在文档根目录中):
然后在代码中:
<?php
$this->headScript()->appendFile('getJS.php');
?>
您可以包含开关以包含不同的JS文件或任何您想要的内容,我还没有对其功能进行测试,但单击该文件时确实会获得JS文件的内容
注意:如果这是出于安全原因,那么获取用户想要的文件内容不需要太多 从你的路径上,我可以看出你正在使用linux 因此,您可以像这样使用
symlink
:
ln-s/var/www/vhosts/libraries/my lib//var/www/vhosts/project/mylib/
因此,您可以附加以下文件:
<?php $this->headScript()->appendFile('/mylib/js/javascript.js'); ?>
而tada,已经完成了基于您之前提出的问题,我认为您的目录对您来说有些问题。 下面是Zend Framework的功能和安全示例或目录组织(部分) 您应该为所有具有文件的外部库执行此操作,这些文件应该位于文档根目录中。 这样,my lib的js文件的基本url是/js/my lib/
不要害怕使用符号链接(windows上的连接),您甚至可以将它们存储在subversion存储库中。只需检查您的apache配置是否允许符号链接(选项+FollowSymlinks)您不能。浏览器需要文档根目录中的某些内容才能访问。您可以创建一个通过脚本的PHP文件,如果您可以访问服务器的配置,也可以使用
Alias
,感谢您的澄清。不过,我尽量避免使用符号链接,因为我在Windows7上使用Xampp开发项目。我将查看我的服务器配置,看看是否可以使用上面建议的别名。编写类似appendExternalFile()的内容如何?appendFile()仅使用指定的路径输出标记。Web服务器不会提供文档根目录以外的文件。
<?php $this->headScript()->appendFile('/mylib/js/javascript.js'); ?>
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/
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