Laravel需要Mcrypt PHP扩展。不为cron工作
因此,我和其他许多人一样,被这个问题困扰,但没有解决办法 问题:cron任务发出的命令不会运行并给出消息:Laravel需要Mcrypt PHP扩展。不为cron工作,php,cron,laravel,laravel-4,mcrypt,Php,Cron,Laravel,Laravel 4,Mcrypt,因此,我和其他许多人一样,被这个问题困扰,但没有解决办法 问题:cron任务发出的命令不会运行并给出消息:Laravel需要Mcrypt PHP扩展。 我可以通过artisan运行命令,它们工作正常。我正在OSX 10.8上使用MAMP 我已经四次检查了我的.bash\u配置文件,以确保设置了正确的路径:export PATH=/Applications/MAMP/bin/php/php5.4.4/bin:$PATH。由终端中的哪个php确认php-v确认正在使用PHP5.4.4php-i确认已
Laravel需要Mcrypt PHP扩展。
我可以通过artisan
运行命令,它们工作正常。我正在OSX 10.8上使用MAMP
我已经四次检查了我的.bash\u配置文件
,以确保设置了正确的路径:export PATH=/Applications/MAMP/bin/php/php5.4.4/bin:$PATH
。由终端中的哪个php确认php-v
确认正在使用PHP5.4.4php-i
确认已安装并启用mcrypt扩展。甚至添加die(phpversion().PHP_EOL)
tovendor/laravel/framework/src/illumb/Foundation/start.php
已确认其使用的版本正确
所以我被难住了。我不知道为什么cronjobs不能识别正确的PHP版本,或者没有安装mcrypt扩展。我可以尝试什么?这可能是一个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。这可能是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。不要依赖于通过.bash_配置文件为cronjob设置的路径(这是一个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
#/tmp/test.php
不要依赖于通过.bash_概要文件为cronjob设置的路径(这是一个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
#/tmp/test.php
返回loaded
&这两个mcrypt支持
和mcrypt\u过滤器
都是启用的,所以我只是在crontab命令中将php路径显式设置为MAMP的php路径。以前我只是使用***php/path/to/my/script.php
。它现在可以工作了,但我不想显式地设置路径。我能解决这个问题吗?返回loaded
&这两个mcrypt支持
和mcrypt\u过滤器
都是启用的,所以我只是在crontab命令中将php路径显式设置为MAMP的php路径。以前我只是使用***php/path/to/my/script.php
。它现在可以工作了,但我不想显式地设置路径。我能解决这个问题吗?那么,本质上你是说最佳实践应该是在cron命令中设置绝对路径?我不知道。有没有办法告诉运行CLI命令的php版本使用与我的路径相同的版本?@JaredEitnier:您可以这样做***/home/your_user/.bash_profile&&php/path/to/vendor/laravel/framework/src/illighte/Foundation/start.php
(关于.或“源代码”的更多信息,请点击此处:)我将坚持绝对路径:)谢谢!那么,本质上您是说最佳实践应该是在cron命令中设置绝对路径?我不知道。有没有办法告诉运行CLI命令的php版本使用与我的路径相同的版本?@JaredEitnier:您可以这样做***/home/your_user/.bash_profile&&php/path/to/vendor/laravel/framework/src/illighte/Foundation/start.php
(关于.或“源代码”的更多信息,请点击此处:)我将坚持绝对路径:)谢谢!