synology php ftp_ssl_connect - 调用未定义的函数

时间:2016-01-21 22:59:35

标签: php ssl synology

第一次在这里问一个问题,请温柔: - )

我在Synology框上编写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

下一个要看的地方是什么?

2 个答案:

答案 0 :(得分:1)

键入php -m以查看已编译的模块,如PHP does not ship the FTP extension by default if not on Windows。调用phpinfo()还应该显示使用的编译器开关,如果它们包含--enable-ftp

奇怪的是我只是在我的RS812上尝试了这个,它显示了包含的FTP和OpenSSL模块,并且它工作正常:

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,否则我不知道你为什么会有所不同。

答案 1 :(得分:0)

Niels解决方案中所述,默认安装中缺少ftp-Module。我需要PHP版CLI的模块,但我的所有四个Synology设备(DS 412 +,DS 410,RS812 +和RS814 +)都无法使用该模块。

Web Station设置中启用模块没有帮助,但在Synology Forum Entry中有一个CLI版本的解决方案:

  
      
  1. 确保在Web Station的php设置中选择了ftp扩展名。

  2.   
  3. 然后编辑/etc/php/php.ini以包含如下所示的行: - extension = /volume1/@appstore/PHP5.6/usr/local/lib/php56/modules/ftp.so < / p>

  4.   
  5. 这就是它。不需要重新启动Web Station或NAS,因为每次调用php时,php都会从命令行加载自己。

  6.