Laravel需要Mcrypt PHP扩展。不适合cron工作

时间:2013-10-08 14:25:02

标签: php cron laravel laravel-4 mcrypt

所以我像许多其他人一样困扰着这个问题,但没有解决方案。

问题:cron任务发出的命令无法运行并提供消息:Laravel requires the Mcrypt PHP extension.

我可以通过artisan运行命令,它们运行正常。我在OSX 10.8上使用MAMP。

我已经对我的.bash_profile进行了四重检查,以确保设置了正确的PATH:export PATH=/Applications/MAMP/bin/php/php5.4.4/bin:$PATH。由终端中的which php确认。 php -v确认正在使用PHP 5.4.4。 php -i确认安装并启用了mcrypt扩展。即使将die(phpversion().PHP_EOL);添加到vendor/laravel/framework/src/Illuminate/Foundation/start.php,也可以确认它使用了正确的版本。

所以我很难过。我不知道为什么cronjobs无法识别正确的PHP版本或安装了mcrypt扩展。我该怎么办?

2 个答案:

答案 0 :(得分:3)

这可能是一个PHP问题,请查看该消息的代码:

if ( ! extension_loaded('mcrypt'))
{
    die('Laravel requires the Mcrypt PHP extension.'.PHP_EOL);

    exit(1);
}

在运行命令行上测试你的php:

php -r 'echo PHP_EOL . (extension_loaded("mcrypt") ? "loaded" : "not loaded") . PHP_EOL . PHP_EOL;'

MCrypt已安装并可用于php?测试它运行:

php -i | grep  mcrypt

它必须至少告诉你:

mcrypt support => enabled
mcrypt_filter support => enabled

编辑:

另一种可能性是cron运行不同的php(php,php-cli,php-cgi),当你明确选择正确的它时,它有效。看看你所有的php.ini文件,看看是否在所有这些文件中都启用了mcrypt。

答案 1 :(得分:3)

不要依赖于通过.bash_profile设置cronjob的PATH(它是一个shell功能,而cronjobs没有通过shell运行),你应该使用像

这样的东西
* * * * * /Applications/MAMP/bin/php/php5.4.4/bin/php-something? /path/to/vendor/laravel/framework/src/Illuminate/Foundation/start.php

测试可能是这样的:

# /tmp/test.php
<?php file_put_contents('/tmp/a_test', `id`."\n".var_export($_ENV, true)."\n".var_export(extension_loaded('mcrypt'), true));
# in crontab
* * * * * /Applications/MAMP/bin/php/php5.4.4/bin/php-something? /tmp/test.php

手动运行php /tmp/test.php一次以发现运行脚本与cron之间的差异;并始终尝试在crontab中使用绝对路径(在本例中为您的php二进制文件)。