[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: запрет cron скрипта на выполнение через браузер
zebulun
Я извиняюсь, за, возможно глупый вопрос, написал людям скрипт, отсылающий письма, поместил в корень сайта, владельцы сайта должны были прикрутить скрипт к крону. Через время пишут, что письма не приходят, т.е. прикрутили они к крону или нет я не знаю, это не важно, в принципе.
Так вот, если я пропишу путь к скрипту в браузере, то он выполняет, то что должен, вот тут главный вопрос, а, точнее, два:

1.Если скрипт без ошибок выполняется через браузер, значит ли это, что, если его поставить на крон, то он также верно будет выполняться?

2.Как запретить все-таки запуск из браузера?А то ... ну, понятно.

Доступ к панели сайта мне не дают, попробую еще раз попросить, но для начала, должен решить проблему запуска из браузера, это ведь проблема?
Заранее, спасибо!
Hello
Цитата (zebulun @ 6.02.2013 - 14:14)
значит ли это, что, если его поставить на крон, то он также верно будет выполняться?

Если у вас есть в скрипте относительные пути, то скрипт по ним ничего не сможет найти.
При инициализации браузером у скрипта директория выполнения == document root. При cron директория другая.
Цитата (zebulun @ 6.02.2013 - 14:14)
Как запретить все-таки запуск из браузера

if (php_sapi_name() !== 'cli') die();


_____________
VPS от 5$, первые 2 месяца - бесплатно.
zebulun
Спасибо, а относительно чего задавать относительные пути?
killer8080
Цитата (zebulun @ 6.02.2013 - 13:14)
1.Если скрипт без ошибок выполняется через браузер, значит ли это, что, если его поставить на крон, то он также верно будет выполняться?

не факт, есть свои нюансы, скрипт может исполнятся от другого пользователя, отсюда возможны грабли с доступом к файлам и .т.п. Возможны проблемы с путями, если подключения от текущего каталога, текущим каталогом может оказаться путь к интерпретатору, а не к файлу скрипта. В cli используется отдельный php.ini со своими настройками, может оказаться, что там не подключено какое то из используемых скриптом, расширений. В общем в каждом конкретном случае нужно разбираться отдельно. Нужно использовать логирование ошибок, ну и STDOUT можно перенаправить в файл для проверки.
Цитата (zebulun @ 6.02.2013 - 13:14)
2.Как запретить все-таки запуск из браузера?А то ... ну, понятно.

ну собственно выше уже ответили, еще как вариант, располагать файл вне веб директории. Или еще вариант
PHP_SAPI == 'cli' or die('web access restricted');
killer8080
Цитата (zebulun @ 6.02.2013 - 13:54)
а относительно чего задавать относительные пути?

используй константы
__DIR__ // php>=5.3
dirname(__FILE__) // php<5.3
zebulun
я поменял:
include_once('models/dailymail.php');

на


$dir=dirname(__FILE__);
include_once($dir.'/models/dailymail.php');


и сработало в браузере, я так понимаю, что и через крон инклюды сработают, это есть.

А если у меня в dailymail.php тоже стоит include_once с относительным путем, то там поменять так же?
killer8080
Цитата (zebulun @ 6.02.2013 - 14:19)
А если у меня в dailymail.php тоже стоит include_once с относительным путем, то там поменять так же?

можно и так, можно и просто сменить текущую директорию в главном файле
chdir(__DIR__);
// или
chdir(dirname(__FILE__));

лучше конечно, объявить константу, и её использовать
define('DOC_ROOT', __DIR__);
include_once(DOC_ROOT.'/models/dailymail.php');
zebulun
ага спасибо, вроде разобрались
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.