Visualizzazione dei risultati da 1 a 1 su 1
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    61

    Cron Job per Newsletter

    Salve , avevo gia aperto una discussione riguardante questo argomento , sono passati alcuni giorni dove ho fatto delle prove e intanto la discussione è stata chiusa , quindi ho aperto questa.

    Vi sottopongo il problema.
    Sto utilizzando un sistema forum che implica che lo sviluppo di mod esterne con annessi files venga inserito nella cartella "library" e che si crei per ogni mod una cartella specifica contenente il codice.
    Lo scopo del mio codice è quello di mandare delle email , quindi un sistema di Newsletter.
    Vi posto il codice qui di seguito del file php che si chiama DigestDay.php e che si trova nel percorso library/Digest/Listener/DigestDay.php , vi annuncio fin da adesso che i permessi del file sono a 755, ecco il codice php:

    codice:
    <?php
    class Digest_Listener_DigestDay
    {
        
    
    
        
     public static function includeMyDigestDay($hookName, &$contents, array $hookParams, XenForo_Template_Abstract $template)
        {
    
          if($hookName == 'xDDay') {
    
    
                ob_start();
    
    $db = XenForo_Application::getDb();
                           
                         
    
    
                            if ( !$db ) {
    
    
                                die( 'This script did not connect to the database' . mysql_error() );
                            }
                            
                                $mytime = $db->fetchOne("SELECT CURTIME()");        
                                    
                            $dataattuale=time();
                            $b_dataatuale=date('G', $dataattuale);
    
    
                        echo($mytime);
                            
                            if($mytime > "01:00:00"){ // funzione orario
                            
    
    
                                
                                $thread_qry10 = "SELECT * FROM xf_user WHERE user_id = '1' LIMIT 1";
                
                                        $row10 = XenForo_Application::get('db')->fetchAll($thread_qry10);
                
                                        foreach ( $row10 AS $rows10 ) {
                                            $mailemail = $rows10['email'];
                                            
                                            
                                        }
                                  
                              
                                        
                                        $thread_qry11 = "SELECT email FROM xf_user AS u JOIN xf_user_field_value AS uf ON u.user_id = uf.user_id WHERE uf.field_value = '1' AND uf.field_id = 'xDNewsletter'";
                
                                        $row11 = XenForo_Application::get('db')->fetchAll($thread_qry11);
                
                                        foreach ( $row11 AS $rows11 ) {
                                            $mailuseremail .= $rows11['email'].',';
                                            
                                            
                                        }
                                        
                                
                                                        $urlMail = $_SERVER['HTTP_HOST'];
                                                            
                                                        // costruiamo alcune intestazioni generali
                                                        $header = 'From: '.$mailemail;
                                                        //$header .= "CC: Altro Ricevente <altroricevente@dominio.net>\n";
                                                        $header .= "X-Mailer: ".$mailemail."\n";
                                                        $headers = "BBC: ".$mailuseremail;
                                                        
                                                        // costruiamo le intestazioni specifiche per il formato HTML
                                                        $header .= "MIME-Version: 1.0\n";
                                                        $header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
                                                        $header .= "Content-Transfer-Encoding: 7bit\n\n";
                                                         $messaggio = "Prova invio messaggio";
                                                        
                                                        $subject = 'Newsletter from '.$urlMail ;
                                                            
                                                            if( @mail($headers, $subject, $messaggio, $header) ) echo "";
                            else echo "";
                                
                            }
                                
                        $urlRefresh = 'php /home/NOME_UTENTE/public_html/demo/xenforo/library/Digest/Listener/DigestDay.php' ;
                    
                    
                    # apertura in scrittura di un file di log
                    $log = fopen("../".$UrlActive."Digest/crontab.txt","w") or die ("Impossible create the file.");
                    # scrittura della data corrente sul file di log      
                    $scrivi = fwrite($log,"33 01 * * * ".$urlRefresh);  
                    #chiusura del file      
                    fclose($log);        
                                    
                    }
    
                    $contents .= ob_get_contents();
                    ob_end_clean();
                }
                
                
    
    
        }
        
    
    
    
    
    }
    
        
    
    
    ?>
    Quello che fa questo codice , o meglio dire dovrebbe fare , è :
    1- Estrarre l'orario corrente dal database
    codice:
       $mytime = $db->fetchOne("SELECT CURTIME()");
    2- Verificare che l'orario corrente sia maggiore delle ore 1:00
    codice:
     if($mytime > "01:00:00"){ // funzione orario
    3- E nel caso lo fosse deve mandare una email ( la Newsletter appunto ) alle email selezionate dal dal db

    Dopo questa parte di codice si dovrebbe riscrivere nuovamente il file di cron job grazie a questo codice:

    codice:
          $urlRefresh = 'php /home/tkujmgzt/public_html/demo/xenforo/library/Digest/Listener/DigestDay.php' ;
                    
                    
                    # apertura in scrittura di un file di log
                    $log = fopen("../".$UrlActive."Digest/crontab.txt","w") or die ("Impossible create the file.");
                    # scrittura della data corrente sul file di log      
                    $scrivi = fwrite($log,"33 01 * * * ".$urlRefresh);  
                    #chiusura del file      
                    fclose($log);

    Arriviamo al succo della questione.
    Il sistema per il quale sto sviluppando la mod prevede una parte visiva ottenuta dalla funzione di callback in fatti se io accedo alla pagina contenente il suddetto codice , con il mio accesso mando un input che ovviamente fa mandare correttamente le Newsletter , ma non volendo io o i miei futuri clienti dover andare ogni volta alla suddetta pagina per far si che Newsletter vengano inviate , utilizzo il cron job.
    I codici di cron job utilizzati anche tramite CPanel su hosting netsons sono stati i seguenti:

    37 01 * * * php /home/NOME_DI_ACCESSO_UTENTE/public_html/demo/xenforo/library/Digest/Listener/DigestDay.php

    questo codice qui sopra mi è stato indicato dall'assistenza netsons stessa e in effetti facendo delle verifiche il codice sembra funzionare o meglio dire la risposta dal CPanel che mi dice che che la chiamata al suddetto file php è andata bene arriva ma ovviamente le Newsletter non vengono inviate. La risposta che ottengo all'interno della email di risposta dal CPanel è questa : Content-type: text/html .

    Poi come codice ho provato questo:

    37 01 * * * php -f -q /home/NOME_DI_ACCESSO_UTENTE/public_html/demo/xenforo/library/Digest/Listener/DigestDay.php

    questo codice sempre suggeritomi dall'assistenza netsons sembra che avvolte funzioni , nel senso che ho aspettato che arrivasse l'orario indicato e dopo 6 ore ( quindi verso le 7 del mattino rispetto alle 1 e 37 di notte ) arrivavano le Newsletter , fatto sta però che dopo un paio di giorni hanno smesso di arrivare.
    La risposta che il CPanel mi dava era : No input file specified.

    Ho provato anche a cambiare gli asterischi mettendo tutti * ( **** ) ma oltre ad arrivarmi la risposta dal CPanel le email della Newsletter non arrivano , ma se accedo direttamente alla pagina invece partono, quindi questo mi fa pensare che non sia un problem di codice ma di chiamata al codice.

    Ho provato anche ad inserire #!/usr/bin/php prima di tutto il codice php qui sopra postato , ma nulla.

    Per netsons il codice che mi hanno fornito funziona , per me invece non fa la chiamata al file perche il codice del file se uno accede alla pagina contenente il codice invia le Newsletter.

    Spero di aver spiegato tutto , spero che qualcuno possa darmi una mano.

    Grazie.
    Ultima modifica di netkingZ; 21-12-2013 a 11:43

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.