synology php ftp_ssl_connect - 调用未定义的函数
synology php ftp_ssl_connect - Call to undefined function
第一次在这里提问,请文笔:-)
我正在 Synology box 上编写一个 PHP 命令行脚本以通过 ftps 获取文件,并从这个位开始:
$ftp = ftp_ssl_connect("ftp.example.com");
当从命令行 运行 时,我得到
Fatal error: Call to undefined function ftp_ssl_connect() in ...
phpinfo() 告诉我:
...
Registered PHP Streams => php, file, glob, data, http, ftp, https, ftps, zip, compress.zlib, compress.bzip2
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
...
openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.1p-fips 9 Jul 2015
OpenSSL Header Version => OpenSSL 1.0.1p-fips 9 Jul 2015
和/etc/php/conf.d/extensions.ini
包含extension = openssl.so
(没有首字母;
)
在我看来,ftp_ssl_connect()
的所有先决条件都具备了。
fwiw:
$ uname -a
Linux DiskStation01 2.6.32.12 #5644 Wed Oct 28 12:36:45 CST 2015 armv5tel GNU/Linux synology_88f6282_213
下一个要看的地方是什么?
键入 php -m
以查看已编译的模块,如 PHP does not ship the FTP extension by default if not on Windows。调用 phpinfo()
还应该显示使用的编译器开关,如果它们包括 --enable-ftp
.
奇怪的是我刚刚在我的 RS812 上试过这个,它显示了 FTP 和 OpenSSL moodules,并且工作正常:
nas-name> php -r "ftp_ssl_connect('test');"
PHP Warning: ftp_ssl_connect(): php_network_getaddresses: gethostbyname failed
in Command line code on line 1
这表示 ftp_ssl_connect
正在工作但无法解析提供的主机名。我不知道为什么你的会有所不同,除非你自己编译 PHP。
如 Niels 解决方案中所述,默认安装中缺少 ftp-模块。我需要 PHP 的 CLI 版本中的模块,但它在我的所有四台 Synology 设备(DS 412+、DS 410、RS812+ 和 RS814+)上都不可用。
启用Web Station settings did not help, but there is a solution for the CLI version in a Synology Forum Entry中的模块:
make sure that the ftp extension is selected within php settings of Web Station.
then edit /etc/php/php.ini to include a line like this:- extension = /volume1/@appstore/PHP5.6/usr/local/lib/php56/modules/ftp.so
that's it. No restarting of Web Station or the NAS is required, as php loads itself from the commandline each time a call is made to php.
第一次在这里提问,请文笔:-)
我正在 Synology box 上编写一个 PHP 命令行脚本以通过 ftps 获取文件,并从这个位开始:
$ftp = ftp_ssl_connect("ftp.example.com");
当从命令行 运行 时,我得到
Fatal error: Call to undefined function ftp_ssl_connect() in ...
phpinfo() 告诉我:
...
Registered PHP Streams => php, file, glob, data, http, ftp, https, ftps, zip, compress.zlib, compress.bzip2
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
...
openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.1p-fips 9 Jul 2015
OpenSSL Header Version => OpenSSL 1.0.1p-fips 9 Jul 2015
和/etc/php/conf.d/extensions.ini
包含extension = openssl.so
(没有首字母;
)
在我看来,ftp_ssl_connect()
的所有先决条件都具备了。
fwiw:
$ uname -a
Linux DiskStation01 2.6.32.12 #5644 Wed Oct 28 12:36:45 CST 2015 armv5tel GNU/Linux synology_88f6282_213
下一个要看的地方是什么?
键入 php -m
以查看已编译的模块,如 PHP does not ship the FTP extension by default if not on Windows。调用 phpinfo()
还应该显示使用的编译器开关,如果它们包括 --enable-ftp
.
奇怪的是我刚刚在我的 RS812 上试过这个,它显示了 FTP 和 OpenSSL moodules,并且工作正常:
nas-name> php -r "ftp_ssl_connect('test');"
PHP Warning: ftp_ssl_connect(): php_network_getaddresses: gethostbyname failed
in Command line code on line 1
这表示 ftp_ssl_connect
正在工作但无法解析提供的主机名。我不知道为什么你的会有所不同,除非你自己编译 PHP。
如 Niels 解决方案中所述,默认安装中缺少 ftp-模块。我需要 PHP 的 CLI 版本中的模块,但它在我的所有四台 Synology 设备(DS 412+、DS 410、RS812+ 和 RS814+)上都不可用。
启用Web Station settings did not help, but there is a solution for the CLI version in a Synology Forum Entry中的模块:
make sure that the ftp extension is selected within php settings of Web Station.
then edit /etc/php/php.ini to include a line like this:- extension = /volume1/@appstore/PHP5.6/usr/local/lib/php56/modules/ftp.so
that's it. No restarting of Web Station or the NAS is required, as php loads itself from the commandline each time a call is made to php.