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 :

Erreurs lors d'une mise en place d'une requête cron PHP


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Points : 53
    Points
    53
    Par défaut Erreurs lors d'une mise en place d'une requête cron PHP
    Bonjour à tous,

    Je viens de basculer d'un serveur mutualisé OVH vers un serveur dédié Dedibox.
    J'ai tout transféré, mais j'ai quelques soucis avec la bascule des mes taches planifiées.

    J'ai un script php cron.php qui doit s'exécuter 1 fois par jour.
    Voilà le contenu du script :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $_GET['import']='rssfeed';
    $_GET['import_feed']='yes';
    $_GET['external']='1';
       if ( !defined('WP_ADMIN') )
         define('WP_ADMIN', TRUE);
       if ( isset($_GET['import']) && !defined('WP_LOAD_IMPORTERS') )
          define('WP_LOAD_IMPORTERS', true);
       require_once('../../../wp-config.php');
       require_once('../../../wp-admin/includes/class-wp-importer.php');
       require_once 'rss-importer.php';
       $rss_import1 = new RSS_Import1();
       $rss_import1 = $rss_import1->dispatch();
    ?>

    Sur mon mutualisé OVH, j'utilisais leur planificateur de tache.
    Mais là je voudrai utilisé la table CRON.

    Je me connecte donc en SSH avec Putty, et j'ajoute à ma cron table la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0 1 * * * /usr/bin/php5 /var/www/vhosts/allzedeals.com/httpdocs/wp-content/plugins/rss-feeder/cron.php
    pour que le script s'execute tous les jours à 1h00 du matin.

    Mais j'ai le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imap.ini on line 1 in Unknown on line 0
    PHP Warning:  Directive 'safe_mode' is deprecated in PHP 5.3 and greater in Unknown on line 0
    PHP Warning:  require_once(): Unable to access ../../../wp-config.php in /var/www/vhosts/allzedeals.com/httpdocs/wp-content/plugins/rss-feeder/cron.php on line 15
    PHP Warning:  require_once(../../../wp-config.php): failed to open stream: No such file or directory in /var/www/vhosts/allzedeals.com/httpdocs/wp-content/plugins/rss-feeder/cron.php on line 15
    PHP Fatal error:  require_once(): Failed opening required '../../../wp-config.php' (include_path='.:') in /var/www/vhosts/allzedeals.com/httpdocs/wp-content/plugins/rss-feeder/cron.php on line 15
    Je ne comprends rien à ce message d'erreur ?
    Est-ce que cela vient des droits d'accès au fichier ? faut-il que je fasse des chmod +x pour certains de ces fichiers ou dossier ?

    Merci de votre aide.

    Bonne fin de journée.

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    As-tu essayé de lancer le script manuellement (sans passer par cron) ? As-tu les mêmes erreurs ?

    Cordialement,
    Idriss

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Points : 53
    Points
    53
    Par défaut
    Je n'ai pas exactement les mêmes erreurs lorsque j'execute la requête directement.

    Voilà le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf                                                                              .d/imap.ini on line 1 in Unknown on line 0
    PHP Warning:  Directive 'safe_mode' is deprecated in PHP 5.3 and greater in Unknown on line 0
    PHP Warning:  set_time_limit(): Cannot set time limit in safe mode in /var/www/vhosts/allzedeals.com/httpdocs/wp-content/plugins/rss-feeder/rss-importer.php on line 13
    PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 81 bytes) in /var/www/vhosts/allzedeals.com/httpdocs/wp-includes/pomo/mo.php on line 204
    Merci pour vos conseils.

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Je me connecte donc en SSH avec Putty, et j'ajoute à ma cron table la ligne suivante :
    Mets ton cronjob dans la crontab d'apache vu que le fichier à inclure est dans /var/www (à moins que tu ne sois root). Ou si ce n'est pas possible, change les droits du fichier à inclure.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    Merci pour ce retour Benjamin,
    Je suis désolé, mais vu que je début en gestion Serveur, j'ai besoin d'un peu plus de détails.
    En SSH, je me log en root.
    De quel fichier dois-je changer les droits ? et quels droits doivent être données ? x ? r ?
    Merci d'avance.

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Si tu as mis ce job dans la crontab de root, la piste de l'insuffisance des droits peut être écartée

    En relisant, j'ai remarqué ça:
    require_once(../../../wp-config.php): failed to open stream
    Je pense que tu n'est pas dans le bon répertoire au moment de l'exécution du script (la crontab doit faire s'exécuter les programmes dans /root ou quelque chose du genre).
    Un chdir au début de ton code pourrait sûrement corriger le problème.
    Pense également à rediriger l'output produit par le script vers un fichier de log

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0 1 * * * /usr/bin/php5 /var/www/vhosts/allzedeals.com/httpdocs/wp-content/plugins/rss-feeder/cron.php > /tmp/rss_feeder_cron.log
    par exemple.

    Par ailleurs, pour t'éviter à l'avenir de rencontrer un problème similaire, je te recommande d'utiliser cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // ne pas faire
    include "../../test.php";
     
    // faire
    include dirname(dirname(__FILE__)) . 'test.php';

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par Pierrick81 Voir le message
    Bonjour,

    Merci pour ce retour Benjamin,
    Je suis désolé, mais vu que je début en gestion Serveur, j'ai besoin d'un peu plus de détails.
    En SSH, je me log en root.
    De quel fichier dois-je changer les droits ? et quels droits doivent être données ? x ? r ?
    Merci d'avance.
    J'ai oublié de le mentionner dans mon post précédent mais il est bien entendu impératif que le script ait les droits d'execution. Qui peuvent êtres donnés par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ chmod +x monscript.php

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Points : 53
    Points
    53
    Par défaut
    Merci Benjamin pour tous ces éléments.

    J'ai donc modifier mon fichier cron.php, en utilisant dirname(__file__).
    Maintenant cela semble pointer au bon endroit.
    J'ai bien vérifié et mon fichier cron.php a bien les droits en exécution.

    J'ai fait pointer les logs dans un fichier comme tu dis. Le fichier se créé bien , mais le contenu est vide. Comment cela se fait-il ?

    Maintenant j'ai le message suivant que je reçois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imap.ini on line 1 in Unknown on line 0
    PHP Warning:  Directive 'safe_mode' is deprecated in PHP 5.3 and greater in Unknown on line 0
    PHP Warning:  set_time_limit(): Cannot set time limit in safe mode in /var/www/vhosts/allzedeals.com/httpdocs/wp-content/plugins/rss-feeder/rss-importer.php on line 13
    PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 32 bytes) in /var/www/vhosts/allzedeals.com/httpdocs/wp-includes/pomo/mo.php on line 212
    J'ai toujours les 2 mêmes premières lignes, où il parle de "safe_mode" et qui semble poser problème pour la fonction set_time_limit().

    Ce qui m'embête le plus est au niveau de la mémoire, car il y a une fatale error mais peut-être est-ce aussi lié au "safe_mode" ?

    Je vais creuser sur ce point du "safe_mode". Mais si vous voyez une solution, n'hésitez pas .

    Merci d'avance.
    P.

  9. #9
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par Pierrick81 Voir le message
    J'ai fait pointer les logs dans un fichier comme tu dis. Le fichier se créé bien , mais le contenu est vide. Comment cela se fait-il ?
    Ton script n'écrit rien alors...

    Comment se fait-il que tu arrives à pêter la limite mémoire ? Que fait ton script ?

    Vérifie que tu n'a pas de boucle infinie qui tourne, ça vient sûrement de là...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Points : 53
    Points
    53
    Par défaut
    Ton script n'écrit rien alors...
    Oui ça c'est possible, il n'est rien censé écrire.

    Comment se fait-il que tu arrives à pêter la limite mémoire ? Que fait ton script ?
    Ce script importe des éléments à partir de flux XML. Il prend effectivement environ 2 minutes pour s'exécuter, mais auparavant je l'exécutais sur un OVH pro mutualisé sans aucun souci.
    donc c'est étrange que ça ne passe pas !

  11. #11
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Au pire tente de désactiver le safe mode: http://www.php.net/manual/en/ini.sec...#ini.safe-mode

    Et mets la limite mémoire un peu plus haut pour voir si ça passe.
    Sinon, c'est que tu as une boucle infinie ou quelque chose du genre...

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Points : 53
    Points
    53
    Par défaut
    Effectivement, il faudrait que je désactive ça surtout, que c'est écrit en gros que c'est obsolète depuis PHP 5.3.
    Et je tourne en 5.3 justement.

    Par contre, je ne comprends pas trop quel php.ini modifié car lorsque je cherche les php.ini j'en trouve 4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /opt/psa/admin/conf/php.ini
    /etc/php5/apache2/php.ini
    /etc/php5/cgi/php.ini
    /etc/php5/cli/php.ini
    Au niveau de la boucle infine, il n'y a aucune raison, car le script n'a pas été modifié et il fonctionne parfaitement sur mon autre serveur mutualisé.

    Et pour la première ligne du message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imap.ini on line 1 in Unknown on line 0
    Cela semble vouloir dire que les commentaires avec # sont désormais obsolètes. Par quoi faut-il les remplacer ?

    Merci

  13. #13
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Remplace tes commentaires afin qu'ils suivent ce formalisme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // un commentaire sur une ligne
    /*
     un commentaire
     sur plusieurs lignes
    */
    Comme en C par exemple.

    C'est le fichier /etc/php5/cli/php.ini que tu dois éditer puisque les scripts PHP en cron sont lancés en mode CLI (Command Line Interface).
    Si tu n'est pas sûr, lance cette commande pour vérifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ php -r 'echo phpinfo();' | grep .ini

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Points : 53
    Points
    53
    Par défaut
    YEESSS !

    Merci beaucoup.

    Juste pour bien comprendre, peux-tu me détailler le fonctionnement de la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ php -r 'echo phpinfo();' | grep .ini
    En gros on recherche la chaine ".ini" dans phpinfo() ?

    à quoi sert le "-r" ?

  15. #15
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    permet d'executer directement un bout de code PHP, ensuite on filtre le résultat avec un grep puisque tout ce qui nous intéresse est l'emplacement du fichier ini.



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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/02/2012, 15h56
  2. mise en place d'une gestion d'erreur
    Par lonyc dans le forum ASP
    Réponses: 4
    Dernier message: 05/01/2009, 21h54
  3. Réponses: 0
    Dernier message: 21/01/2008, 19h28
  4. erreur lors de la mise en place d'un serveur via apache, mysql et xwiki
    Par nolofinwe dans le forum Serveurs (Apache, IIS,...)
    Réponses: 10
    Dernier message: 07/01/2008, 07h39
  5. [JpGraph] Erreur lors de la mise en place chez Free
    Par florent dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/01/2006, 17h11

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