Y compris un fichier javascript hors de la racine du dossier en utilisant zend framework

J'essaie d'inclure un fichier javascript dans un fichier de script de vue phmtl à l'aide du framework zend. Le fichier javascript et le fichier phtml font partie d'une bibliothèque php et se trouvent en dehors du dossier racine de doc de mon projet. Ainsi, la structure du fichier ressemble

/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 / bibliothèques / my-lib a été ajouté aux chemins PHP en utilisant set_include_path. Dans viewscript.phtml, j'utilise la ligne suivante pour inclure javascript.js.

 <?php $this->headScript()->appendFile('js/javascript.js'); ?> 

Pour une raison quelconque, javascript.js n'est pas inclus, même si je spécifie le chemin absolu au lieu d'un chemin relatif. Au lieu de cela, je reçois une copie complète de ma page Web dans une étiquette dans la section tête. Si je place javascript.js dans le dossier racine doc / var / www / vhosts / project et change le chemin appendFile (), cela fonctionne très bien. Comment puis-je inclure javascript en dehors de la racine de la documentation?

Sur la base des questions précédentes que vous avez posées, je pense que vos répertoires sont quelque chose de problématique pour vous. Voici un exemple fonctionnel et sécurisé ou une organisation de répertoire pour Zend Framework (partielle)

 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/ 

Donc, apache documentRoot est / var / www / project / htdocs . Ici, nous pouvons trouver le fichier index.php, le seul fichier php disponible sur l'accès public.

Dans htdocs / js & htdocs / css, vous pouvez mettre certains de vos fichiers js & css de projet. Et puis vous avez le problème des fichiers css et js de vos bibliothèques php externes qui sont maintenant complètement en dehors de la racine Web.

Ce que je fais habituellement, c'est que, comme d'autres l'ont dit, les liens entre les répertoires externes et le répertoire js dans la racine Web. Mais pour être plus précis et garder les choses bien organisées ici, ce que vous devriez faire là-bas:

  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 

Et vous devriez le faire pour toute libération externe ayant des fichiers qui devraient être dans la racine du document. De cette façon, l'URL de base pour les fichiers js de my-lib est / js / my-lib /.

Ne craignez pas d'utiliser des liens symboliques (jonctions sur Windows), vous pouvez même les stocker dans un dépôt de subversion. Vérifiez simplement que votre configuration apache permet des liens symboliques (Options + FollowSymlinks)

Le chemin fourni dans appendFile() est relatif à la racine du document du site (par exemple, votre dossier public). Il ne reprendra pas le php include_path.

Vous pouvez déplacer le fichier js dans la racine de la doc, créer un lien symbolique dans la racine de la doc, ou vous pouvez lire le fichier en utilisant php et afficher ses contenus en tant que <script> .

Formez votre chemin, je peux dire que vous utilisez linux afin que vous puissiez utiliser le symlink comme ceci:

ln -s /var/www/vhosts/libraries/my-lib/ /var/www/vhosts/project/mylib/

Pour cela, vous pouvez ajouter les fichiers:

 <?php $this->headScript()->appendFile('/mylib/js/javascript.js'); ?> 

Et tada, c'est fait

La balise qui sera ajoutée à la page est une référence pour le navigateur où rechercher le fichier JavaScript.

JavaScript est une langue côté client, il s'exécute sur l'ordinateur des utilisateurs et est interprété là-bas, de sorte que l'utilisateur doit pouvoir accéder au fichier, donc il doit être dans le chemin d'accès racine car l'utilisateur (client) ne devrait pas avoir accès à Le répertoire de votre application.

Vous pouvez enregistrer un fichier PHP dans la racine de votre doc et l'utiliser pour obtenir votre JS:

GetJS.php (enregistré dans la racine de la documentation) :

 <?php header("Content-type: text/javascript"); include_once '/../var/www/vhosts/libraries/my-lib/js/someJSfile.js'; ?> 

Ensuite, dans votre code:

 <?php $this->headScript()->appendFile('getJS.php'); ?> 

Vous pourriez inclure des commutateurs pour inclure différents fichiers JS ou tout ce que vous vouliez, je n'ai pas testé ceci pour la fonctionnalité, mais le fichier en cliquant ne contient pas le contenu du fichier JS.

Remarque: Si cela est pour des raisons de sécurité, il ne faudra pas beaucoup pour obtenir le contenu du fichier que l'utilisateur souhaite!