【发布时间】:2017-01-27 09:33:26
【问题描述】:
我有一个 PHP 脚本,可以读取电子邮件、保存附件、读取保存的 csv 文件并加载包含 csv 文件内容的数据库。 我使用 Jamesiarmes\PhpEws 库连接到我的 Exchange Server,一切正常。 由于每天都需要做,所以每天十点用crontab运行php脚本。
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 致命错误:在 'jamesiarmes\PhpEws\Client' 中找不到类 /home/web/update/exchange_config.php 在第 8 行
这里是exchange_config.php:
<?php
use \jamesiarmes\PhpEws\Client;
$host = 'xxx.xxxx.it';
$username = 'yyyyy';
$password = 'zzzzzz';
$version = Client::VERSION_2010;
?>
收到错误后,我转到脚本所在的目录并尝试手动运行脚本:
php format-recent-report.php > log
并且脚本可以正常工作。为什么 crontab 和手动有这种区别?
PHP脚本的内容我就不贴了,因为很长,但是可以说是开头的:
include '../vendor/autoload.php';
include 'exchange_config.php';
它从一开始就停止。
【问题讨论】:
-
您的脚本可能不在您认为的目录中运行,您可以使用
getcwd来检查。使用绝对路径可以解决这个问题。 -
您的路径不是绝对的,因此取决于当前的工作目录。显然,您尝试包含的文件没有被包含(这是您要解决的问题)。