Laravel 需要 Mcrypt PHP 扩展。不适用于 cron 作业

Posted

技术标签:

【中文标题】Laravel 需要 Mcrypt PHP 扩展。不适用于 cron 作业【英文标题】:Laravel requires the Mcrypt PHP extension. Not working for cron jobs 【发布时间】:2013-10-15 12:52:04 【问题描述】:

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

问题:由 cron 任务发出的命令不运行并给出消息:Laravel requires the Mcrypt php extension.

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

我已经四重检查了我的.bash_profile,以确保设置了正确的路径,即: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 扩展。我可以尝试什么?

【问题讨论】:

【参考方案1】:

这可能是 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。

【讨论】:

返回loaded & mcrypt support & mcrypt_filter 均已启用 好的,所以我只是在我的 crontab 命令中将 php 路径明确设置为 MAMP 的 PHP 路径。以前我只是使用* * * * * php /path/to/my/script.php。它现在可以工作,但我不想显式设置路径。我可以解决这个问题吗?【参考方案2】:

不要依赖通过 .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 二进制文件)。

【讨论】:

那么,基本上你是说最佳实践应该是在 cron 命令中设置绝对路径?我不知道。有没有办法告诉运行CLI命令的php版本使用与我的PATH相同的版本? @JaredEitnier:你可以这样做* * * * * . /home/your_user/.bash_profile &amp;&amp; php /path/to/vendor/laravel/framework/src/Illuminate/Foundation/start.php(有关 . 或“来源”的更多信息:superuser.com/questions/46139/what-does-source-do) 我会坚持使用绝对路径 :) 谢谢!

以上是关于Laravel 需要 Mcrypt PHP 扩展。不适用于 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

PHP Laravel Mcrypt PHP扩展需要[重复]

Laravel 需要 Mcrypt PHP 扩展

Laravel 需要 Mcrypt PHP 扩展

Laravel 需要 Mcrypt PHP 扩展

安装 Laravel 时出错:需要 Mcrypt PHP 扩展

Laravel 中需要 Mcrypt PHP 扩展 [重复]