За последние 24 часа нас посетили 18686 программистов и 1702 робота. Сейчас ищет 901 программист ...

Проблема с запуском скрипта Cron'ом

Тема в разделе "PHP для новичков", создана пользователем CraftLawrence, 2 окт 2015.

  1. CraftLawrence

    CraftLawrence Новичок

    С нами с:
    12 ноя 2014
    Сообщения:
    40
    Симпатии:
    0
    Есть два скрипта в двух файлах mail.php и bd.php
    Оба файла находятся в одной папке, с одними правами (600), оба настроены в кроне одинаково, на срабатывание каждую минуту.
    Почему mail.php срабатывает, а bd.php - нет?
    Если к обоим обратиться через строку в браузере, то работают оба.

    Гуглил, безуспешно. Толком даже не знаю, что искать. Читал, что вроде как нужно какие-то права chmod поменять, но не знаю как это сделать на моем хостинге (beget.ru).
    Просто я только начинаю работать с CRON.

    p.s. Если это важно, то mail.php создан для теста и просто отправляет на почту письмо с текстом "ТЕСТ", а bd.php обращается в базу данных и удаляет аккаунты, которые не подтверждены по почте.

    Очевидно, дело в коде, потому вот код файла db.php:

    Код (PHP):
    1. <?php
    2. include_once "../includes/settings.php";
    3.  
    4. //Open a new connection to the MySQL server
    5. $mysqli = new mysqli(HOST, USER, PASS, DB);
    6.  
    7. //Output any connection error
    8. /*if ($mysqli->connect_error)
    9.     die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);*/
    10.  
    11. $results = $mysqli->query("SELECT confirm_date FROM users WHERE confirmed = 1 && payed = 0");
    12.  
    13. while($row = $results->fetch_array()) {
    14.     $happyday = $row["confirm_date"];
    15.     $curday = date('Y-m-d H:i:s');
    16.     $d1 = strtotime($happyday);
    17.     $d2 = strtotime($curday);
    18.     $diff = $d2-$d1;
    19.  
    20.     if ($diff >= 21600)
    21.         mysqli_query($CONNECT, "UPDATE users SET banned = '2' WHERE confirm_date = '$happyday'");
    22. }
    23. // Frees the memory associated with a result
    24. $results->free();
    25. // close connection 
    26. $mysqli->close();
    27. ?>
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Для консольной версии PHP текущей директорией является другая папка. Оформи свои инклуды через __DIR__ чтобы наверняка. Или вот из документации пример лекарства:
    Код (PHP):
    1. chdir( dirname ( __FILE__ ) ); 
    Добавлено спустя 1 минуту 5 секунд:А вообще, на будущее, "не запукается" это не диагноз. У тебя должны быть логи в которых сохранилось сообщение об ошибке.

    Добавлено спустя 5 минут 53 секунды:
    viewtopic.php?t=54114#p432307
     
  3. CraftLawrence

    CraftLawrence Новичок

    С нами с:
    12 ноя 2014
    Сообщения:
    40
    Симпатии:
    0
    Честно, я искренне был бы рад, если бы в мои логи писались ошибки работы с MySql или cron. Я настроил в .hraccess вывод всех, как я понимаю, ошибок, но ошибки cron'a и соединения с MySql туда не сыпятся, только php. Слегка гуглил в эту область, там просят настроить файл, доступа к которому на моем хостинге нет.

    А вот за это спасибо! Заработало.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    эм... какой еще htaccess, когда мы говорим о консольном скрипте?!
    друг, изучи тему логов, это действительно важно. гугль в помощь!
     
  5. CraftLawrence

    CraftLawrence Новичок

    С нами с:
    12 ноя 2014
    Сообщения:
    40
    Симпатии:
    0
    Я тебе не друг, приятель.

    Мне нужно не о логах читать, а о том, что такое "консольный скрипт" и при чем он тут, если я работаю с виртуальным хостингом, а не с сервером.
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Друг, поверь, тебе лучше почитать что такое логи)
    Дык, ты походу вообще не вкуриваешь что ты делаешь. Что такое крон? o_O

    Добейся что бы скрипт у тебя локально работал, потом переноси на сервер. Запусти его не через крон, отработал? Если да тогда настраивай крон задачу для него.
     
  7. CraftLawrence

    CraftLawrence Новичок

    С нами с:
    12 ноя 2014
    Сообщения:
    40
    Симпатии:
    0
    Я тебе не друг, товарищ.

    Дак я как бы намекнул, что мне РАНО читать про логи, нужно в базе разбираться)
    И "локально" скрипт работает.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в консоли?
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    ну так читай! сейчас ты похож на собаку, которая кусает кормящую руку. "я тебе не друг" — это ты в кино про крутых подсмотрел?
    поверь, никто на тебя не нападает. тебе дают подсказки, а пользоваться ими или нет это твоё дело.

    Добавлено спустя 21 минуту 55 секунд:
    объясняю: php может работать "для веба" (CGI, mod_php, php-fpm) или "для командной строки" (CLI, консоль). этим занимаются разные исполняемые файлы и настройки у них разные. некоторые переменные и функции могут быть доступны в Веб, но недоступны в Консоли. и, как ты уже убедился, текущая директория у них разная, что влияет на подключение файлов.

    крон обращается к консольному варианту php.
    пример правильного запроса в гугль: "php cli текущая директория"
    официальная документация: http://php.net/cli (читать примеры и комментарии! в них самый жир)
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Влад, дружище, ты что, не признал нас? Мы ж все тут все с Иркутска. Можно сказать ближайшие соседи. А ты с нами так сурово...