php7 - Laravel requiere la extensión de Mcrypt PHP. No funciona para trabajos cron
mcrypt php 7 (2)
Así que estoy plagado de este problema, como muchos otros, pero sin solución.
El problema : los comandos emitidos por una tarea cron no se ejecutan y dan el mensaje: Laravel requires the Mcrypt PHP extension.
Puedo ejecutar comandos a través de artisan
y funcionan bien. Estoy usando MAMP en OSX 10.8.
He comprobado en quadrupal mi .bash_profile
para asegurarme de que la RUTA sea la correcta, que es: export PATH=/Applications/MAMP/bin/php/php5.4.4/bin:$PATH
. Confirmado por which php
en la terminal. php -v
confirma que PHP 5.4.4 está siendo utilizado. php -i
confirma que la extensión mcrypt está instalada y habilitada. Incluso agregando die(phpversion().PHP_EOL);
a vendor/laravel/framework/src/Illuminate/Foundation/start.php
se confirma que está usando la versión correcta.
Así que estoy perplejo. No sé por qué los cronjobs no reconocen la versión correcta de PHP o que la extensión mcrypt está instalada. ¿Qué puedo probar?
Este es probablemente un problema de PHP, mira el código responsable de ese mensaje:
if ( ! extension_loaded(''mcrypt''))
{
die(''Laravel requires the Mcrypt PHP extension.''.PHP_EOL);
exit(1);
}
Pon a prueba tu php en la línea de comando en ejecución:
php -r ''echo PHP_EOL . (extension_loaded("mcrypt") ? "loaded" : "not loaded") . PHP_EOL . PHP_EOL;''
MCrypt está instalado y disponible para php? Pruébalo corriendo:
php -i | grep mcrypt
Debe mostrarle al menos:
mcrypt support => enabled
mcrypt_filter support => enabled
EDITAR:
Otra posibilidad es que cron ejecute un php diferente (php, php-cli, php-cgi) y cuando seleccionaste explícitamente el correcto funcionó. Eche un vistazo a todos sus archivos php.ini para ver si mcrypt está habilitado en todos ellos.
No confíe en que PATH se configure para cronjob a través de .bash_profile (es una función de shell y los cronjobs no se ejecutan a través de un shell), debería usar algo como
* * * * * /Applications/MAMP/bin/php/php5.4.4/bin/php-something? /path/to/vendor/laravel/framework/src/Illuminate/Foundation/start.php
Una prueba podría ser algo como esto:
# /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
Ejecute php /tmp/test.php
una vez manualmente para detectar las diferencias entre la ejecución del script y cron; y siempre intente utilizar rutas absolutas en crontab (en este caso a su php binario).