problème de synthaxe

Eléphant du PHP | 66 Messages

26 mai 2023, 11:32

Bonjour,

j'ai fait un script pour lire le contenu d'un dossier de photo mais j'ai une erreur dans mon script que je n'arrive pas à corrigé
j'ai crée un classe image puis un fichier de configuration puis un fichier contenu puis index
fichier class image
<?php
class Image {
    //retourne les fichiers présent dans le répertoire $directory
    public fonction 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;
    }
}
fichier configuration
<?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'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/');
//l'URL du répertoire images
define('IMAGE_DIR_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/');
fichier contenu
<?php
require('class/Image.php');
//instantation class Image
$image = new Image();
//récupération tableau des noms de fichier présents dans le répertoire
$images = $image->getImages('IMAGE_DIR_PATH');
?>
<ul>
<?php foreach($images as $image): ?>
    <li><img scr="<?php echo $imageDirectoryURL . $image; ?>"></li>
<?php endforeach; ?>   
</ul>
fichier index
<?php
require('config.php');
require('contenu.php');
j'ai un message d'erreur qui est le suivant

Parse error: syntax error, unexpected identifier "getImages", expecting variable in C:\code\projet_image\class\Image.php on line 4

Eléphant du PHP | 66 Messages

26 mai 2023, 11:33

message parti trop vite : merci d'avance pour votre aide

ynx
Mammouth du PHP | 586 Messages

26 mai 2023, 12:09

Bonjour,

Petite coquille sur la déclaration : public function et non public fonction ;)

Eléphant du PHP | 66 Messages

26 mai 2023, 14:29

bonjour après la correction apporté j'ai toujours des erreurs :cry:

dans mon dossier projet il y a :
un sous dossier images dans lequel se trouve les images
le fichier index.php

voici les messages d'erreurs :
Warning: opendir(IMAGE_DIR_PATH): Le fichier spécifié est introuvab (code: 2) in C:\code\projet_image\index.php on line 15
Call Stack
# Time Memory Function Location
1 0.0002 360088 {main}( ) ...\index.php:0
2 0.0003 360368 Image->getImages( $directory = 'IMAGE_DIR_PATH' ) ...\index.php:37
3 0.0003 360368 opendir( $directory = 'IMAGE_DIR_PATH' ) ...\index.php:15

( ! ) Warning: opendir(IMAGE_DIR_PATH): Failed to open directory: No such file or directory in C:\code\projet_image\index.php on line 15
Call Stack
# Time Memory Function Location
1 0.0002 360088 {main}( ) ...\index.php:0
2 0.0003 360368 Image->getImages( $directory = 'IMAGE_DIR_PATH' ) ...\index.php:37
3 0.0003 360368 opendir( $directory = 'IMAGE_DIR_PATH' ) ...\index.php:15

( ! ) Fatal error: Uncaught TypeError: closedir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in C:\code\projet_image\index.php on line 28
( ! ) TypeError: closedir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in C:\code\projet_image\index.php on line 28
Call Stack
# Time Memory Function Location
1 0.0002 360088 {main}( ) ...\index.php:0
2 0.0003 360368 Image->getImages( $directory = 'IMAGE_DIR_PATH' ) ...\index.php:37
3 0.0021 361672 closedir( $dir_handle = FALSE ) ...\index.php:28


voici mon code :
<?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'] . '/' . WEB_DIR_NAME . '/' . 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;
    }
}

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


Avatar du membre
Mammouth du PHP | 1609 Messages

26 mai 2023, 14:50

Salut, une constante s'utilise sans guillemet sinon c'est une simple chaine de caractère et il n' y a pas de répertoire s'appelant IMAGE_DIR_PATH.
$images = $image->getImages(IMAGE_DIR_PATH);
Développeur web depuis + de 20 ans

Eléphant du PHP | 66 Messages

26 mai 2023, 15:15

merci pour ton retour, j'ai de vrai problème de syntaxe mais bon j'ai commencer PHP il y a 5 mois et de manière pas très régulière car je fait une formation pour devenir DWWM mais c'est avec PHP que j'ai vraiment des problèmes

maintenant plus de message d'erreur mais voici le rendu est inattendu j'ai deux points noirs :
l'un dessous l'autre; donc dans mon dossier images il voit bien les deux images mais n'indique pas leur nom.

voici mon code
<?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;
    }
}

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


Eléphant du PHP | 66 Messages

26 mai 2023, 15:37

pour essayer de comprendre pourquoi j'ai des points noirs j'ai fait à la suite du code dans mon message précédant :
<?php $constants = get_defined_constants(true);
print_r($constants['user']);?> 
voici le résultats

Array (
[WEB_DIR_NAME] => projet_image
[IMAGE_DIR_NAME] => images
[IMAGE_DIR_PATH] => C:/code/projet_image/images/
[IMAGE_DIR_URL] => http://images/projet_image/images/
)

dans la dernière ligne du tableau il y a un problème car le résultat aurai dû être :
[IMAGE_DIR_URL] => http://localhost/projet_image/images/

Eléphant du PHP | 66 Messages

26 mai 2023, 15:44

rectificatif de mon dernier message l'array est bon car j'ai nommé mon localhost images !!! (mauvais choix de ma parts)
par contre cela n'explique pas pourquoi le résultat retour du code c'est deux point noir comme ceux-ci mais en beaucoup plus gros:
.
.

merci d'avance de votre aide

Mammouth du PHP | 2703 Messages

26 mai 2023, 15:53

quel est le code html généré ? les urls des images sont-elles correctes ?

Eléphant du PHP | 66 Messages

26 mai 2023, 16:30

merci de ton aide

voici le code HTML les url
<ul>
<?php foreach($images as $image): ?>
    <li><img scr="<?php echo IMAGE_DIR_URL . $image ?>"></li>
<?php endforeach; ?> 
</ul> 
concernant les url des images, physiquement est sont dans un répertoire suivant :
C:/code/projet_image/images

j'ai crée sous vampserver, un serveur virtuel images
donc le chemin est c:/code/projet_image

est expérant avoir répondu à test questions

Mammouth du PHP | 2703 Messages

26 mai 2023, 16:50

quel est le code html généré ?

Eléphant du PHP | 66 Messages

29 mai 2023, 21:15

Désolé mais je ne comprends pas ta question concernant mon code html.
Voici le code de ma page index.php

si tu peux m'apporter plus d'information je suis preneur
<?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;
    }
}

$image = new Image();
//récupération tableau des noms de fichier présents dans le répertoire
$images = $image->getImages(IMAGE_DIR_PATH);
?>

<ul>
<?php foreach($images as $image): ?>
    <li><img scr="<?php echo IMAGE_DIR_URL . $image ?>"></li>
<?php endforeach; ?> 
</ul> 

Eléphant du PHP | 66 Messages

29 mai 2023, 22:28

j'essai de trouver l'origine de mon problème mais pas évident !!

$directory n'est pas défini dans mon script, ne serait-il pas la mon problème.
Maintenant je test avec wampserver.
j'ai créé un localhost : test
le chemin complet du répertoire est C:/code/projet_image et dans projet_image j'ai un sous répertoire images.

comment dois-je écrire le chemin pour accèder au images :
$directory = ?????????

merci d'avance de votre aide

ynx
Mammouth du PHP | 586 Messages

30 mai 2023, 10:15

Pour voir le code html généré, utilise le raccourci Ctrl+U dans ton navigateur ou fait un clique droit puis "Afficher le code source" dans la page.

$directory est le paramètre de la méthode getImages(), celui-ci est donc défini lors de l'appel de cette fonction.
Fait un echo des constantes IMAGE_DIR_PATH et IMAGE_DIR_URL pour vérifier que celles-ci sont correctes par rapport à ton environnement.

Eléphant du PHP | 66 Messages

30 mai 2023, 21:12

Merci de ton retour voici ce qui s'affiche via le code source de la page :

j'ai fait aussi
<?php $constants = get_defined_constants(true);
print_r($constants['user']);
code source -> tout est ok. Je ne comprend pas pourquoi les photos de s'affiche pas dans la page web


<!DOCTYPE html>
<html lang="en">
<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>

<!--affichage des photos-->
<ul>
    <li><img scr="http://testcours/projet_image/images/image.jpg"></li>
    <li><img scr="http://testcours/projet_image/images/image1.png"></li>
    <li><img scr="http://testcours/projet_image/images/image2.jpg"></li>
    <li><img scr="http://testcours/projet_image/images/image2.png"></li>
 
</ul> 
<!--tableau des constantes-->
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/
)
  

</body>
</html>