problème de synthaxe

ynx
Mammouth du PHP | 586 Messages

06 juin 2023, 13:20

Tu indiques que ton fichier index.php se trouve dans le dossier c:\code\projet_image
et pour accéder à ce fichier dans le navigateur tu saisis l'url http://testcours/index.php (ou http://testcours/ qui est équivalent).

Tes images sont dans le dossier c:\code\projet_image\images
donc pour accéder à une image dans le navigateur, l'url devrait être http://testcours/images/une-image.jpg

Commence par vérifier que tes images sont bien accessibles depuis ton navigateur.
Est-ce que l'url http://testcours/images/une-image.jpg fonctionne dans ton navigateur (avec un vrai nom d'image à la place de une-image.jpg) ?
Dans le cas contraire, quelle url dois-tu saisir dans le navigateur pour afficher une image ?

Eléphant du PHP | 66 Messages

06 juin 2023, 21:27

j'ai tapé l'URL dans le navigateur et voici le message d'erreur qui apparait sur la page :

Not Found
The requested URL was not found on this server.

Apache/2.4.54 (Win64) PHP/8.0.26 mod_fcgid/2.3.10-dev Server at testcours Port 80

Eléphant du PHP | 66 Messages

06 juin 2023, 21:37

petit rectificatif si je tape l'url http://testcours/images/une-image.jpg fonctionne bien mais si je fais : http://testcours/projet_images/images/une-image.jpg cela ne fonctionne pas. Pourquoi il ne faut pas mettre le chemin complet pour accéder au répertoire images?

conclusion j'ai bien une erreur dans mon code?

Eléphant du PHP | 66 Messages

06 juin 2023, 22:22

donc pour moi mon erreur est sur la première partie de mon code sur les constantes define !!
<?php
//nom du dossier principal
define('WEB_DIR_NAME', 'projet_image');
//nom du dossier contenant les images et qui est donc le sous-dossier du répertoire principal
define('IMAGE_DIR_NAME', 'images');
//le chemin (path) complet du répertoire images
define('IMAGE_DIR_PATH', $_SERVER['DOCUMENT_ROOT'] . '/' . IMAGE_DIR_NAME . '/');
//l'URL du répertoire images
define('IMAGE_DIR_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/');

class Image {
    //retourne les fichiers présent dans le répertoire $directory
    public function getImages($directory){
        //ouverture du répertoire
        if ($handel = opendir($directory)){
            //création d'un tableau vide $images pour récupérer les fichiers
            $images = [];
            //pour chaque entrée dans le répertoire
            while(false !==($entry = readdir($handel))){
                //vérification qu'il s'agit d'un fichier
                if ($entry != '.' AND $entry != '..'){
                    //ajout du nom du fichier au tableau $images
                    $images [] = $entry;
                }
            }            
        }
        //fermeture du répertoire
        closedir($handel);
        //retour tableau des fichiers du répertoire $directory
        return $images;
    }
}
?>

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

<?php
$image = new Image();
//récupération tableau des noms de fichier présents dans le répertoire
$images = $image->getImages(IMAGE_DIR_PATH);
?>
<!--affichage des photos-->
<ul>
<?php foreach($images as $image): ?>
    <li><img scr="<?php echo IMAGE_DIR_URL . $image; ?>"></li>
<?php endforeach; ?> 
</ul> 


</body>
</html>

Mammouth du PHP | 2703 Messages

06 juin 2023, 23:29

voir la configuration d'apache pour voir où mène http://testcours/
c'est ensuite pour rapport à ce répertoire qu'il faut construire le chemin.

et
<li><img scr="<?php echo "images/" . $image; ?>"></li>

va fonctionner aussi, et à l'avantage de ne pas nécessiter de changement le jour où le site passe en https

quelque chose à tester pour bien comprendre, c'est de changer la configuration d'apache pour pointer vers c:\code

Eléphant du PHP | 66 Messages

07 juin 2023, 20:51

voici la configuration de serveur virtuel testcours

#
<VirtualHost *:80>
ServerName testcours
DocumentRoot "c:/code/projet_image"
<Directory "c:/code/projet_image/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>
#

Eléphant du PHP | 66 Messages

07 juin 2023, 21:27

pour moi les chemins sont bons

quand je fais :
<!--tableau des constantes-->
<?php $constants = get_defined_constants(true);
print_r($constants['user']);
?>
le résultat est le suivant :
Array ( [WEB_DIR_NAME] => projet_image [IMAGE_DIR_NAME] => images [IMAGE_DIR_PATH] => C:/code/projet_image/images/ [IMAGE_DIR_URL] => http://testcours/projet_image/images/ )

Eléphant du PHP | 66 Messages

07 juin 2023, 21:43

pourquoi
http://testcours/projet_image/images/bg.jpg ne fonction pas

et que

http://tescours/images/bg.jpg fonction

pourquoi il ne faut pas le chemin complet ?
j'ai modifié mon code pour avoir l'url qui fonction et ça ne fonctionne toujours pas??
<?php echo IMAGE_DIR_URL.$image; ?>
résultat :
http://testcours/images/bg.JPG donc cela devrait fonctionné et ça ne fonctionne pas??

ynx
Mammouth du PHP | 586 Messages

08 juin 2023, 12:38

Il ne faut pas confondre le chemin sur le système de fichier et l'URL via Apache.

Dans la configuration de ton virtual host apache, le DocumentRoot est défini sur le dossier c:\code\projet_image donc la racine de ton site web pointe sur ce dossier.
Autrement dit, lorsque le visiteur charge l'URL http://testcours/images/bg.jpg Apache va chercher le fichier c:\code\projet_image\images\bg.jpg
Ceci dépend de la configuration de ton vhost.
https://httpd.apache.org/docs/2.4/fr/urlmapping.html

Tu indiques que l'URL http://tescours/images/bg.jpg fonctionne mais que l'URL http://tescours/images/bg.JPG ne fonctionne pas.
Je ne comprends pas pourquoi l'extension JPG est en majuscule avec ton code PHP, le fichier est image.jpg ou image.JPG (utilise si possible des minuscules partout pour éviter les ambiguïtés) ?