0

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

问题:由 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 扩展。我可以尝试什么?

4

2 回答 2

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 时,它可以工作。查看所有 php.ini 文件,看看是否在所有文件中都启用了 mcrypt。

于 2013-10-08T14:52:38.747 回答
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 二进制文件)。

于 2013-10-08T15:05:29.070 回答