2017-01-27 7 views
-1

У меня есть 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'; 

останавливается в самом начале.

+0

Ваш скрипт, вероятно, не работает из каталога, который, по вашему мнению, есть, вы можете использовать 'getcwd', ​​чтобы проверить это. Использование абсолютных путей разрешило бы это. – jeroen

+0

Ваши пути не являются абсолютными, поскольку они зависят от текущего рабочего каталога. Очевидно, что файл, который вы пытаетесь включить, не включается (это проблема для вас, чтобы исправить). – AD7six

ответ

1

Если вы запускаете скрипт с помощью cron, всегда используйте полный путь к файлу.

Добавьте к каждому пути в своем скрипте dirname(__FILE__) и добавьте / при необходимости.

+0

Вы правы. Это хороший способ –

+0

Хорошо, я попробую с помощью cd, спасибо –

+0

@ AD7six Это может решить конкретную проблему, но вы всегда должны использовать абсолютные пути, чтобы избежать любых проблем, которые могут возникнуть в результате перемещения по каталогам с помощью '..' и таких , Использование абсолютных путей позволило бы избежать проблемы с самого начала. –

 Смежные вопросы

  • Нет связанных вопросов^_^