第一次在这里问一个问题,请温柔: - )
我在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
下一个要看的地方是什么?
答案 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版本的解决方案:
确保在Web Station的php设置中选择了ftp扩展名。
然后编辑/etc/php/php.ini以包含如下所示的行: - extension = /volume1/@appstore/PHP5.6/usr/local/lib/php56/modules/ftp.so < / p>
- 醇>
这就是它。不需要重新启动Web Station或NAS,因为每次调用php时,php都会从命令行加载自己。