Bonjour !

Je voulais savoir si il est possible de lancer une command symfony (dans mon cas j'ai créé une command loadUser)
En cherchant sur internet j'ai trouvé la commande exec de php mais je n'ai pas l'impression que ça fasse quelque chose.
Le but de cette page est qu'elle soit appelé via une cron sur un serveur OVH.
Voilà comment je fais :

<?php

$dbAlias = new PDO("mysql:host=xxxxxxx;dbname=xxxxxx", "xxxxxxxxx", "xxxxxxxx");
$dbAlias->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$db = new PDO("mysql:host=xxxxxxxxx;dbname=xxxxxxxxx", "xxxxxxxxxxx", "xxxxxxxxxxx");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$userStmt   = $dbAlias->query("SELECT * FROM User_Import");
$users      = $userStmt->fetchAll(PDO::FETCH_ASSOC);

$encours_stmt   = $dbAlias->query("SELECT * FROM Encours_Import");
$encours        = $encours_stmt->fetchAll(PDO::FETCH_ASSOC);

function placeholders($text, $count=0, $separator=","){
    $result = array();
    if($count > 0){
        for($x=0; $x<$count; $x++){
            $result[] = $text;
        }
    }
    return implode($separator, $result);
}

foreach($users as $row){
    $fields = implode(",", array_keys($row));
    $test   = placeholders("?", sizeof(array_values($row)), ",");
    try{
        $stmt = $db->prepare("INSERT INTO User_Import (".$fields.") VALUES (".$test.")");
        if($stmt){
            $stmt->execute(array_values($row));
        }
    }catch (PDOException $e){
        echo $e->getMessage();
    }
}

foreach ($encours as $encour){
    $fields = implode(",", array_keys($encour));
    $values = placeholders("?", sizeof(array_values($encour)), ",");

    try{
        $stmt = $db->prepare("INSERT INTO Encours_Import (".$fields.") VALUES (".$values.")");
        if($stmt){
            $stmt->execute(array_values($encour));
        }
    }catch (PDOException $e){
        echo $e->getMessage();
    }
}

exec("php ".__DIR__."bin/console loadUser");
?>

5 réponses


moi j'utilise Console/cake et pas bin/console

Console/cake c'est du cakePhp ça il me semble pas que ca soit ce que je recherche.

Quelqu'un aurais une solution ?

Bonjour,

Si j'ai bien compris, tu cherches à faire un script PHP, intégré à Symfony, que tu pourras lancé depuis la Crontab.

Pour ce faire, tu créés une classe Commande

//-- dans src/MonBundle/Command/testCommand.php

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;

class testCommand extends ContainerAwareCommand
{

    protected function configure()
    {
        $this
            ->setName('test:maCommande')
            ->setDescription('Ceci est une commande de test')
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        // Ici le code qui sera exécuté
    }

}

Ensuite tu peux lancer cette commande avec "app/console test:maCommande".
Tu peux du coups inscrire l'éxecution de ce script dans ta crontab

*/5 * * * * php /chemin/vers/mon/projet/symfony/app/console test:maCommande

Pour une exécution toutes les 5 minutes par exemple.

Bonjour,

Merci pour ta solution mais j'ai déjà essayé. Le problème est que dans ma commande symfony j'ai une connexion à la base de données distante qui se vois refusée, alors que mon script php brut lui fonctionne, seulement j'ai besoin de la partie symfony pour traiter les utilisateurs.

Je vous ramène à mon poste sur ce problème qui n'est pas encore résolu à cette adresse

Donc si j'arrive à lancer une commande symfony dans mon script php tout est niquel.