как я предположил, я создал файл MessengerCommand.php под protected/commands
как
class MessengerCommand extends CConsoleCommand { public function run($args) { /* if(ERunActions::runBackground()) { */ $mail=Yii::app()->Smtpmail; $mail->SetFrom("tsadmin@softthink.com", 'From NAme'); $mail->Subject ="hello"; $mail->MsgHTML("haiii workd"); $mail->AddAddress("rajesh.udutha@itaugments.com", ""); if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; }else { echo "Message sent!"; } } }
и добавил команду yiic
как
$path = dirname(__FILE__); //echo $path; shell_exec( $path . "/protected/yiic messenger" );
и он будет запускать электронную почту, когда я загружу сайт ….
но я не хочу обновлять сайт. Мне нужно сделать это для запуска в фоновом режиме. Пожалуйста, помогите мне.
Вы можете использовать консольные приложения yii для выполнения своей задачи.
В protected/commands
создайте новый файл с помощью Command
sufix, например: MessengerCommand.php
:
<?php class MessengerCommand extends CConsoleCommand { .......
В классе MessengerCommand у вас есть несколько вариантов создания действия команды . В этом примере мы переопределим метод run
:
public function run($args) { $birth_month = date("m"); $birth_day = date("d"); $criteria = new CDbCriteria; $criteria->condition = "birth_month = $birth_month and birth_day = $birth_day"; $listScheduledRecords = Table::model()->findAll($criteria); foreach($listScheduledRecords as $scheduled_record): $this->send($scheduled_record); endforeach; } public function send($scheduled_record) { .... your logic to send your email .... }
В protected
каталоге создайте файл: messenger.php
. Этот файл будет исполняться командой:
<?php $path = dirname(__FILE__); $output = shell_exec( $path . "/./yiic messenger" ); echo $output;
Чтобы протестировать его, в Linux / Unix запустите консоль / терминал:
cd /.../.../...your_protected_path php messenger.php
Чтобы протестировать в Windows, вам нужно обратиться к вашему пути к пути php.exe или установить php.exe в переменных вашей системной среды и использовать эквивалент yiic для Windows
Чтобы запланировать автоматическую задачу, в этом примере, ежедневном исполнении, в Linux / Unix, вы можете использовать задания cron :
В консоли / терминале:
crontab -e
В cron-файле добавьте запланированную задачу ежедневно, в 9:00. Запомнить cron sintax: # минутный час день месяца месяц день недели команда
0 9 * * * php /full_path/protected/messenger.php
Сохраните файл и выйдите.
Чтобы запланировать автоматическую задачу в Windows, обратитесь к их документам / справочной информации в Интернете .
Если у вас есть ошибки, приложения Yii Console используют собственный файл конфигурации ( protected/config/console.php
). Общими ошибками являются неправильное соединение db, компоненты, модули в protected/config/console.php
.
Окно, эквивалентное заданию cron, является запланированной задачей.
Запланированную задачу можно создать с помощью командной строки с помощью schtasks
Пример:
schtasks /create /tn calculate /tr calc /sc weekly /d MON /st 06:05 /ru "System"