У меня есть PHP-скрипт, который читает электронную почту, сохраняет вложения, читает сохраненные файлы csv и загружает БД с содержимым файлов csv. Я использую библиотеку Jamesiarmes \ PhpEws для подключения к моему серверу Exchange, и все работает отлично. Как мне нужно делать это каждый день, я использую crontab для запуска PHP-скрипта каждый день в десять часов.PHP-классы не найдены с crontab
00 10 * * * /usr/bin/php /home/web/update/format-recent-report.php > /home/web/log/readmail.log 2> /home/web/log/readmail.err
Проблема возникает, когда Crontab пытается запустить сценарий. Файл readmail.err содержит следующую ошибку:
PHP Fatal error: Class 'jamesiarmes\PhpEws\Client' not found in /home/web/update/exchange_config.php on line 8
Вот это exchange_config.php
:
<?php
use \jamesiarmes\PhpEws\Client;
$host = 'xxx.xxxx.it';
$username = 'yyyyy';
$password = 'zzzzzz';
$version = Client::VERSION_2010;
?>
Afetr получаю ошибку, я иду в каталог, где находится скрипт и попытаться запустить сценарий вручную с:
php format-recent-report.php > log
и скрипт работает правильно. Почему это различие между crontab и manual?
Я не публикуйте содержание PHP скрипт, потому что это очень долго, но я могу сказать, что она начинается с:
include '../vendor/autoload.php';
include 'exchange_config.php';
останавливается в самом начале.
Ваш скрипт, вероятно, не работает из каталога, который, по вашему мнению, есть, вы можете использовать 'getcwd', чтобы проверить это. Использование абсолютных путей разрешило бы это. – jeroen
Ваши пути не являются абсолютными, поскольку они зависят от текущего рабочего каталога. Очевидно, что файл, который вы пытаетесь включить, не включается (это проблема для вас, чтобы исправить). – AD7six