【问题标题】:Send file FTP over SSL with custom port number [duplicate]使用自定义端口号通过 SSL 发送文件 FTP [重复]
【发布时间】:2010-05-25 23:52:06
【问题描述】:

可能重复:
Warning: mysql_fetch_row() expects parameter 1 to be resource

我以前问过这个问题,但方式不同。我正在尝试获取表单数据,编译成临时 CSV 文件并尝试通过 SSL 上的 FTP 发送到客户端(这是我有兴趣听取解决方案的唯一途径,除非有解决方法,否则我无法做到变化)。我尝试了以下方法:

  1. ftp_connect - 没有任何反应, 页面超时
  2. ftp_ssl_connect - 没有任何反应, 页面超时
  3. curl 库 - 相同的东西,给定 URL 它也会出错。

我收到以下信息:

  • FTPS 服务器 IP 地址
  • TCP 端口 (1234)
  • 用户名
  • 密码
  • 转储文件的数据目录
  • FTP 模式:被动

非常非常基本的代码(我认为至少应该启动连接): 代码:

<?php
$ftp_server = "00.000.00.000";  //masked for security
$ftp_port = "1234"; // masked but not 990
$ftp_user_name = "username";
$ftp_user_pass = "password";


// set up basic ssl connection
$conn_id = ftp_ssl_connect($ftp_server, $ftp_port, "20");

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, true);

echo ftp_pwd($conn_id); // /
echo "hello";

// close the ssl connection
ftp_close($conn_id);

?>

当我在 SmartFTP 客户端上运行它时,一切正常。我只是无法使用 PHP 让它工作(这是必需的)。过去有没有人成功做到这一点?我很想听听您的方法。

编辑 我在 ftp_login 之后添加了 ftp_pasv() 命令,如下所述,但仍然无法连接。我收到以下错误:

警告:ftp_login() 需要参数 1 为资源,布尔值 C:\xampp\htdocs\test.php 第 12 行

警告:ftp_pasv() 需要参数 1 为资源,布尔值 C:\xampp\htdocs\test.php 第 14 行

警告:ftp_pwd() 需要参数 1 作为资源,布尔值 C:\xampp\htdocs\test.php 第 16 行

警告:ftp_close() 需要 参数 1 为资源,布尔值 在 C:\xampp\htdocs\test.php 中给出 第 20 行

【问题讨论】:

  • 您使用的是有效的 SSL 证书还是自签名 SSL 证书? Curl 将尝试根据证书颁发机构验证 SSL 证书。 SmartFTP 你可以点击过去的 SSL 证书验证。 PHP 的ftp_ssl_connect() 也可能会尝试验证 SSL 证书。
  • @Geek Num 88 - 我正在使用通过 Go Daddy 获得的有效 ssl 证书
  • 当你使用 smartFTP 时,ssl 是否在端口 20 上工作?通常是 21 端口。
  • @JM4 还有一些想法,ftp_pasv() 需要在ftp_login() 之后调用。你检查过你的错误日志吗?
  • @JM4 也只是为了确保 remote 服务器需要有效的 SSL 证书而不是您的服务器

标签: php ssl ssh ftps


【解决方案1】:

您的 PHP 安装中是否启用了 FTP?使用 phpinfo();回显您的安装信息。应该有一个 ftp 部分,在表格中显示“FTP 支持 - 已启用”。

【讨论】:

    【解决方案2】:

    首先,您需要找出您正在使用的安全 FTP,

    1. SFTP:SSH FTP
    2. FTPS:基于 SSL 的 FTP

    要使 FTPS 工作,openssl 模块必须是静态链接的(不是作为动态扩展安装的)。

    SFTP 需要 PECL ssh2 扩展。

    【讨论】:

    • @ZZ Coder - 正如问题所述,我正在寻找 2 - FTPS - FTP over SSL。我不确定这个问题的这个术语中的“静态链接”是什么意思。
    • 检查你的 php.ini,如果你看到类似“extension=openssl.so”的东西,它是动态的。 FTPS 不适用于动态扩展。但这可能不是你的问题。我们会立即得到错误,而不是挂起。
    • @ZZ Coder - 这个扩展在我的系统上没有退出所以我不认为这是错误的原因
    • 检查 FTP 的类似行。两者都需要是静态的。另一个建议是尝试使用类似“ftps://host:port/path/file”这样的语法的 CURL。
    猜你喜欢
    • 2011-11-21
    • 1970-01-01
    • 2011-02-20
    • 2021-01-09
    • 1970-01-01
    • 2016-04-25
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多