zebulun
6.02.2013 - 15:14
Я извиняюсь, за, возможно глупый вопрос, написал людям скрипт, отсылающий письма, поместил в корень сайта, владельцы сайта должны были прикрутить скрипт к крону. Через время пишут, что письма не приходят, т.е. прикрутили они к крону или нет я не знаю, это не важно, в принципе.
Так вот, если я пропишу путь к скрипту в браузере, то он выполняет, то что должен, вот тут главный вопрос, а, точнее, два:
1.Если скрипт без ошибок выполняется через браузер, значит ли это, что, если его поставить на крон, то он также верно будет выполняться?
2.Как запретить все-таки запуск из браузера?А то ... ну, понятно.
Доступ к панели сайта мне не дают, попробую еще раз попросить, но для начала, должен решить проблему запуска из браузера, это ведь проблема?
Заранее, спасибо!
Цитата (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
6.02.2013 - 15:54
Спасибо, а относительно чего задавать относительные пути?
killer8080
6.02.2013 - 15:59
Цитата (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
6.02.2013 - 16:01
Цитата (zebulun @ 6.02.2013 - 13:54) |
а относительно чего задавать относительные пути? |
используй константы
__DIR__
dirname(__FILE__)
zebulun
6.02.2013 - 16:19
я поменял:
include_once('models/dailymail.php');
на
$dir=dirname(__FILE__);
include_once($dir.'/models/dailymail.php');
и сработало в браузере, я так понимаю, что и через крон инклюды сработают, это есть.
А если у меня в dailymail.php тоже стоит include_once с относительным путем, то там поменять так же?
killer8080
6.02.2013 - 16:29
Цитата (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
6.02.2013 - 17:05
ага спасибо, вроде разобрались