Php 使用zend framework在doc root之外包含javascript文件

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

我正在尝试使用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/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