Problème de PHP mode CGI sur OVH.

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par ortolojf, 23 Janvier 2012.

Tags:
  1. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 646
    J'aime reçus:
    38
    Bonsoir

    Le serveur de mon site partenaire, va bientôt être refait avec des disques durs neufs, car l'un des actuels disques durs, est en train de rendre l'âme... Problème insoluble par les moyens habituels de gestion du raid, à cause d'un contexte particulier.

    Le problème, c'est que le système d'exploitation que souhaite mon Dirlo, est la Relaase 2 d'OVH... qui ne supporte que des interpréteurs PHP en mode CGI, pas en mode CLI. ( Dixit le support d'OVH ).

    Or... J'utilise, lancés à partir de scripts en Bourne Shell, des commandes de lancement de scripts php comme en ligne de commande, de cette manière :

    php -q -f script.php $param 1 $param2 2>/dev/null

    Là, l'interpréteur php est censé être en mode CGI, et le paramètre -q ( d'après le PHP Manual ), fait que cette commande ne générera pas les en-têtes HTTP que génère php en mode CGI.

    Donc, théoriquement, ce paramètre -q fait que, tout se passe comme si php était en mode CLI.

    Première question : Celà est-il vrai, à partir du moment où le problème du répertoire par défaut dans le script script.php , ne se pose pas ?

    Maintenant, lors de ces lancements, le script script.php rend une valeur à la fin de son exécution, par des instructions genre : exit(0); ou : exit(-1); dans ce script.

    Ces valeurs de retour, seront-elles disponubles dans la variable Shell $? , après le lancement de cette commande, comme si php était en mode CLI ?

    Par exemple, voici un morceau d'un script en Bourne Shell :

    Code:
    #!/bin/sh
    
    # On suppose que le PATH est suffisant pour accéder à l'interpréteur php en mode CGI...
    
    $tmp_php=`which php`
    
    $param1="ab"
    $param2="cd"
    
    $result=$tmp_php -q -f script.php $param1 $param2 2>/dev/null
    
    if( [ $result -eq 0 ]; then
      # Traitement OK, le script s'est correctemenet exécuté.
    else
       # Traitement d'erreur.
    fi
    
    exit 0
    
    Celà va-t-il fonctionner, même si php est en mode CGI ?

    Le paramètre -q sera-t-il suffisant, pour que tout se passe comme si php était en mode CLI ? ?


    Troisième question : Les paramètres $param1 et $param2, sont récupérées dans le script script.php , de cette manière :

    Voici le script script.php :

    Code:
    <?php
    $argv = $SERVER['argv'];
    
    $param1 = $argv[1];
    $param2 = $argv[2];
    
    echo $param1 . "\n";
    echo $param2 . "\n";
    
    exit(0);
    ?>
    
    Est-ce que les valeurs de $param1 et $param2 seront correctement lues dans $SERVER['argv'] ?

    Normalement, le résultat du lancement du script en Bourne Shell, devrait donner :

    ab
    cd

    Est-ce que ce sera le cas, sinon où est l'erreur ?

    Merci beaucoup de vos réponses.

    Bien amicalement.

    Jean François Ortolo
     
  2. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 646
    J'aime reçus:
    38
    Bonsoir

    Je change de question, car il me semble avoir trouvé une partie des réponses.

    Le problème étant, de savoir si le fait d'avoir un interpréteur php en mode CGI ( sur une Release 2 d'OVH ), n'empêchera pas les trois sites de mon Dirlo ( dont mon site partenaire ), de fonctionner, voici le point où j'en suis arrivé, et la question qui me reste...

    D'abord, j'ai sur mon ordinateur, un interpréteur php en mode cli ( php ), et un interpréteur php en mode cgi ( php-cgi ).

    Le fait de faire, à partir d'un compte ( login ) Shell :

    php-cgi -q -f script.php ab cd 2>/dev/null

    puis :

    echo $?

    Cette dernière commande, rend bien la valeur retournée par l'instruction exit(-1); terminant le script script.php

    J'obtiens : 255

    Mon seul problème, est de différencier, les valeurs 0, des autres valeurs de retour.

    Donc déjà, cette difficulté est surmontée.

    Ensuite, le fait de faire celà, n'affiche pas les en-têtes http.

    Si c'est le cas sur le serveur neuf de mon Dirlo, j'aurai toujours la ressource, de rajouter comme paramètre :

    --no-header

    Par exemple :

    php-cgi -q --no-header -f script.php ab cd 2>/dev/null

    Cependant, il y a un hic : Les paramètres "ab" et "cd" ne figurent pas dans la variable $argv dansle script script.php , dans les deux cas.

    Dans le script script.php , il y a :

    [ code]
    <.php
    $argv = $_SERVER['argv'];

    $param1 = $argv[1];
    $param2 = $argv[2];

    echo $param1 . "\n";
    echo $param2 . "\n";

    exit(-1);
    ?>
    [/code]


    Le fait d'exécuter ce code de cette manière, me donne une erreur comme quoi $argv[1] n'est pas affectée, et itou pour $argv[2]

    Même chose si $argv est utilisée sans passer par la variable $_SERVER

    Donc, d'abord, il semblerait qu'avec un interpréteur php en mode CGI, il soit impossibe de passer des paramères à un script lancé en ligne de commande.

    Cependant, je peux contourner ce problème, en alimentant deux fichiers texte param1.txt et param2.txt en amont du lancement du script script.php , à partir du script en Bourne Shell qui lancera cette commande ci-dessus, puis dans script.php, lire le contenu de ces fichiers texte, pour avoir les paramètres.

    Problème résolu.


    Maintnenant, reste le problèmes des redirections, urlrewriting, et headers php.

    Là, on suppose que ce sont des scripts php accédés de l'extérieur, en mode web classique.

    Ma question ( mes questions ), sont celles-ci :

    1- A l'intérieur d'un tel script php, pour un serveur web Apache avec php en mode CGI, est-il possible de faire des redirections, du type :

    header("Location: $autre_url");
    exit;

    Ceci, comme d'habitude, en supposant qu'on n'a rien affiché avant, et pas mis d'autres headers


    2- Dans les même conditions, est-il possible de faire des urlrewriting avec un fichier .htaccess , avec soit : RedirectPermanent, soit RewriteRule, suivi de la rule ?

    3- Dans une url rewriting avec RewriteRule, la source de la rule peut-elle avoir des paramètres ? par exemple transmettre les paramètres des éléments de l'url source entre parenthèses, dans les variables : $1, $2, etc... repris dans l'url cible ?

    4- A propos des headers, est-il vrai, que l'on peut placer des instructions de headers dans ce genre de scripts php, pour peu que aucun caractère n'ait été écrit ?

    Autrement dit : le PHP mode CGI, ne va-t-il pas générer ses propres headers en début de script, qui vont empêcher que l'on puisse en placer d'autres dans le script ?

    Voici toutes ces questions, qui me semblent faire le tour de tout ce qui peut empêcher les trois sites de mon Dirlo, de fonctionner.

    A part çà, je suppsoe qu'il est possible d'utiliser des fonctions Javascript et des meta html du type : Meta Refresh , etc...

    Merci beaucou beaucoup de vos réponses.

    Bien amicalement.

    Jean François Ortolo


    PS J'ai encore une dernière question, à propos de sessions.
     
Chargement...
Similar Threads - Problème PHP mode Forum Date
PHP : problème de comparaison égalité dans boucle FOR avec incrément décimal de 0.1 Développement d'un site Web ou d'une appli mobile 26 Août 2021
URL canonique et problème entre / et /index.php Débuter en référencement 20 Janvier 2021
Probleme forum phpbb seo Développement d'un site Web ou d'une appli mobile 30 Septembre 2018
Problème de duplicate content avec des URLs contenants /index.php/ URL Rewriting et .htaccess 14 Mai 2018
Problème hiérarchie de classes php. Développement d'un site Web ou d'une appli mobile 9 Janvier 2018
Problème images en https (forum phpbb) [résolu] Développement d'un site Web ou d'une appli mobile 18 Novembre 2017
PHP -Problème retraitement données Mysql avant envoit dans un tableau array Développement d'un site Web ou d'une appli mobile 28 Décembre 2016
Problème avec l'envoi d'un mail sans contenu php Développement d'un site Web ou d'une appli mobile 7 Septembre 2016
Un problème avec php7 Administration d'un site Web 1 Août 2016
Problème erreur redirection cakephp URL Rewriting et .htaccess 4 Avril 2016
problème PHP/Mysql Développement d'un site Web ou d'une appli mobile 29 Octobre 2015
Problème PHPMailer, SMTPSecure (tls ou ssl) : SMTP connect() failed Développement d'un site Web ou d'une appli mobile 6 Juillet 2015
Passage à PHP5.6, problème sur caractères accentués Développement d'un site Web ou d'une appli mobile 24 Juin 2015
Problème d'affichage www.monsite.com/index.php introuvable URL Rewriting et .htaccess 17 Décembre 2014
Problème avec ob_start php Développement d'un site Web ou d'une appli mobile 30 Juillet 2014
Problème pour configurer un virtualhost avec dernière version de Easyphp Développement d'un site Web ou d'une appli mobile 17 Mai 2014
Problème hacking Wordpress - fichiers wp-sample.php et wp-admin/wp-user.php Débuter en référencement 30 Avril 2014
Problème de modication du code html d'un site en CURL et DOM PHP Développement d'un site Web ou d'une appli mobile 11 Avril 2014
Problème sur utilisation d'une tache cron via PHP Développement d'un site Web ou d'une appli mobile 14 Août 2013
Problème version Php Développement d'un site Web ou d'une appli mobile 12 Août 2013