Synology NAS – foutmelding – curl_init()
We hebben laatst vreemde foutmeldingen gehad op de Synology met het uitvoeren van PHP CRONJOBS die gebruik maken van CURL:
Fatal error: Call to undefined function curl_init()
Het vreemde is dat CURL zowel bij PHP 5.6 als bij PHP 7.0 aanstaat:
Webstation instelling:
Het probleem
Dat er geen php executable staat in: /usr/bin/php
maar in:
PHP 5.6: /usr/local/bin/php56
PHP 7.0: /usr/local/bin/php70
Instellingen hier boven worden toegepast in: /usr/local/etc/php56/php.ini
en: /usr/local/etc/php70/php.ini
en niet in: /etc/php/php.ini
Is curl geladen?
Ja wellicht voor de webserver wel en staan er vast symlinks of instellingen ergensop de achtergrond, maar voor de commandline is curl dan toch niet geladen omdat de verkeerde ini wordt uitgelezen, men kan dat checken door het volgende commando:
php56 -r "phpinfo();" | grep curl
test van curl, als dit commando geen foutmeldingen geeft:
/usr/local/bin/php56 -r "curl_init();"
1 2 3 4 5 6 7 8 9 |
PHP Fatal error: Uncaught Error: Call to undefined function curl_init() in Command line code:1 Stack trace: #0 {main} thrown in Command line code on line 1 Fatal error: Uncaught Error: Call to undefined function curl_init() in Command line code:1 Stack trace: #0 {main} thrown in Command line code on line 1 |
probeer maar eens:
/usr/local/bin/php56 --php-ini /etc/php/php.ini -r "curl_init()"
Wil je dan een cron script uitvoeren
De oplossing is dat je het specifieke INI bestand opgeeft voor een opgegeven php versie:
/usr/local/bin/php56 --php-ini /etc/php/php.ini /locatie/script.php
OVERIGE INFO
Welke PHP?
In een putty sessie kan men met dit commando kijken welke versie van PHP aangeroepen wordt:
php -v
1 2 3 |
PHP 5.6.11 (cli) (built: Sep 7 2018 15:40:52) Copyright (c) 1997-2015 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies |
En waar de binary staat dmv grep en kijk dan bij _SERVER[“_”]
php -i | grep /php
1 2 3 4 5 |
Configuration File (php.ini) Path => /etc/php Loaded Configuration File => /etc/php/php.ini extension_dir => /usr/lib/php/modules => /usr/lib/php/modules _ => /bin/php _SERVER["_"] => /bin/php |
in dit geval /bin/php
Welke INI?
Om te kijken welke INI (instellingen) er geladen wordt bij het aanroepen van PHP:
/bin/php --ini
1 2 3 4 |
Configuration File (php.ini) Path: /etc/php Loaded Configuration File: /etc/php/php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none) |
Specifiek php 5.6:
1 2 3 4 5 6 |
Configuration File (php.ini) Path: /usr/local/etc/php56 Loaded Configuration File: /usr/local/etc/php56/php.ini Scan for additional .ini files in: /usr/local/etc/php56/conf.d Additional .ini files parsed: /usr/local/etc/php56/conf.d/ioncube.ini, /usr/local/etc/php56/conf.d/phpMyAdmin.ini, /usr/local/etc/php56/conf.d/webstation-extensions.ini |
Specifiek php 7.0:
1 2 3 4 |
Configuration File (php.ini) Path: /usr/local/etc/php70 Loaded Configuration File: /usr/local/etc/php70/php.ini Scan for additional .ini files in: /usr/local/etc/php70/conf.d Additional .ini files parsed: (none) |