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 :

Exécuter en ligne de commande


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Par défaut Exécuter en ligne de commande
    salut,

    j'ai un script php qui doit faire appel a d'autres script. Lancé depuis un naviguateur, tout fonctionne correctement:

    voici un résumé de la page cron.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    require_once 'cronFunctions.php';
    $last12months_dt    = (date('Y')-1).date('-m-01 00:00:00');
     
    echo '
    <img style="display:none" src="downtime.php?sup='.$last12months_dt.'&item=planned&name=downtime1">
    <img style="display:none" src="downtime.php?sup='.$last12months_dt.'&item=unplanned&name=downtime2">
    <img style="display:none" src="responseTimes.php?item=cases&name=responseTimes1">
    <img style="display:none" src="responseTimes.php?item=projects&name=responseTimes2">
    ';
     
    ?>
    et downtime.php:
    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
     
    <?php
    error_log("in downtime 1");
     
    require_once 'includes/functions.php';
    global $special_cat;
    global $graphDirectory;
     
    $displayGraph = 1;
    $largeurImage = 500;
    $hauteurImage = 400;
    $largeurBarre = 15;
    $ecartement   = 35;
    $police = 4;
     
    if($displayGraph == true){
    	header ("Content-type: image/png");
    }
     
    $where='';
    $sup = getParameter('sup','');
    if($sup != ''){
    	$where .= ' AND glpi_followups.date > "'.$sup.'" ';
    }
     
    $item = getParameter('item','');
    $filename = '';
    if($item == 'planned'){
    	$where .= ' AND completecategory = "'.$special_cat['maintenance'].'" ';
    }
    if($item == 'unplanned'){
    	$where .= ' AND completecategory = "'.$special_cat['panne'].'" ';
    }
    $filename = $graphDirectory.'/'.getParameter('name','empty').'.gif';
    if($item=='')exit;
    $sql = 'SELECT glpi_followups.realtime AS realtime,EXTRACT(YEAR_MONTH FROM glpi_followups.date) AS period 
    FROM glpi_followups 
    LEFT JOIN glpi_tracking ON glpi_followups.tracking = glpi_tracking.ID 
    WHERE glpi_followups.realtime > 0 
    '.$where.' 
    ORDER BY period ASC;';
    //error_log($sql);
    $record = runSQL($sql);
     
    if($sup ==''){
    	exit('date missing');
    }else{
    	$supA = substr($sup,0,4);
    	$supM = substr($sup,5,2);
    	$periods = array();
    	$barres = array();
    }
     
    for($i=0;$i<13;$i++){
    	if(strlen($supM) == 1)
    		array_push($periods,$supA.'0'.$supM);
    	else
    		array_push($periods,$supA.$supM);
    	array_push($barres,0);
    	$supM++;
    	if($supM==13){
    		$supA++;
    		$supM=1;
    	}
    }
     
    foreach($record as $val){
    	for($i=0;$i<count($periods);$i++){
    		if($val['period'] == $periods[$i]){
    			$barres[$i]+=$val['realtime'];
    			break 1;
    		}
    	}
    }
     
    $max = 0;
    foreach($barres as &$val){
    	if($val > $max)
    		$max = $val;
    }
     
    $im = imagecreatetruecolor ($largeurImage, $hauteurImage) or error_log("Erreur lors de la creation de l'image");
     
    $blanc = imagecolorallocate ($im, 255, 255, 255);
    $noir = imagecolorallocate ($im, 0, 0, 0);
    $bleu = imagecolorallocate ($im, 220, 218, 255);
    $rouge = imagecolorallocate ($im, 255, 0, 255);
     
    // traces barres vertical
    for ($i=0; $i<count($barres); $i++) {
    	$hmax = 275;
    	$hauteurImageRectangle = $barres[$i]*$hmax/$max; // $hauteurImageRectangle est la hauteur du rectangle dessiné
    	imagefilledrectangle ($im, ($i+1)*$ecartement-$largeurBarre/2, $hauteurImage-$hauteurImageRectangle-100, ($i+1)*$ecartement+$largeurBarre/2, $hauteurImage-100, $bleu);
    }
     
    if($displayGraph == true){
    	imagepng($im,$filename); // saves the image on disk
    }
     
    imagedestroy($im);
    ?>
    Pour résumer, depuis cron.php je lance plusieurs autres scripts, et chacun de ces scripts est supposé créer un gif et l'enregistrer sur le serveur web. L'affichage a l'ecran n'a aucune utilité, mais si je teste dans mon naviguateur, j'ouvre cron.php, tout marche comme prévu. maintenant si avec un cron je fais exécuter la commande suivante /usr/local/bin/lynx -dump http://mywebserver:8080/myapp/cron.php, alors la page downtime.php n'est jamais exécuté. Ma commande error_log("in downtime 1"); ne ressort rien. Je ne m'explique pas ce qui se passe...

    Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pourquoi ne pas utiliser PHP en ligne de commande ?
    http://us2.php.net/manual/fr/features.commandline.php

    Sinon, si tu executes ta commande avec Lynx sans passer par Cron, est-ce que tu as le retour du serveur web ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Par défaut
    Pourquoi ne pas utiliser PHP en ligne de commande ?
    effectivement, pourquoi pas. donc j'ai essayé et voila ce que ca donne :

    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
    (root@crpweb1) /opt/csw/php5/bin/php cron.php
     
    <img style="display:none" src="downtime.php?sup=2008-08-01 00:00:00&item=planned&name=downtime1">
    <img style="display:none" src="downtime.php?sup=2008-08-01 00:00:00&item=unplanned&name=downtime2">
     
    <img style="display:none" src="timePerTechnicians.php?sup=2009-08-01 00:00:00&item=cases&name=timePerTechnicians1">
    <img style="display:none" src="timePerTechnicians.php?sup=2009-01-01 00:00:00&item=cases&name=timePerTechnicians2">
    <img style="display:none" src="timePerTechnicians.php?sup=2009-08-01 00:00:00&item=projects&name=timePerTechnicians3">
    <img style="display:none" src="timePerTechnicians.php?sup=2009-01-01 00:00:00&item=projects&name=timePerTechnicians4">
     
    <img style="display:none" src="casesAssignedByTechnicians.php?sup=2009-08-01 00:00:00&item=cases&name=casesAssignedByTechnicians1">
    <img style="display:none" src="casesAssignedByTechnicians.php?sup=2009-01-01 00:00:00&item=cases&name=casesAssignedByTechnicians2">
    <img style="display:none" src="casesAssignedByTechnicians.php?sup=2009-08-01 00:00:00&item=projects&name=casesAssignedByTechnicians3">
    <img style="display:none" src="casesAssignedByTechnicians.php?sup=2009-01-01 00:00:00&item=projects&name=casesAssignedByTechnicians4">
     
    <img style="display:none" src="casesClosedByTechnicians.php?sup=2009-08-01 00:00:00&item=cases&name=casesClosedByTechnicians1">
    <img style="display:none" src="casesClosedByTechnicians.php?sup=2009-01-01 00:00:00&item=cases&name=casesClosedByTechnicians2">
    <img style="display:none" src="casesClosedByTechnicians.php?sup=2009-08-01 00:00:00&item=projects&name=casesClosedByTechnicians3">
    <img style="display:none" src="casesClosedByTechnicians.php?sup=2009-01-01 00:00:00&item=projects&name=casesClosedByTechnicians4">
     
    <img style="display:none" src="casesOpenedByGroups.php?sup=2009-08-01 00:00:00&name=casesOpenedByGroups1">
    <img style="display:none" src="casesOpenedByGroups.php?sup=2009-01-01 00:00:00&name=casesOpenedByGroups2">
     
    <img style="display:none" src="timeByGroups.php?sup=2009-08-01 00:00:00&name=timeByGroups1">
    <img style="display:none" src="timeByGroups.php?sup=2009-01-01 00:00:00&name=timeByGroups2">
     
    <img style="display:none" src="casesOpenedByCategories.php?sup=2009-08-01 00:00:00&name=casesOpenedByCategories1">
    <img style="display:none" src="casesOpenedByCategories.php?sup=2009-01-01 00:00:00&name=casesOpenedByCategories2">
     
    <img style="display:none" src="timeByCategories.php?sup=2009-08-01 00:00:00&name=timeByCategories1">
    <img style="display:none" src="timeByCategories.php?sup=2009-01-01 00:00:00&name=timeByCategories2">
     
    <img style="display:none" src="responseTimes.php?item=cases&name=responseTimes1">
    <img style="display:none" src="responseTimes.php?item=projects&name=responseTimes2">
     
    (root@crpweb1)
    on remarque qu'il m'affiche une ligne par fichier images qu'il est censé générer, mais il ne les génère pas. J'imagine que ce qu'il ne plait pas a lynx et a php en ligne de commande, c'est le fait de mettre dans les balise src une url qui appelle une page qui elle fabrique l'image. mais je sais pas trop comment m'y prendre pour dire depuis ma page principal cron.php, voici toutes les url que tu dois processer :
    • responseTimes.php?item=projects&name=responseTimes2
    • responseTimes.php?item=cases&name=responseTimes1
    • ...



    Sinon, si tu executes ta commande avec Lynx sans passer par Cron, est-ce que tu as le retour du serveur web ?
    oui et voila ce qu'il dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (root@crpweb1) /usr/local/bin/lynx -dump http://crpweb1.crp-sante.healthnet.lu:8080/glpi_stat/cron.php
     
       [downtime.php?sup=2008-08-01 00:00:00&item=planned&name=downtime1]
       [downtime.php?sup=2008-08-01 00:00:00&item=unplanned&name=downtime2]
       [responseTimes.php?item=cases&name=responseTimes1]
       [responseTimes.php?item=projects&name=responseTimes2]
    (root@crpweb1)

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Par défaut
    en fait, j'aurais bien autrement, j'ai seulement besoin d'etre capable de faire lancer des scripts php en leur passant des parametres, exemple : responseTimes.php?item=projects&name=responseTimes2

    vous savez comment je peux lancer ces actions. avec des fopens, j'ai des problemes des que je rajoute les parametres (?xxx). J'ai aussi essayé avec exec('/usr/bin/php test.php?test=8'); et ca plante aussi des que je rajoute le ?test=8.

    si vous avez des suggestions je suis preneur...

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est expliqué sur le lien que je t'ai fourni.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Par défaut
    c'est pas trop clair, j'avais deja parcouru un coup la (longue) page, mais je vais recommencer...

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

Discussions similaires

  1. Comment exécuter une ligne de commande ?
    Par tarekos dans le forum C#
    Réponses: 26
    Dernier message: 27/06/2008, 16h44
  2. Exécuter des lignes de commandes
    Par Neji44 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 09/05/2008, 17h15
  3. [C#] Exécution de ligne de commande
    Par jeromechezgdf dans le forum C#
    Réponses: 1
    Dernier message: 01/08/2007, 18h27
  4. [Système] Exécuter une ligne de commande
    Par fordprobe dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2007, 15h46
  5. Exécuter une ligne de commande dos
    Par koKoTis dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 20/08/2006, 08h03

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