web-dev-qa-db-fra.com

Accédez à un fichier situé avant / en dehors du répertoire racine du serveur?

Je fais un intranet pour une entreprise à la clientèle post-vente. L'employé doit être en mesure de télécharger des fichiers IMG sur le serveur de l'intranet et je dois les stocker dans un répertoire avec qui est avant www (le répertoire racine du site).

Faire cela en utilisant PHP est assez facile mais comment inclure ces IMG sur le site Web une fois qu'ils sont téléchargés? J'ai essayé ce code

<img src="../img/img.png"/>

Cela ne fonctionne pas car je ne peux pas envoyer de fichier s'il est en dehors du répertoire www du serveur ...

Y a-t-il une bonne façon de faire ça?

Tree actuel:

server root directory
           |www
               |(all server files)
           |img
               |(all img files)

(L'index.php du serveur est situé dans www et les fichiers sont dans img)

11
Weacked

Cela dépend de ce que vous essayez d'accomplir et comment. Avec des commandes HTML "simples", c'est comme vous l'avez découvert. Vous ne pouvez pas aller dans un répertoire en dehors de la racine www. (Pour les applications XAMPP sur C pour EXPLE, c'est la plupart du temps C:\xampp\htdocs).

Si vous acceptez d'utiliser des commandes Serverside pour accomplir ce que vous souhaitez réaliser, vous pouvez utiliser PHP pour effectuer une solution de contournement, en lisant les fichiers appropriés via PHP. Par exemple, si votre fichier est nommé "myimg.gif" et réside dans "C:\Pics"

<img SRC="data:image/gif;base64,<?php echo base64_encode(file_get_contents("c:\pics\myimg.gif"));?>">

Avec cela, vous lisez le contenu du fichier et vous l'écrivez directement dans la balise IMG. Sachez que vous devez changer d'image/gif vers ce que vous avez vraiment besoin là-bas.

7
Thomas

Vous ne pouvez pas accéder directement au fichier à l'extérieur/au-dessus de votre répertoire racine (www ou public_html).

Vous pouvez créer un répertoire virtuel dans la configuration du serveur Apache. Google "Apache Directory Virtual" pour plus d'informations.

Exemple de configuration du répertoire virtuel:

<IfModule alias_module>
  Alias /uploaded_images/ "/home/someuser/somewhere"
  <Directory "/home/someuser/somewhere">
    Allow from all
  </Directory>
</IfModule>

uploaded_images Répertoire sera disponible dans Web comme répertoire normal sur le répertoire www. Vous pouvez copier des fichiers de là vers un autre emplacement (type de tampon).

Vous pouvez également ouvrir/copier ce fichier par FTP du niveau PHP sans rien changer d'Apache, mais cela peut être vraiment lent (utilisez-le uniquement si vous ne pouvez pas contrôler Apache config, le répertoire virtuel est bien meilleur).

php.net: ftp

5
Kamil

Je suis d'accord avec l'idée de @ Kamil sur la création d'un répertoire virtuel. Toutefois, si vous voulez aller à la ligne PHP, j'ai écrit du code qui ouvre les images d'un répertoire avant le www et les copie sur le dossier www/images.

<?php 
$imagepath = "../images/";
define('IMGPATH', realpath($imagepath).DIRECTORY_SEPARATOR);
$cachewwwimg = "images/";
$imagename = 'image.jpg';
copy(IMGPATH.$imagename, $cachewwwimg.$imagename)
?>

<img src="<?php echo $cacheimg.$imagename;?>"/>
1
Jefri P.