IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

appel trivial d'une fonction php


Sujet :

Langage PHP

  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut appel trivial d'une fonction php
    Bonjour,
    C'est tout simple, je cherche à appeler un fichier php afin de l'exécuter à partir d'html, sans avoir à clicker sur un lien ou un bouton, c'est à dire qu'il doit être exécuté systématiquement. Pour tester mon fichier php, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <A href="init_site.php">test php</A>
    maintenant que c'est testé, je ne veux pas avoir à clicker sur un lien.
    Je n'ai pas trouvé dans les guidelines ce cas d'école.
    merci

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Dans un cas HTTP il faut forcement une requête de l'utilisateur pour exécuter quoi que ce soit. Donc ta demande est pas très claire...

    Est-ce le fait d'afficher ta page courante qui doit exécuter le script (en plus de ce qu'elle fait actuellement) ?
    Auquel cas tu peux utiliser la fonction PHP include() permettant littéralement de faire un copier/coller du fichier lors de l'exécution dans ton fichier actuel.

    Est-ce plutôt un fichier qui doit être exécuté tous les X heures ? Dans ce cas il faut configurer le serveur avec des tâches Cron (ou tâches planifiés sous windows) pour exécuter le script automatiquement.

  3. #3
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Je veux exécuter un traitement écrit en php à chaque fois que la page d'acceuil est appelé. Je suis d'accord que c'est pas top, (je vais sans doute faire autrement d'ailleurs), cependant, dans le cas présent comment faire. Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    include ('init_site.php');
    ?>
    dans le code html, le php ne semble pas exécuté (par rapport à ce qu'il fait lorsqu'il est sollicité via le lien dans mon pg de test.
    Merci

  4. #4
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Renomme ta page d'accueil en .php
    Cela ne cassera pas le point d'entrée de ton site.
    Un serveur cherche d'abord index.html puis s'il ne le trouve pas il regarde index.php dans les configurations les plus courantes.

  5. #5
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    changer index.htm en index.php n'a rien changé, par contre si j'invoque le fichier php en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="init_site.php" />
    cela marche. C'est bizarre, en passant par href, c'était pas bon.
    Je sais pas si c'est bien orthodoxe mais ça fonctionne !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    la question qu'on se pose : "que peut-il bien y avoir dans ce fichier init_site.php pour qu'il ait besoin d'une balise <img> pour fonctionner ???"

  7. #7
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    ce programme init_site_php crée des miniatures d'images qu'il stocke à l'endroit des dites images. Aucune raison d"avoir une balise img sans doute, je suis demandeur de la façon d'appeler autrement le pg php à partir de mon fichier index.html.
    Merci

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 421
    Par défaut
    Ben si c'est pour faire afficher avec php des images dans du code html ta syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="init_site.php" />
    est la bonne

    C'est pas optimisé dans le sens où tu te sert du serveur php à chaque fois pour faire afficher tes miniatures, mais le code est correct. Une meilleure solution serait (si possible) de faire les redimensions une fois pour toute mais bon c'est à voir suivant les contraintes de ton script. En résumé, disons que cette technique est fonctionnelle mais qu'il ne faut pas en abuser.

    Et pour la petite histoire c'est un moyen très employé - ou qui l'a été - pour vérifier qu'un mail est bien parvenu à son destinataire puisque pour s'afficher l'image va appeler un script php qui entre temps pourra enregistrer quelques données. C'est aussi pour cette même raison que la plupart des lecteurs de messagerie bloquent ce type d'image.

  9. #9
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Je ne sais pas si on s'est compris : mon script php ne fait pas d'affichage, il se contente de créé les miniatures (il créé les fichiers miniatures). Il le fait si les miniatures n'existe pas déjà bien sûr.
    Ceci dit, c'est une autre procédure php qui fait l'affichage, là aussi la phrase peut être ambigu, le php génére du code html qui sera exécutée coté client, enfin ... je pense. ci-dessous une partie du code affic_mini.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	// si on a au moins une miniature, on les affiche toutes
    	if ($nbpics != 0) {
    		echo '<table>';
    		for ($i=0; $i<$nbpics; $i++){
    			if($i%$nbcol==0) echo '<tr>';
    			// pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle
    			echo '<td><a href="',$tableau[$i],'"><img src="',$tableaumin[$i] , '" alt="Image" /></a></td>';
    			if($i%$nbcol==($nbcol-1)) echo '</tr>';
    		}
    		echo '</table>';
    	}
    Merci

  10. #10
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Dans ce cas un include() est plus approprié et la balise img est une hérésie.
    D'autant plus qu'avec la balise img le fichier de génération des miniatures est appelé après le chargement de ta page index...

  11. #11
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Je serais d'accord avec toi si ça marchait avec l'include (on en revient à ma question du tout début). Si je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    </head>
    <body>
    <img src="init_site.php" />
    ...
    par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    <?php
    include "init_site.php";
    ?>
    </head>
    <body>
    ...
    Mes miniatures ne sont plus créées ! Normalement le code ramené par l'include s'exécute spontanément n'est ce pas ?
    Mon code init_site.php au cas ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    <html>
    <body>
    <?php
    /*Fonction qui créer la mimiature d'une image. 
    Retourne true si la miniature a bien été créée, un message d'erreur sinon 
    
    Liste des paramètres : 
    - $img : Chemin relatif du répertoire dans lequel se trouve l'image originale 
    - $max_width : Largeur maximale pour la miniature 
    - $max_height : Hauteur maximale pour la miniature 
    - $repertoire_destination : Répertoire dans lequel doit être sauvegardée la miniature 
    - $prefixe : Préfixe donné à la miniature (Ex : "ma-photo.jpg" devient "mini-ma-photo.jpg" 
    - $supprimer_original : Si est égal à true on supprime l'image originale 
    */
    function make_miniature($img='./Images/ImageWalter/big_bang.jpg', $max_width=400, $max_height=400, $repertoire_destination='./Images/ImageWalter/', $prefixe='mini-', $supprimer_original=false)
    { 
    	/*Initialisations*/ 
    	$message = ''; 
    	/*On recupere le nom de l'image*/ 
    	$base = basename($img);
    	/* eliminer miniature de miniature */
    	if (substr($base,0,4) != 'mini')		
    	{
    		$nom = $prefixe.$base; 
    		/*on teste si le fichier miniature n'existe pas déjà*/ 
    		$dest = $repertoire_destination.$nom;
    		if (file_exists($dest) === false)
    		{
    			/*on ouvre le fichier image*/ 
    			$file = fopen($img,'r'); 
    			if ($file != false) //Le fichier existe 
    			{ 
    				/*getimagesize() renvoie FALSE si le fichier n'est pas une image*/ 
    				if (false != list($largeur_orig,$hauteur_orig,$extension) = getimagesize($img)) 
    				{ 
    					$extension_img = substr(strchr($img,'.'),1); 
    					/*On vérifie que le fichier soit bien au format jpg, gif ou png*/ 
    					if (($extension_img == 'jpeg') OR ($extension_img == 'jpg') OR ($extension_img == 'gif') OR ($extension_img == 'png'))
    					{ 
    						switch ($extension) 
    						{ 
    						case 1: // GIF 
    							$type_img = imagecreatefromgif($img); break; 
    						case 2: //JPEG 
    							$type_img = imagecreatefromjpeg($img); break; 
    						case 3: // PNG 
    							$type_img = imagecreatefrompng($img); break; 
    						} 
    						/*On verifie la taille*/ 
    						if(($largeur_orig > $max_width) || ($hauteur_orig > $max_height)) 
    						{ 
    							// si l'image est trop large ou trop haute 
    							if ($largeur_orig > $hauteur_orig) 
    							{ 
    								// image plus large que haute 
    								$hauteur = round(($hauteur_orig * $max_width) / $largeur_orig); 
    								$largeur = $max_width; 
    							} 
    							else 
    							{ 
    								// image plus haute que large 
    								$hauteur = $max_height; 
    								$largeur = round(($largeur_orig * $max_height) / $hauteur_orig); 
    							} 
    						} 
    						else 
    						{ 
    							$largeur = $largeur_orig; 
    							$hauteur = $hauteur_orig; 
    						} 
    						/*On crée la miniature*/ 
    						$src = imagecreatetruecolor($largeur,$hauteur); 
    						imagecopyresized($src,$type_img,0,0,0,0,$largeur,$hauteur,$largeur_orig,$hauteur_orig); 
     
    						/*On sauvegarde la miniature*/ 
    						imagejpeg($src, $repertoire_destination.$nom); 
     
    						/*On libere la memoire utilisée par cette image.*/ 
    						imagedestroy($src); 
     
    						/*On supprime éventuellement l'image originale*/ 
    						if ($supprimer_original == true) 
    							unlink($img); 
     
    						return true;
    					} 
    					else 
    					{ 
    						$message = 'Erreur : L\'extension de l\'image est '.$extension_img.' ! Elle devrait être JPG, JPEG, GIF ou PNG'; 
    					} 
    				} 
    				else 
    				{ 
    					$message = 'Erreur : Le fichier '.$img.' n\'est pas une image !'; 
    				} 
    			} 
    			else 
    			{ 
    				$message = 'Erreur : Le fichier '.$img.' n\'existe pas !'; 
    			} 
    		}
    	}
    	if (strlen($message) > 0)
    		print "<br/>$message";
     
    	return false;
    } 
    /*Fonction qui lit les images d'un dossier
    
    Liste des paramètres : 
    - $dir_source : Chemin relatif du répertoire dans lequel se trouve les images
    */
    function read_dir($dirsource)
    {
    	$filelist = array();
     
    	if ($dir = @opendir($dirsource)) 
    	{
    		while (($file = readdir($dir)) != false) 
    		{
    			if($file != ".." && $file != ".")
    				$filelist[] = $file;
    		} 
    		closedir($dir);
    	}
    	//Test a faire pour ne pas avoir d'erreur si il n'y a pas d'image dans le dossier
    	if(sizeof($filelist) != '0')
    		sort($filelist);
     
    	return $filelist;
    }
     
    $location_dir = "Images/ImagesPeintres/";		// dossier ou sont les dossier images
     
    /* lire les sous dossiers du dossier */
    $dir_list = read_dir($location_dir);	
     
    /* pour chaque dossier image, récupérer les images */
    $count_dir = count($dir_list);
    $creation_mini = false;
    for ($i = 0; $i < $count_dir; $i++)
    {
    	$file_list = read_dir($location_dir.$dir_list[$i]);
    	/* pour chaque image créer la miniature */
    	$count = count($file_list);
    	$dir = $location_dir.$dir_list[$i].'/';
    	for ($j = 0; $j < $count; $j++)
    	{
    		$file = $dir.$file_list[$j];
     
    		/* tester si le fichier est de type image */
    		$desc_image= getImageSize($file); 
    		$type_image= $desc_image[2]; 
    		if ($type_image==1 || $type_image==2 || $type_image==3)
    		{
    			if (make_miniature($file,200,200,$dir,'mini-') == true)
    				$creation_mini = true;
    		}
    	}
    }
    if ($creation_mini == true)
    	print "Création des miniatures effectuée <br/>";
     
    ?>
    </body>
    </html>
    Merci

  12. #12
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Pourquoi tu y places du html dedans ?

    Ensuite ce chemin est-il toujours bon quand tu travailles depuis index.php : $location_dir = "Images/ImagesPeintres/";Sinon je vois pas tellement l'intérêt de lancer ce script à chaque fois... C'est un script qui ne devrait être lancé que si le dossier image est modifié (upload d'image, ect).

  13. #13
    Invité
    Invité(e)
    Par défaut
    Je suis d'accord avec transgohan.
    Ce sont des fonctions PHP qui devraient être lancées dans l'admin, au moment des upload des photos (ajout, modification) :
    - upload,
    - traitement, enregistrement des photos
    - traitement, redimensionnement (miniatures)

    Ce script n'a rien à faire en page index du site !

  14. #14
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Je suis tout à fait d'accord avec vous, init_site.php doit être fait en dehors de la page d'index. J'ai aussi enlevé les tags <html> et <body>. J'y vois plus clair.

    Je finirais par un exemple simple, extrait de cours de php et html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <html>
    <body>
    <?php
    echo '<p>Test PHP</p>';
    ?>
    <p>Test HTML</p>
    </body>
    </html>
    Le chargement de la page html correspondante me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Test PHP
    
    '; ?>
    
    Test HTML
    Pourtant la syntaxe est correcte mais j'ai cette trace parasite '; ?>
    ???
    Merci

  15. #15
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 421
    Par défaut
    Citation Envoyé par awalter1 Voir le message
    Le chargement de la page html correspondante
    Merci
    Je sais pas si tu as bien compris. Une page html avec l'extension .html ne peut appeler une page php que depuis un attribut "src". C'est un cas particulier que l'on utilise assez rarement.
    Si tu veux faire exécuter du code php dans une page (ex : include "init_site.php"; ) il faut que ta page en question porte l'extension .php

  16. #16
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Pour compléter la dernière réponse.
    L'affichage correspondant montre bien que le code PHP n'est pas interprété avant d'être envoyé au navigateur web.
    La configuration du serveur liste les extensions qui doivent être interprétées et les .html n'en font jamais partie.
    Tu pourras d'ailleurs constater en regardant la source du code du navigateur ton code PHP au complet.

  17. #17
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Je sais pas si tu as bien compris.
    Pourtant je m'accroche
    OK, je renomme mon fichier en fichier php et ça marche. Ce qui m'a perturbé c'est que "Test PHP" était affiché donc le code était exécuté même si de manière incorrecte, contrairement à ce que dit transgohan. Conclusion : code php implique fichier php.
    .

  18. #18
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 421
    Par défaut
    Citation Envoyé par awalter1 Voir le message
    Pourtant je m'accroche Ce qui m'a perturbé c'est que "Test PHP" était affiché...
    Il était affiché comme un bout de texte standard qui se trouve dans ta page mais il n'était pas interprété par php car comme tu le résume par la suite :
    code php implique fichier avec l'extension ".php"

  19. #19
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Merci pour vos éclaircissements

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/06/2007, 15h27
  2. appel d'une fonction php à partir d'un bouton
    Par Jesmar dans le forum Langage
    Réponses: 2
    Dernier message: 27/04/2007, 20h07
  3. [POO] problème d'appel d'une fonction php
    Par merlubreizh dans le forum Langage
    Réponses: 4
    Dernier message: 26/03/2007, 18h28
  4. [JQUERY] Comment appeler une fonction php avec jquery
    Par popogendarme dans le forum jQuery
    Réponses: 1
    Dernier message: 20/03/2007, 17h07
  5. Réponses: 3
    Dernier message: 06/11/2005, 19h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo