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

PHP & Base de données Discussion :

automatiser sans cron


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut automatiser sans cron
    Bonjour,

    Voici, une petite question pour les plus ardus, je suis en train de me faire un cms perso, que je mettrtai à disposition, sachant que n'importe qui pourrait récupérer le dossier, les os peuvent être différents, du coup pour automatiser l'envoi de mail ou la publication, je ne veux pas utiliser crontab pour linux ou tout autre similaire.

    J'aurai aimé faire ce que l'on peut faire avec Wordpress, qui n'a pas l'air de passer par cron. La programmation se fait en php ou js, mais je n'arrive pas a trouver de piste pour faire cette automatisation.

    Une idée ?

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Ce n'est pas réellement un cron qui tourne sur wordpress.

    En fait, à chaque chargement de page, wordpress va regarder si une tache planifiée doit être exécutée ou non.
    Du coup, si il n'y a aucune visite sur le site pendant plusieurs jours, alors aucune tache planifiée ne sera exécutée.
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    Oui c'est ce que je pensais, c'est la dessus que j'ai commencé à faire, donc le problème ne se pose pas trop, le site tourne un peu sans avoir un nombre de connexion quotidienne énorme, mais j'ai au minimum 20 visites par jour.

    Du coup, je me pose une autre question si les script de pseudo-automatisation s'execute à l'affichage de la première page, cela signifie que l'affichage pour le premier visiteur sera très lent, il devra attendre que le script php soit executer pour que la page soit completement affichée, comment faire pour afficher la page et éxecuter en parallèle la page

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par zigomato Voir le message
    Du coup, je me pose une autre question si les script de pseudo-automatisation s'execute à l'affichage de la première page, cela signifie que l'affichage pour le premier visiteur sera très lent, il devra attendre que le script php soit executer pour que la page soit completement affichée, comment faire pour afficher la page et éxecuter en parallèle la page
    WordPress par exemple utilise les fonctions de flux (http://php.net/intro.stream) pour envoyer une requête HTTP qui s'occupe des "cron" sans attendre la réponse.
    les tâches sont donc exécutées en arrière-plan sans ralentir les visiteurs du site.

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par mathieu Voir le message
    WordPress par exemple utilise les fonctions de flux (http://php.net/intro.stream) pour envoyer une requête HTTP qui s'occupe des "cron" sans attendre la réponse.
    les tâches sont donc exécutées en arrière-plan sans ralentir les visiteurs du site.
    Oui ça a l'air d'être ca dans les exemples du lien, il parle des requêtes post, mais je n'arrive pas a conceptualiser à mon problème, je voudrai pouvoir mettre à jour une base de donnée, les variables seront passer en post vers un script PHP (par exemple : miseAjour.php qui contiendra la requête) mais je n'arrive pas à trouver un exemple et à comprendre le mécanisme et si c'est la solution à mon problème

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    il y a 2 étapes pour faire cela.
    la 1re chose à faire est le script "traitement.php" qui sera lancé en allant à l'adresse http://server/traitement.php et qui fera le traitement qui vous intéresse.
    et la 2e partie est la gestion du lancement en lui même qui fera une requête HTTP à la page http://server/traitement.php

    quelle est la partie qui vous pose problème ?

  7. #7
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par mathieu Voir le message
    il y a 2 étapes pour faire cela.
    la 1re chose à faire est le script "traitement.php" qui sera lancé en allant à l'adresse http://server/traitement.php et qui fera le traitement qui vous intéresse.
    et la 2e partie est la gestion du lancement en lui même qui fera une requête HTTP à la page http://server/traitement.php

    quelle est la partie qui vous pose problème ?
    Pour la partie traitement, j'imagine que c'est le script qui sera exécuté en arrière plan, si il n'y a rien de particulier concernant le stream, cela ne me pose pas de soucis, par exemple, connexion base, puis update ou envoi mail.
    La seconde partie est beaucoup plus obscure, je comprend l'idée de dire au serveur via un requête http qu'il doit exécuter un fichier mais je ne vois pas comment mettre ca en forme
    En gros, plus la seconde partie

  8. #8
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    J'ai un peu fouillé avec les informations que tu m'as donnée dans ton précèdent message, de ma page internet, par exemple au chargement dans le <head> , je peux inclure un fichier qui va contenir ceci :
    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
     
    <?php
    //pour que la réponse s'affiche comme du texte brut
    header('Content-Type: text/plain');
     
    /*partie à modifier*/
    $name = 'wwww.mon-site.fr';//nom du site
     
    //pour ne pas devoir calculer à la main la longueur du corps, on le stocke dans une variable et la fonction strlen() nous la donne.
    $data = "page=".$_SERVER['REQUEST_URI']."&ip=".$_SERVER['REMOTE_ADDR'];
     
    //la requête
    $envoi  = "POST / HTTP/1.1\r\n";
    $envoi .= "Host: ".$name."/mon_script_a_executer.php\r\n";  // j'ai un doute à ce niveau
    $envoi .= "Connection: Close\r\n";
    $envoi .= "Content-type: application/x-www-form-urlencoded\r\n";
    $envoi .= "Content-Length: ".strlen($data)."\r\n\r\n";
    $envoi .= $data."\r\n";
    /*/partie à modifier*/
     
    /*ouverture socket*/
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if($socket < 0){
            die('FATAL ERROR: socket_create() : " '.socket_strerror($socket).' "');
    }
     
    if (socket_connect($socket,gethostbyname($name),80) < 0){
            die('FATAL ERROR: socket_connect()');
    }
    /*/ouverture socket*/
     
    /*envoi demande*/
    if(($int = socket_write($socket, $envoi, strlen($envoi))) === false){
            die('FATAL ERROR: socket_write() failed, '.$int.' characters written');
    }
    /*/envoi demande*/
     
    /*lecture réponse*/ //indispensable ou pas ?
    $reception = '';
    while($buff = socket_read($socket, 2000)){
       $reception.=$buff;
    }
    echo $reception;
    /*/lecture réponse*/
     
    socket_close($socket);
    ?>
    Mon doute est sur la ligne ou placer ma page script cible et la réponse est-elle nécessaire (vu que je veux seulement mettre à jour ma base de visite journaliere, hebdomadaire, mensuel et annuel, le visiteur n'a pas lieu de savoir si cela est pris en compte)

    Il y aura bien sur d'autre requete HTTP, notamment, pour les inscriptions, forum etc ... qui ne devront pas génés le visiteur.

    Une petite correction serait la bienvenu, je n'ai pas pu la tester, la sieste de ma fille s'est fini de manière prématurée

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par zigomato Voir le message
    la réponse est-elle nécessaire
    le principe est que le script de traitement se termine en arrière-plan et après que l'envoi de la page principale est envoyée au client. donc le résultat ne peux pas être affiché mais si vous l'aviez voulu

    donc vous pouvez enlever le code de lecture de la réponse. ou plutot vous "devez" parce qu'avec ce code, le script attend la réponse ce qui n'est pas l'effet voulu

    donc au final le code utilisable est comme ça :
    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
    	$serveur = $_SERVER["SERVER_NAME"];
    	$port = $_SERVER["SERVER_PORT"];
     
    	$data = ["appel" => "test1", "cle2" => "valeur2"];
    	$data = http_build_query($data);
     
     
    	//la requête
    	$envoi  = "POST /repertoire/traitement.php HTTP/1.1\r\n";
    	$envoi .= "Host: $serveur:$port\r\n";
    	$envoi .= "Connection: Close\r\n";
    	$envoi .= "Content-type: application/x-www-form-urlencoded\r\n";
    	$envoi .= "Content-Length: ".strlen($data)."\r\n\r\n";
    	$envoi .= $data."\r\n";
     
     
    	/*ouverture socket*/
    	$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    	if($socket < 0){
    	    die('FATAL ERROR: socket_create() : " '.socket_strerror($socket).' "');
    	}
     
    	if (socket_connect($socket, gethostbyname($serveur), $port) < 0){
    	    die('FATAL ERROR: socket_connect()');
    	}
     
    	/*envoi demande*/
    	if(($int = socket_write($socket, $envoi, strlen($envoi))) === false){
    	    die('FATAL ERROR: socket_write() failed, '.$int.' characters written');
    	}
     
     
    	socket_close($socket);

  10. #10
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    Je suis désolé, mais je n'arrive pas à la mettre en place, mon script d'envoie de la requete :
    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
    <?php
     
    $serveur = $_SERVER["SERVER_NAME"];
            $port = $_SERVER["SERVER_PORT"];
     
            $data = ["nom_site" => $nom_site, "mail_web" => $mail_web];
            $data = http_build_query($data);
     
     
            //la requête
            $envoi  = "POST /admin/cron/rss.php HTTP/1.1\r\n";
            $envoi .= "Host: $serveur:$port\r\n";
            $envoi .= "Connection: Close\r\n";
            $envoi .= "Content-type: application/x-www-form-urlencoded\r\n";
            $envoi .= "Content-Length: ".strlen($data)."\r\n\r\n";
            $envoi .= $data."\r\n";
     
     
            /*ouverture socket*/
            $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
            if($socket < 0){
                die('FATAL ERROR: socket_create() : " '.socket_strerror($socket).' "');
            }
     
            if (socket_connect($socket, gethostbyname($serveur), $port) < 0){
                die('FATAL ERROR: socket_connect()');
            }
     
            /*envoi demande*/
            if(($int = socket_write($socket, $envoi, strlen($envoi))) === false){
                die('FATAL ERROR: socket_write() failed, '.$int.' characters written');
            }else{
                    echo "requete envoye"; // s'affiche bien dans ma page d'ou est appelé le script, donc celui-ci s'éxecute correctement
            }
     
     
            socket_close($socket);
    ?>
    Le script php qui est appelé dans l'entête :
    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
    <?php
    $url_site = $_POST['url_site'];
    $nom_site = $_POST['nom_site'];
    $mail_web = $_POST['mail_web'];
     
    $xml = "url du site :".$url_site;
     
    //On ouvre le fichier en mode écriture
    $fp = fopen("rss.xml", 'w+');
     
    //On écrit notre flux RSS
    fputs($fp, $xml);
     
    //Puis on referme le fichier
    fclose($fp);
     
    ?>
    Dans ce script, mon but et de réécrire mon flux, dans les fait celui-la se fera tous les deux jours par exemple.

    Mais aucun fichier n'est créé

Discussions similaires

  1. Lancer un fichier php sans cron
    Par aclait dans le forum 1&1
    Réponses: 2
    Dernier message: 05/02/2015, 12h21
  2. [MySQL] Dump regulier automatisé sans CRON
    Par SpaceFrog dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/10/2008, 20h32
  3. Tâches automatisées sans password
    Par spynux dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 07/08/2008, 23h37
  4. [Configuration] Horodatage et curl sans cron
    Par elcastor dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 14/11/2007, 16h12
  5. Réponses: 2
    Dernier message: 24/08/2007, 20h16

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