ps разработчик не отвечает, поэтому решил тут спросить.
<?php class onDatingCronMailer extends cmsAction{ public function run(){ /*echo "<pre>"; print_r(cmsConfig::getInstance()); echo "</pre>"; die();*/ if($this->options['mailing'] != 1){return;} $db = cmsDatabase::getInstance(); $from = cmsConfig::getInstance()->sitename." <".cmsConfig::getInstance()->mail_from.">"; $sql = "SELECT startdate FROM cms_dating_mailer"; $result = $db->query($sql); $startdate = $db->fetchAssoc($result); if($this->options['city'] == 'default'){ $cityexp = " AND ((u1.city IS NULL) OR (u1.city IS NOT NULL AND u2.city = u1.city))"; } else{ $cityexp = ''; } $sql_profiles = "SELECT a.user_id AS owner_id, u1.email, u2.avatar, ((YEAR(CURRENT_DATE) - YEAR(u2.birth_date)) - (RIGHT(CURRENT_DATE,5)<RIGHT(u2.birth_date,5))) AS age, u2.nickname, u2.id AS u2_id FROM cms_dating_userparams a LEFT JOIN cms_dating_userparams b ON b.i_am = a.seek_for AND b.user_id <> a.user_id INNER JOIN cms_users u1 ON u1.id = a.user_id LEFT JOIN cms_users u2 ON u2.id = b.user_id WHERE a.mailer = 1 AND u1.dating = 1 AND u2.dating = 1 AND u1.is_locked IS NULL AND u2.is_locked IS NULL AND u1.email <> '' AND (YEAR(CURRENT_DATE) - YEAR(u2.birth_date)) - (RIGHT(CURRENT_DATE,5)<RIGHT(u2.birth_date,5)) >= a.seek_age_from AND (YEAR(CURRENT_DATE) - YEAR(u2.birth_date)) - (RIGHT(CURRENT_DATE,5)<RIGHT(u2.birth_date,5)) <= a.seek_age_to AND a.seek_for = b.i_am $cityexp"; $result_profiles = $db->query($sql_profiles);// AND u2.date_reg > '$startdate[startdate]'{$cityexp} if (!$db->numRows($result_profiles)) { //если не нашлось ни одной подходящей анкеты, записываем дату запуска задачи в базу и выходим из функции $sql = "UPDATE cms_dating_mailer SET startdate = NOW(), count = '0', finished = '1'"; $db->query($sql); return; } //обновляем статус задачи $sql = "UPDATE cms_dating_mailer SET startdate = NOW(), count = '0', finished = '0'"; $db->query($sql); while($row = $db->fetchAssoc($result_profiles)){ $i++; $profiles[$row['owner_id']]['ownerparams']['owner_id'] = $row['owner_id']; $profiles[$row['owner_id']]['ownerparams']['email'] = $row['email']; $profiles[$row['owner_id']]['users'][$i]['u2_id'] = $row['u2_id']; $profiles[$row['owner_id']]['users'][$i]['login'] = $row['login']; $profiles[$row['owner_id']]['users'][$i]['avatar'] = $row['avatar']; $profiles[$row['owner_id']]['users'][$i]['age'] = $row['age']; $profiles[$row['owner_id']]['users'][$i]['nickname'] = $row['nickname']; } $letter_file = ('newprofiles.txt'); $letter_path = PATH.'/system/controllers/dating/letters/'.$letter_file; $letter_title = $_LANG['LETTERTITLE']; $subject = $letter_title.' - '.cmsConfig::getInstance()->sitename; $iter = 1; $profilecount = '0'; foreach($profiles as $key => $value){ $htmllist = ""; foreach($profiles[$key]['users'] as $key1 => $value1){ //если юзеров для письма не больше максимального кол-ва if($profilecount < $this->options['maillimit']){ $avatar = html_avatar_image($profiles[$key]['users'][$key1]['avatar'], 'small'); $htmllist .= "<div style='clear:both;margin-top:15px;overflow:hidden'>"; $htmllist .= "<div style='border:solid 1px #E1E2E1;float:left;margin-right: 20px;padding:1px'><a href=\"http://".HOST."/users/".$profiles[$key]['users'][$key1]['u2_id']."\" target=\"_blank\">$avatar</a></div>"; $htmllist .= "<div><a href=\"http://".HOST."/users/".$profiles[$key]['users'][$key1]['u2_id']."\" target=\"_blank\">".$profiles[$key]['users'][$key1]['nickname']."</a></div>"; $htmllist .= "<div>".LANG_AGE.": ".$profiles[$key]['users'][$key1]['age']."</div>"; $htmllist .= "</div>"; $profilecount++; } else{ break(1); } } $profilecount = '0'; $htmllist = "<div style='margin:20px 0 30px 0'>".$htmllist."</div>"; $to = $profiles[$key]['ownerparams']['email']; $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; $headers .= "From: $from" . "\r\n"; //размер пачки писем и паузы if($this->options['mailcount'] > 0 && $this->options['mailsleep'] > 0){ if($iter == $this->options['mailcount']){ $iter = 1; } else{ $iter++; } } } //общее кол-во писем $sql = "UPDATE cms_dating_mailer SET count = '$fullcount', finished = '1'"; $db->query($sql); } }<?php class onDatingCronMailer extends cmsAction{ public function run(){ /*echo "<pre>"; print_r(cmsConfig::getInstance()); echo "</pre>"; die();*/ if($this->options['mailing'] != 1){return;} $db = cmsDatabase::getInstance(); $from = cmsConfig::getInstance()->sitename." <".cmsConfig::getInstance()->mail_from.">"; $sql = "SELECT startdate FROM cms_dating_mailer"; $result = $db->query($sql); $startdate = $db->
2-й совет — убедитесь, что у вас Планировщик заданий на хостинге работает. instantcms.ru/blogs/stranyi-blog/kak-proverit-rabotaet-li-zadacha-cron.html
3-й совет — далеко не все скрипты, запускаемые вручную, запустятся от Планировщика (разные пути). Чтобы убедиться, что скрипт запускается, разместите внутри класса запись в файл (пример есть в упомянутой статье). Если все ок, потом удалите.
1-й совет — "портянку" — под спойлер.
2-й совет — убедитесь, что у вас Планировщик заданий на хостинге работает. instantcms.ru/blogs/stranyi-blog/kak-proverit-rabotaet-li-zadacha-cron.html
3-й совет — далеко не все скрипты, запускаемые вручную, запустятся от Планировщика (разные пути). Чтобы убедиться, что скрипт запускается, разместите внутри класса запись в файл (пример есть в упомянутой статье). Если все ок, потом удалите.
1. Сделал.
2. Работает — проверял, разные задачи, с разным временем — вот скрин
3. Сейчас попробую, отпишусь.
разместите внутри класса запись в файл (пример есть в упомянутой статье)
вот это не нашёл в вашей статье как сделать
Напомните пожалуйста, Андрей, когда вы ко мне обращались с данным вопросом?
Мне делал Till, а он не отвечает, к Вам не обращался.
Если скрипт запустился от задачи крон, значит и в файл my_cron.txt (он создастся автоматически) будет сделана запись "Обращение к файлу" с текущим временем. В этот же файл можете вывести данные из класса, чтобы понять что почем.
Извините, но я не знаю как это применить и как разобраться, в какой файл воткнуть. Cron у меня работает корректно, мой хостер проверял, другие задачи тоже запускаются, я читал наш форум по cron, мое предположение что ошибка в скрипте.
Мне сайт делал Till, компонент его, соответственно он все делал, а где он взял это скрипт cron_mailer.php я не могу сказать потому что не знаю.
что это его разработка и он на вас в обиде теперь?Напомните пожалуйста, Андрей, когда вы ко мне обращались с данным вопросом?
В любом случае вам надо выцарапывать Тилла, чтоб отлаживал класс, раз уж взялся. Если пропал, нанимайте другого. Из ваших сообщений я понял, что с отладкой у вас напряженка.
нет, и надо продолжать. я перепуталчто это его разработка и он на вас в обиде теперь?
нет, и надо продолжать. я перепутал
скрипт рабочий, вручную работает-анкеты рассылает, автоматом нет, я думаю что ошибка в скрипте при связке с cron.
2. В самом верху добавляете строку ini_set("display_errors", 1);error_reporting(E_ALL | E_STRICT | E_DEPRECATED);
3. Открываете сайт и переходите по адресу www.ваш_сайт/cron.php
4. Текст ошибки выкладываете сюда…
1. Открываете файл cron.php
2. В самом верху добавляете строку ini_set("display_errors", 1);error_reporting(E_ALL | E_STRICT | E_DEPRECATED);
3. Открываете сайт и переходите по адресу www.ваш_сайт/cron.php
4. Текст ошибки выкладываете сюда...
вот это понятная инструкция, сейчас сделаю.
4. Текст ошибки выкладываете сюда...
нет ошибок, чистый лист