2010-11-15 24 views
1

J'ai une configuration localhost Apache/PHP sur mon ordinateur. Je veux être en mesure deUtilisation d'un domaine Web ou d'une URL de chemin d'accès système pour accéder à un fichier en PHP

1) vérifier l'existence d'un fichier image en utilisant un chemin absolu et

2) l'afficher en utilisant la même URL

Un exemple simple de quelque chose que je veux faire:

if(file_exists($url)) { 
    echo '<img src="' . $url . '" />'; 
} 

si je mets ...

$url = 'http://' . $_SERVER['HTTP_HOST'] . '/myimg.jpg'; 

alors file_exists sera return false, car l'URL est un chemin Web (http: //localhost/myimg.jpg).


si je mets ...

$url = $_SERVER['DOCUMENT_ROOT'] . '/myimg.jpg'; 

il reconnaîtra que le fichier existe (C: /htdocs/myimg.jpg), mais ne parviennent pas à afficher l'image, car il ne peut pas accéder à l'image la source. Si je regarde la source et copiez/collez l'URL dans la barre d'adresse du navigateur Web, l'image s'affiche très bien.


Peut-être que je manque quelque chose dans le fichier httpd.conf ou php.ini? Peut-être une déclaration d'Alias ​​de quelque sorte. De plus, le site sera téléchargé sur un serveur web distant (tel que bluehost.com) quand il sera complet, j'ai donc besoin d'une solution polyvalente.

allow_url_fopen dans PHP.ini est activé, et j'ai redémarré le serveur chaque fois que je fais une modification dans httpd.conf ou PHP.ini. J'ai lutté avec cela pendant des jours, donc même un point dans la bonne direction serait très apprécié :)

Merci.

Répondre

1

Vous confondez l'accès au fichier côté serveur avec le côté client. Cela produit un URI à utiliser par le client pour récupérer votre image via HTTP. Par exemple http://example.com/myimg.jpg


$url = $_SERVER['DOCUMENT_ROOT'] . '/myimg.jpg'; 

Cela produit un chemin de système de fichiers pour être utilisé par PHP.Par exemple /var/www/htdocs/myimg.jpg


Votre solution doit utiliser à la fois

$img = '/myimg.jpg'; 

if(file_exists($_SERVER['DOCUMENT_ROOT'] . $img)) { 
    echo '<img src="', $_SERVER['HTTP_HOST'], $img, '" />'; 
} 

Edit: Vous pouvez remplacer probablement la ligne echo avec

echo '<img src="', $img, '" />'; 

comme une URL absolue (un en commençant par une avant barre oblique) commence toujours à la racine du document

0
<?php 
$url = "/myimg.jpg"; 
if(file_exists($_SERVER['DOCUMENT_ROOT'].$url)) 
    echo "<img src='".$url."' />"; 
?> 

Cela vous donnera le code HTML:

<img src='/myimg.jpg' /> 

Quelle est l'image car elle résout du nom de domaine.

+0

Pour votre information, l'opérateur de concaténation PHP est '.' – Phil

+0

Oups ... Je devrais aller au lit> _> –

0

Un chemin absolu, qui prend file_exists, est complètement différent de votre chemin Web. Vous aurez juste besoin d'utiliser des chemins séparés pour file_exists et votre attribut src dans votre tag img.

$img = 'myimg.jpg'; 
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/' . $img) { 
    echo '<img src=' . $img . ' />'; 
} 
+0

Vous assumez ici que le fichier image est dans le même endroit que l'URI courant peut ne pas être le cas. L'OP indique que l'image se trouve dans la racine du document. – Phil

+0

Merci d'avoir souligné cela, mais le but était d'illustrer que l'OP ne pouvait pas utiliser le même chemin pour les deux buts. – Calvin