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中的模块:

  1. make sure that the ftp extension is selected within php settings of Web Station.

  2. then edit /etc/php/php.ini to include a line like this:- extension = /volume1/@appstore/PHP5.6/usr/local/lib/php56/modules/ftp.so

  3. 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.